私の設定は次のとおりです。
問題は、私のNginxがリクエストをポート8529にリダイレクトし、これがhttp://some.domain.com:8529/foo
のようにURLに表示されることです。これは、私が達成したいことではありません。
私の現在のnginxsites-available
関連ファイルは次のとおりです。
server {
listen 80;
server_name some.domain.com;
location / {
proxy_pass http://localhost:8529/foo;
proxy_redirect off;
proxy_set_header Host $Host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-NginX-Proxy true;
}
}
some.domain.com
が/etc/hosts
内にあり、127.0.0.1
を指している場合。
ヒントはありますか?
プロキシ中にポートを非表示にするには、サーバー本体に次の2行が必要です。
server_name_in_redirect off;
proxy_set_header Host $Host:$server_port;
Confは次のようなものです:
server
{
listen 80;
server_name example.com;
server_name_in_redirect off;
proxy_set_header Host $Host:$server_port;
location / {
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass http://localhost:8080;
}
access_log off;
}
アップストリームサーバーがリダイレクトを発行し、nginxがproxy_redirect off;
でそれを書き換えることを禁止し、proxy_pass
ディレクティブの末尾にスラッシュがないか、アプリケーションがこれらのURLを構築しています。
注:Alexeyが言ったように、この場合、nginxはロケーションプレフィックスに一致する正規化されたURIの一部、つまり/
を削除してから、proxy_pass
URIに追加するため、末尾のスラッシュが重要です。したがって、バックエンドサーバーは/foobar
でリクエストを受信しますが、おそらく/foo/bar
を待っています。