今天用nginx作為trac的反代,發現一個問題,就是登入登出跳轉的時候是白頁,看了下網頁相應內容,發現相應的location是空的。查了一下發現是只單純用了proxy_pass,沒有使用proxy_redirect.
假設前端url是example.com。后端server域名是in.com,那么后端server在返回refresh或location的時候,host為in.com,顯然這個信息直接返回給客戶端是不行的,需要nginx做轉換,這時可以設置:
proxy_redirect http://in.com /
nginx會將host及port部分替換成自身的server_name及listen port。不過這種配置對server_name有多個值的情況下支持不好。
我們可以用nginx內部變量來解決這一問題:
proxy_redirect http://in.com http://$host:$server_port
搞定
如果不設定的話,proxy_redirect默認是default屬性,官網例子是這樣介紹default的:
引用
location /one/ {
proxy_pass http://upstream:port/two/;
proxy_redirect default;
}
location /one/ {
proxy_pass http://upstream:port/two/;
proxy_redirect http://upstream:port/two/ /one/;
}
proxy_pass http://upstream:port/two/;
proxy_redirect default;
}
location /one/ {
proxy_pass http://upstream:port/two/;
proxy_redirect http://upstream:port/two/ /one/;
}