Nginx服务器的反向代理proxy_pass配置⽅法讲解Nginx的配置还是⽐较简单的,如:
1 2 3 4location ~ /* {
proxy_pass }
或者可以
1 2 3 4location / {
proxy_pass }
Apache2的反向代理的配置是:
nginx和apache区别1ProxyPass /ysz/
然⽽,如果要配置⼀个相对复杂的反向代理
Nginx相对Apache2就要⿇烦⼀些了
⽐如,将url中以/wap/开头的请求转发到后台对应的某台server上可以再Nginx⾥设置⼀个变量,来临时保存/wap/后⾯的路径信息
1 2 3 4 5 6 7 8 9location ^~ /wap/
{
if ($request_uri ~ /wap/(\d+)/(.+))
{
set $bucketid $1;
set $params $2;
}
proxy_pass $st:6601/$params; }
也可以⾸先rewrite⼀下,然后再代理:
1 2 3 4location ^~ /wap/{
rewrite /wap/(\d+)/(.+) /$2?$args break; proxy_pass $1.test:6601;
}
或者
1 2 3 4location ~* /wap/(\d+)/(.+)
{
proxy_pass $1.test:6601/$2?$args; }
注意上⾯最后的?$args,表明把原始url最后的get参数也给代理到后台
如果在proxy_pass中使⽤了变量(不管是主机名变量$1或后⾯的$2变量),则必须得加这段代码但如果pass_proxy后没⽤任何变量,则不需要加,它默认会把所有的url都给代理到后台,如:
1 2 3 4location ~* /wap/(\d+)/(.+) {
proxy_pass
}
⽽Apache2相对就简单多了:
1 2 3 4 5 6ProxyPassMatch ^/wap/(.*)$ $1
if ($host ~* www.(.*)){
set $host_without_www $1;
rewrite (.*)$ $host_without_www/www$1; }
url的/问题在nginx中配置proxy_pass时,当在后⾯的url加上了/,相当于是绝对根路径,则nginx不会把location中匹配的路径部分代理⾛;如果没有/,则会把匹配的路径部分也给代理⾛。
下⾯四种情况分别⽤192.168.1.4/proxy/test.html 进⾏访问。第⼀种:
1 2 3location /proxy/ { proxy_pass }
会被代理到127.0.0.1:81/test.html 这个url 第⼆咱(相对于第⼀种,最后少⼀个 /)
1 2 3location /proxy/ { proxy_pass }
会被代理到127.0.0.1:81/proxy/test.html 这个url 第三种:
1 2 3location /proxy/ { proxy_pass }
会被代理到127.0.0.1:81/ftlynx/test.html 这个url。第四种情况(相对于第三种,最后少⼀个 / ):
1 2 3location /proxy/ { proxy_pass }
会被代理到127.0.0.1:81/ftlynxtest.html 这个url
上⾯的结果都是本⼈结合⽇志⽂件测试过的。从结果可以看出,应该说分为两种情况才正确。即127.0.0.1:81 (上⾯的第⼆种) 这种和127.0.0.1:81/.... (上⾯的第1,3,4种)这种。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论