nginx配置使用一个域名重定向到两个不同的项目站点

本文详细介绍了如何使用nginx配置一个域名重定向到两个不同的项目站点,包括listen、server_name、root等基本配置,以及location、proxy_pass、proxy_set_header等关键设置,确保正确实现跨域请求和日志记录。

一、nginx配置文件:

server {
    listen 80;
    server_name a;
    root /a;
    index index.php index.htm index.html;

    location / {
         try_files $uri $uri/ /index.php$is_args$args;
    }
           location ^~ /b/ {
               proxy_pass     http://127.0.0.1:自定义/;
               proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
               proxy_set_header Host $host;
               proxy_set_header X-Real-IP $remote_addr;
           }
    location ~ \.php$ {
        try_files $uri /index.php =404;
        fastcgi_pass 127.0.0.1:9000;
        fastcgi_index index.php;
        fastcgi_buffers 16 16k;
        fastcgi_buffer_size 32k;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        fastcgi_read_timeout 600;
        include fastcgi_params;
    }

    access_log  a.log;
    error_log  error.a.log;
}

 

二、每一点细讲

1、index

index.php index.htm index.html;

这里的是会按照顺序来依次查询,第一个是查询index.php

2、try_files

try_files $uri $uri/ /index.php$is_args$args;

详情解析:

当用户请求 http://localhost/example 时,这里的 $uri 就是 /example。 
try_files 会到硬盘里尝试找这个文件。如果存在名为 /$root/example(其中 $root 是项目代码安装目录)的文件,就直接把这个文件的内容发送给用户。 
显然,目录中没有叫 example 的文件。然后就看 $uri/,增加了一个 /,也就是看有没有名为 /$root/example/ 的目录。 
又找不到,就会 fall back 到 try_files 的最后一个选项 /index.php,发起一个内部 “子请求”,也就是相当于 nginx 发起一个 HTTP 请求到 http://localhost/index.php。 

2、location ^~ /b/ {}

匹配任何已 /b/ 开头的任何查询并且停止搜索。任何正则表达式将不会被测试。

^~ 如果把这个前缀用于一个常规字符串,那么告诉nginx 如果路径匹配那么不测试正则表达式。

3、proxy_pass     http://127.0.0.1:自定义/;

解析:

假设下面用 http://192.168.1.1/proxy/test.html 进行访问。

location /proxy/ {

    proxy_pass http://127.0.0.1/;

}

代理到URL:http://127.0.0.1/test.html

第二种(相对于第一种,最后少一个 / )

location /proxy/ {

    proxy_pass http://127.0.0.1;

}

代理到URL:http://127.0.0.1/proxy/test.html

 

4、proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

在默认情况下经过proxy转发的请求,在后端看来远程地址都是proxy端的ip 。

添加这条配置之后:

意思是增加一个$proxy_add_x_forwarded_for到X-Forwarded-For里去,注意是增加,而不是覆盖,当然由于默认的X-Forwarded-For值是空的,所以我们总感觉X-Forwarded-For的值就等于$proxy_add_x_forwarded_for的值,实际上当你搭建两台nginx在不同的ip上,并且都使用了这段配置,那你会发现在web服务器端通过request.getHeader("X-Forwarded-For")获得的将会是客户端ip第一台nginx的ip

在第一台nginx中,使用

proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

现在的$proxy_add_x_forwarded_for变量的"X-Forwarded-For"部分是空的,所以只有$remote_addr,而$remote_addr的值是用户的ip,于是赋值以后,X-Forwarded-For变量的值就是用户的真实的ip地址了。

到了第二台nginx,也使用

proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

现在的$proxy_add_x_forwarded_for变量,

X-Forwarded-For部分包含的是用户的真实ip,

$remote_addr部分的值是上一台nginx的ip地址,

于是通过这个赋值以后现在的X-Forwarded-For的值就变成了"用户的真实ip,第一台nginx的ip"。

 

5、proxy_set_header Host $host;

服务器名和后端服务器的端口(访问端口)一起传送。

 

6、proxy_set_header X-Real-IP $remote_addr;

其中这个X-real-ip是一个自定义的变量名,名字可以随意取,这样做完之后,用户的真实ip就被放在X-real-ip这个变量里了,然后,在web端可以这样获取:

request.getHeader("X-real-ip")

 

7、 location ~ \.php$ {}

访问http://localhost/a.php,这时~ 开头表示区分大小写的正则匹配

 

8、try_files $uri /index.php =404;

则表示当尝试访问得文件返回404时,进行重定向。

 

9、fastcgi_pass 127.0.0.1:9000;

配置TCP使用端口:9000

 

10、fastcgi_index index.php;

fastcgi默认的主页资源,为ndex.php

 

11、fastcgi_buffers 16 16k;

控制 nginx 最多创建 16个大小为 16K 的缓冲区

 

12、fastcgi_buffer_size 32k;

fastcgi_buffer_size 则是处理 Response 时第一个缓冲区的大小,不包含在fastcgi_buffers中,

总计能创建的最大内存缓冲区大小是 16*16K+32K = 288k。

这些缓冲区是根据实际的 Response 大小动态生成的,并不是一次性创建的。比如一个 32K 的页面,Nginx 会创建 2*16K 共 2 个 buffers。

 

13、fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;

脚本文件请求的路径

 

14、fastcgi_read_timeout 600;

读取时timeout的时间长度为600

使用nginx服务器如果遇到timeou情况时可以如下设置参数,使用fastcgi:

         fastcgi_connect_timeout 75;  链接

         fastcgi_read_timeout 600;   读取

         fastcgi_send_timeout 600;   发请求

 

15、access_log  a.log

日志配置


16、error_log  error.a.log;

错误日志配置

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值