[英]Rewrite nginx host and proxypass to squid
我想實現以下目標:
請求主持人:
http://example.com.proxy.myserver.com
應該改寫成
並通過nginx proxypass傳遞給squid服務器。
server {
listen 80;
server_name ~^(?<subdub>.*)\.proxy\.myserver\.com$;
location / {
rewrite ^ $scheme://$subdub break;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header Host $scheme://$subdub;
proxy_set_header Request-URI $scheme://$subdub;
proxy_pass http://localhost:3128;
proxy_redirect off;
}
}
問題是,nginx會立即將此請求重定向到http://example.com
任何想法如何讓這個工作?
301重定向正是nginx應該對重寫規則做的事情:因為你將$ scheme:// $ subdub放在替換部分,nginx將執行301,忽略該“break”標志。
如果替換字符串以http://開頭,則客戶端將被重定向,並且任何進一步的重寫指令都將終止。
你想“重寫”或“重定向”嗎? 如果它只是用於重寫,您可以刪除該重寫指令:
rewrite ^ $scheme://$subdub break;
它將起作用,因為您的上游服務器可以依賴HOST標頭來確定流量目標(虛擬主機)。
同時發送到上游服務器的主機頭是錯誤的。 它應該是
proxy_set_header Host $subdub;
$ scheme不應該放在Host頭中。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.