我有一个使用 nginx 和 Plack/Starman 作为上游运行的网站。简单配置如下:
上游 findmjob { 服务器unix:/tmp/findmjob.sock; } 服务器 { 听80; 服务器名称findmjob.com www.findmjob.com fb.findmjob.com; 访问日志/findmjob.com/log/access.log; 错误日志/findmjob.com/log/error.log 信息; 根/findmjob.com/静态; 地点 / { try_files $uri@proxy; 访问登录关闭; 最大有效期限; } 位置@proxy { proxy_set_header 主机 $http_host; proxy_set_header X-Forwarded-Host $http_host; proxy_set_header X-真实IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_pass http://findmjob; } }
我有一些返回重定向的 perl 代码。这意味着它在 perl/plack 下运行良好:
Faylands-MacbookPro:findmjob.com fayland$ curl -I 'http://findmjob.com:5000/job/GK3bmm+P4RG+2MTa2fVHmw/' HTTP/1.0 301 已永久移动 日期:2012 年 5 月 1 日星期二 06:14:38 GMT 服务器:HTTP::Server::PSGI 地址:http://findmjob.com/freelance/GK3bmm+P4RG+2MTa2fVHmw 服务器:Perl Dancer 1.3095 内容长度:0 内容类型:text/html;字符集=utf-8 X-Powered-By:Perl Dancer 1.3095
正如你所看到的,它确实是'http://findmjob.com/“”。
但是当我使用 socks 和 nginx 时,它返回类似的内容:
Faylands-MacbookPro:findmjob.com fayland$ curl -I 'http://findmjob.com/job/GK3bmm+P4RG+2MTa2fVHmw/' HTTP/1.1 301 已永久移动 服务器:nginx/0.7.65 日期:2012 年 5 月 1 日星期二 06:15:20 GMT 内容类型:text/html;字符集=utf-8 连接:保持连接 地址:.com/freelance/GK3bmm+P4RG+2MTa2fVHmw 内容长度:0 X-Powered-By:Perl Dancer 1.3095
这http://findmjob被删除了,只剩下.com了?!
非常感谢您的帮助。
更新:升级到最新版本已修复该问题。
Faylands-MacbookPro:findmjob.com fayland$ curl -I 'http://findmjob.com/job/GK3bmm+P4RG+2MTa2fVHmw/' HTTP/1.1 301 已永久移动 服务器:nginx/1.2.0 日期:2012 年 5 月 1 日星期二 08:22:29 GMT 内容类型:text/html;字符集=utf-8 内容长度:0 连接:保持连接 地址:http://findmjob.com/freelance/GK3bmm+P4RG+2MTa2fVHmw X-Powered-By:Perl Dancer 1.3095
谢谢
答案1
这是因为您的上游定义为'http://findjob' 默认proxy_redirect
为
proxy_redirect http://findjob /;
这意味着 nginx 将删除等于第一个参数的字符串proxy_redirect
(http://findjob) 来自代理Location:
。
改用proxy_redirect off;
来修复此问题。检查文档了解详情。