我想代理一個請求到另一臺使用proxy_pass的服務器,同時刪除匹配的路徑前綴。我相信這樣做的一種方式如下:NGINX proxy_pass刪除路徑前綴並解析DNS
location /a/ {
proxy_pass https://website.com/
}
例如, http://localhost/a/b.html
的請求將代理到https://website.com/b.html
。
據我所知在NGINX上的非商業版本中的問題是website.com
的DNS A記錄將在啓動時被永久加載和緩存。我已經看到了一種技術,通過在proxy_pass指令中使用諸如$request_uri
的變量來解決此問題,從而迫使NGINX根據記錄的TTL重新解析DNS。
E.g.
location /a/ {
rewrite ^/a/(.*) /$1 break;
proxy_pass https://website.com/$request_uri
}
不幸的是,似乎上述不起作用,因爲它似乎仍然通過/ a /前綴到上游。
基本上我想要在這裏實現的是代理一個請求,同時刪除路徑前綴,以便DNS記錄不會永久緩存。
謝謝。
謝謝你的回覆,我今天會測試一下,如果它能正常工作,我會標記接受的答案。我發現以前關於解決方案的建議[這裏](http://gc-taylor.com/blog/2011/11/10/nginx-aws-elb-name-resolution-resolvers)。我相當確信,在解決DNS問題上,這具有「預期」的效果,因爲如果沒有這種情況,每隔幾天左右上游就不再可用,我需要重新啓動。我已經運行了3個多月,現在沒有重新啓動,並且自從進行更改以來我沒有遇到任何DNS問題。 –
呵呵,是的,如果nginx在proxy_pass內存在任何變量的情況下解決了所有主機名的5分鐘緩存,那將是有道理的;它實際上甚至以這種方式記錄下來,但它並不十分明確!每天學習! :-)因此,我想上面的應該可以工作,你甚至應該在'.com'之後去掉'/',例如''。com $ uri' – cnst
因此,初步測試似乎可以與你原來的建議'重寫^/a /(.*)/ $ 1 break; proxy_pass https://website.com/$uri$is_args$args;)'但與剛'.COM $ uri'(查詢參數不會傳播到上游OK,我會第一建議堅持謝謝對於回覆! –