2013-03-12 34 views
18

我們有兩臺服務器A和B.服務器A在全球範圍內訪問。他安裝了nginx。這就是我在CONF:nginx.conf中的正確代理路徑

location /test { 
    proxy_pass http://localserver.com; 
} 

它應該做的,是翻譯addreess http://globalserver.com/test(即服務器A)到內部服務器地址http://localserver.com。但是,它附加了位置路徑,即找到http://localserver.com/test,這根本不可用。我怎樣才能讓代理傳遞到正確的地址,拋出位置的最後一部分?

回答

30

這應該有效。 Nginx應該剝離上游本地服務器上的'/ test'路徑。所以我可以說的是,這不是原因。爲了使它更好一點,試試這個:

location /test/ { 
    proxy_pass http://localserver.com/; 
} 

的2斜槓我在第2行中添加將避免誤匹配「/ testAbc的」,併發出錯誤的請求到上游本地服務器,例如。

你有在同一位置塊

proxy_redirect 

線?如果您的上游本地服務器重定向,那麼該線路上的錯誤將導致您所描述的問題。

[UPDATE]找到原始配置爲什麼不起作用的根本原因和我的工作原理:如果proxy_pass指令本身沒有URI路徑,nginx不會替換URI路徑部分。所以我在末尾添加一個斜槓(斜線作爲URI路徑)的修復觸發了URI路徑替換。

參考:http://wiki.nginx.org/HttpProxyModule#proxy_pass

如果需要傳輸URI在未經處理的形式,然後指令proxy_pass應該沒有URI部分使用

location /some/path/ { 
    proxy_pass http://127.0.0.1; 
} 
+0

那麼這裏的解決方案是,如果我添加在反斜槓(根路徑)在我的URI末尾'proxy_pass http:// 127.0.0.1 /'nginx不會在最後添加傳入路徑嗎? – 2018-02-27 13:46:23