Nginx有时会神秘地重定向到后端内部网址

时间:2014-04-29 05:23:17

标签: redirect nginx proxy

我有一个非常恼人的问题,我使用nginx代理apache服务器(http://internalip.com:18080),配置是这样的:

location /svn {
    proxy_set_header Host $host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-Proto https;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_pass http://internalip.com:18080;
}

这是最及时的,但有时nginx只是将用户重定向到内部地址,因此用户将会出现提示错误。 我不知道出了什么问题,它正在发生。 nginx版本是1.4.4-4~precision0。 有谁知道这个? 提前谢谢!

1 个答案:

答案 0 :(得分:0)

我发现了问题。
关键点是Apache DirectorySlash,如果我访问https://outipaddress.com/theurl,即使X-Forword- *标题是apache,apache也会重定向到http://internalip.com:18080/theurl/组。我认为这是apache httpd的一个bug。
解决方法是在nginx端执行重定向。

`location /svn/ {
    if ($request_uri ~ "/[a-zA-Z0-9-_]+$") {
        rewrite ^ https://$server_name$request_uri/;
    }
    proxy_set_header Host $host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-Proto https;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_pass http://internalip.com:18080;
}`

现在nginx将重定向所有未以斜杠结尾的网址,并且看起来像一个目录(仅包含符号字符)。