nginx proxy_pass 和 proxy_redirect

forest7707發表於2017-05-18
proxy_pass:充當代理伺服器,轉發請求
proxy_redirect:修改301或者302轉發過程中的Location。預設值為proxy_redirect default。

例:
location / {
              proxy_pass http://192.168.8.46:8080/; #/結尾
              #proxy_redirect default #此為預設值,加不加都一樣。
         }
這樣代理到其它機器的8080埠,訪問的時候都沒問題,
Location: http://192.168.8.46/haha4/,瀏覽器的url位址列也是http://192.168.8.46/haha4/

若:
location / {
              proxy_pass http://192.168.8.46:8080;#去掉/
              proxy_redirect off #修改預設值default為off
         }
如果去掉最後的/以後,curl -I http://192.168.8.46/haha4 訪問
Location: http://192.168.8.46:8080/haha4/
瀏覽器訪問顯示的位址列為http://192.168.8.46:8080/haha4/,(如果還是之前的,需要先刪快取)
可以看到,真實的Location地址全部暴露出來的,這個時候就需要使用proxy_redirect修改這個Location
配置如下:
location / {
              proxy_pass http://192.168.8.46:8080;
             proxy_redirect http://192.168.8.46:8080/haha4/ http://192.168.8.46/haha4/;
         }
這樣,就能修改Location的地址,Location: http://192.168.8.46/haha4/,在瀏覽器裡也是如此,就不會暴露埠號等資訊,
當然,你還可以把Location弄到其它網站上去,例如
proxy_redirect http://192.168.8.46:8080/haha4/ ;
然後瀏覽器就跳過去了。


總結:
一切幕後黑手就是
 proxy_pass http://192.168.8.46:8080; 不加/結尾,只要把/加上,proxy_redirect 用預設值就OK了。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/21220384/viewspace-2139314/,如需轉載,請註明出處,否則將追究法律責任。

相關文章