目前将托管在Github的静态博客迁移到了Linode上的Nginx服务器,在接入层使用Nginx proxy进行分流,接入http和https请求,然后转发至下层的Nginx服务器。
当访问80端口时,由firewalld将请求转发至8080端口给Nginx proxy,Nginx proxy再将请求转发到8000端口给下游Nginx处理。
###问题:
访问
http://server_name/folder/
时表现正常。访问
http://server_name/folder
时下游Nginx将请求重定向到了http://server_name:8000/folder/
。
原因是请求到达下游的Nginx时服务器认为hostname是server_name:8000,从而无法正确重定向。
###解决方案:
在Nginx proxy的配置文件里加入proxy_redirect
项将下游Nginx响应header里对应的Location值改为正确的URL。
location / {
proxy_pass http://127.0.0.1:8000;
#将重定向中的端口号去除
proxy_redirect http://$server_name:8000/ http://$server_name/;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
这下问题解决。
Reference: