proxy_pass方法主要用于Nginx的代理,其使用方法比较灵活多样,不同的配置也会起到不同的效果,我们来分别了解一下。
1、简单的代理
我们来看一下下面这段代码,作用是在访问域名www.abc.com时,通过Nginx代理到了内网中的127.0.0.10这台服务器的8080端口上,配置时使用的是 / 表示该域名下的所有访问都会指向这里
server {
listen 80;
server_name www.abc.com;
index index.html index.htm index.php;
access_log /var/log/nginx/99cdtop.access.log main;
access_log on;
location / {
proxy_redirect off ;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header REMOTE-HOST $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_connect_timeout 600;
proxy_send_timeout 600;
proxy_read_timeout 600;
proxy_buffer_size 1600k;
proxy_buffers 4 3200k;
proxy_busy_buffers_size 6400k;
proxy_temp_file_write_size 6400k;
proxy_max_temp_file_size 128m;
proxy_pass http://127.0.0.10:8080;
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
特别说明:
(1)proxy_set_header相关参数的设置,是为了把所有访问的真实主机信息、IP信息传送给代理服务器,不然对方接收到的全是Nginx服务器的信息,这样对于交互性比较强的网站来说是致命的。
(2)如果访问不同的域名或不同的服务器,最好设置不同的日志文件,这样便于查错,如果不使用则是使用Nginx统一的日志,这样查起来太麻烦。
这一部分下面的配置中将省略!
2、使用upstream方法代理
这个方法主要是方便把单独的代理存储为独立的文件进行区分和设置,可以更好地进行多个服务器的代理设置,包括每个子服务器的权重,以及分发的方式等
这里注意两点:
(1)upstream后面是你当前配置的名称,在后面的proxy_pass参数中要对应
(2)ip_hash表示负载均衡配置,ip_hash的设置可以使每个请求按访问ip的hash结果分配,这样每个访客固定访问一个后端服务器,可以解决session的问题,备选为url_hash,指按用户的访问URL来进行分配,这样访问相同的URL时会指向同一台服务器,主要用于下载站点之类的,可以节略带宽资源。
upstream abc {
ip_hash;
server 127.0.0.10:8080 weight=6;
server 127.0.0.11:8080 weight=4;
server 127.0.0.12:8080 down;
}
server {
listen 80;
server_name www.99cd.top 99cd.top;
index index.html index.htm index.php;
location / {
proxy_redirect off ;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header REMOTE-HOST $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_connect_timeout 600;
proxy_send_timeout 600;
proxy_read_timeout 600;
proxy_buffer_size 1600k;
proxy_buffers 4 3200k;
proxy_busy_buffers_size 6400k;
proxy_temp_file_write_size 6400k;
proxy_max_temp_file_size 128m;
proxy_next_upstream error timeout invalid_header http_500 http_503 http_404;
proxy_pass http://abc;
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
3、代理中的几点区别
在nginx中配置proxy_pass代理转发时,如果在proxy_pass后面的url加/,表示绝对根路径;如果没有/,表示相对路径,把匹配的路径部分也给代理走。
假设下面四种情况分别用 http://127.0.0.1/proxy/test.html 进行访问。
第一种:
location /proxy/ {
proxy_pass http://127.0.0.1/;
}
1
2
3
代理到URL:http://127.0.0.1/test.html
第二种(相对于第一种,最后少一个 / )
location /proxy/ {
proxy_pass http://127.0.0.1;
}
1
2
3
代理到URL:http://127.0.0.1/proxy/test.html
第三种:
location /proxy/ {
proxy_pass http://127.0.0.1/abc/;
}
1
2
3
代理到URL:http://127.0.0.1/abc/test.html
第四种(相对于第三种,最后少一个 / )
location /proxy/ {
proxy_pass http://127.0.0.1/abc;
}
1
2
3
代理到URL:http://127.0.0.1/abctest.html
————————————————
版权声明:本文为CSDN博主「九丝城主」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/weixin_48803304/article/details/107876414