nginx中使用absolute_redirect解决代理重定向问题
文章目录
- 一、事故现场
- Nginx服务器A(192.168.2.206)
- Nginx服务器B(192.168.1.143)
- 浏览器访问测试
- 二、事故原因
- 三、解决方法
- 修改服务器A(192.168.2.206)的nginx配置
- 浏览器访问测试
一、事故现场
Nginx服务器A(192.168.2.206)
通过nginx监听5566
端口,并部署了两个静态网站web1和web2。
web1部署在根目录,web2部署到/pstest路由。
server {
listen 5566;
server_name 192.168.2.206;
location / {
root /home/webserver/package/web1;
index index.html;
}
location /pstest {
alias /home/webserver/package/web2;
index index.html;
}
}
Nginx服务器B(192.168.1.143)
通过nginx代理服务器A,监听8888
端口,并代理192.168.2.206:5566.
server {
listen 8888;
server_name 192.168.1.143;
location / {
proxy_pass http://192.168.2.206:5566;
}
}
浏览器访问测试
访问:
http://192.168.1.143:8888/pstest
会重定向到:
http://192.168.1.143:5566/pstest/
因为服务器B(192.168.1.143)没有监听5566,故网络连接被拒绝;
期望的结果应该是重定向到:
http://192.168.1.143:8888/pstest/
二、事故原因
因为服务器A(192.168.2.206)通过nginx部署web2静态网站时,使用了alias
。
nginx使用alias命令进行静态页面转发的时候,如果是…/xxxx1/xxxx2这种会被重定向到…/xxxx1/xxxx2/。并且重定向的时候,会重定向到当前nginx正在监听的端口,所以引发了上述问题;
三、解决方法
可以通过修改nginx配置来解决:
absolute_redirect off;
这样重定向的页面就是相对页面,浏览器自动会加上ip和端口。
修改服务器A(192.168.2.206)的nginx配置
server {
listen 5566;
server_name 192.168.2.206;
location / {
root /home/webserver/package/web1;
index index.html;
}
location /pstest {
alias /home/webserver/package/web2;
index index.html;
absolute_redirect off;
}
}
浏览器访问测试
访问:
http://192.168.1.143:8888/pstest
会重定向到:
http://192.168.1.143:8888/pstest/
此时访问的端口8888
,故能正常访问;