web-dev-qa-db-ja.com

nginxがリバースプロキシとして構成されている場合、ApacheのProxyPreserveHostのように、Hostヘッダーをダウンストリームサーバーに書き換えることができますか?

NginxにApacheのProxyPreserveHost http://httpd.Apache.org/docs/2.0/mod/mod_proxy.html#proxypreservehost オプションに相当するものが見つからないようです。これは、仮想ホストへのリバースプロキシに必要です。

ブラウザーが提供するホスト名をダウンストリームサーバーのホスト名に置き換えます。

存在しますか?

11

私は問題の解決策を見つけたと思います。ダウンストリームサーバーのホストの送信はnginxのデフォルトの動作であり、ディレクティブを使用してオーバーライドしました。

proxy_set_header Host $Host;

これは、ブラウザーによって要求されたホストをダウンストリームサーバーに送信します。まさに私が欲しかったものの正反対です。

したがって、nginxにはApacheのProxyPreserveHostに相当するものはありませんが、proxy_set_headerディレクティブを使用して同じ動作を実現できます。nginxのソリューションはより一般的です。

11

実際の例:

  set $s3_bucket 'SOMEBUCKET.s3.amazonaws.com';

  location / {
        send_timeout 5m;
        proxy_read_timeout 240;
        proxy_send_timeout 240;
        proxy_connect_timeout 240;
        proxy_http_version 1.1;
        proxy_set_header Host $s3_bucket;
        proxy_set_header Authorization '';
        proxy_hide_header x-amz-id-2;
        proxy_hide_header x-amz-request-id;
        proxy_ignore_headers "Set-Cookie";
        proxy_buffering off;
        proxy_intercept_errors on;
        proxy_redirect off;
        resolver 8.8.8.8;
        proxy_pass http://$s3_bucket;
        }
1
cod3fr3ak