質問: nginx redirect via proxy、rewrite and preserve url nginxでは、次のようにurlをリダイレクトしようとしています。http://example.com/some/path -> http://192.168.1.24 ユーザーはブラウザに元のurlを表示します。ユーザーがリダイレクトされた後、/section/index.htmlへのリンクをクリックすると、リダイレクトにつながるリクエストを実行しますhttp://example.com/some/path/section/index.html -> http://192.168.1.24/section/index.html 再び元のurlを保持します。私たちの試みには、プロキシと書き換えルールを使用したさまざまなソリューションが含まれています。以下は、ソリューションに最も近い構成を示しています(これはexample.com webサーバーのwebサーバー構成です)。ただし、これにはまだ2つの問題があります。 webサーバーが受信したリクエストurl http://192.168.1.24に/some/pathが含まれているため、必要なページを提供できないため、正しく書き換えられません。 ページが提供された後にリンクにカーソルを合わせると、urlに/some/pathがありません server { listen 80; server_name www.example.com; location /some/path/ { proxy_pass http://192.168.1.24; proxy_redirect http://www.example.com/some/path http://192.168.1.24; proxy_set_header host $host; } location / { index index.html; root /var/www/example.com/htdocs; } } example.comのwebサーバー構成を変更するだけのソリューションを探しています。 192.168.1.24(nginxも)の構成を変更できますが、example.comを介してアクセスがプロキシされる数百の異なるサーバーに対してこの設定を繰り返す必要があるため、これを避けたいと思います。
回答: proxy_pass ディレクティブではuri部分を使用する必要があります。また、proxy_redirectディレクティブの順序引数を混同しているため、おそらくまったく必要ありません。 nginxには、このディレクティブの適切なデフォルトがあります。この場合、あなたのlocationブロックは本当に簡単です:location /some/path/ { proxy_pass http://192.168.1.24/; # note this slash -----------^ proxy_set_header host $host; }