5

私は次のことを達成したい:

リクエストホスト:

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にリダイレクトすることです。

これを機能させる方法はありますか?

4

1 に答える 1

1

301リダイレクトは、nginxがその書き換えルールで行うものとまったく同じです。置換部分に $scheme://$subdub を置くため、nginxはその「ブレーク」フラグを無視して301を行います。

置換文字列が http:// で始まる場合、クライアントはリダイレクトされ、それ以降の書き換えディレクティブはすべて終了します。

「書き換え」または「リダイレクト」しようとしていますか? 書き換えのみの場合は、その書き換えディレクティブを削除できます。

    rewrite ^ $scheme://$subdub break;

アップストリーム サーバーは HOST ヘッダーに依存してトラフィック ターゲット (仮想ホスティング) を決定できるため、機能します。

また、アップストリーム サーバーに送信されたホスト ヘッダーが間違っています。そのはず

    proxy_set_header  Host $subdub;

$scheme を Host ヘッダーに入れるべきではありません。

于 2013-03-29T04:03:15.843 に答える