ApacheのProxyPreserveHost http://httpd.apache.org/docs/2.0/mod/mod_proxy.html#proxypreservehostオプションに相当するものがnginx で見つからないようです。これは、仮想ホストへのリバースプロキシに必要です。
ブラウザーが提供するホスト名をダウンストリームサーバーのホスト名に置き換えます。
存在しますか?
ApacheのProxyPreserveHost http://httpd.apache.org/docs/2.0/mod/mod_proxy.html#proxypreservehostオプションに相当するものがnginx で見つからないようです。これは、仮想ホストへのリバースプロキシに必要です。
ブラウザーが提供するホスト名をダウンストリームサーバーのホスト名に置き換えます。
存在しますか?
回答:
私は問題の解決策を見つけたと思います。ダウンストリームサーバーのホストの送信はnginxのデフォルトの動作であり、ディレクティブを使用してオーバーライドしました。
proxy_set_header Host $host;
ブラウザが要求したホストをダウンストリームサーバーに送信します。まさに私が望んだものの反対。
したがって、nginxにはApacheに相当するものはありませんがProxyPreserveHost
、proxy_set_header
ディレクティブで同じ動作を実現でき、nginxのソリューションはより一般的です。
$http_host
Nginxのドキュメントによると存在しません:nginx.org/en/docs/varindex.html
実例:
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;
}
proxy_set_header Host $http_host;
。