簡體   English   中英

將nginx主機和proxypass重寫為squid

[英]Rewrite nginx host and proxypass to squid

我想實現以下目標:

請求主持人:

http://example.com.proxy.myserver.com

應該改寫成

http://example.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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM