nginx
をリバースプロキシとして使用しています。Webインターフェイスにログインすると、プロキシされたURLにリダイレクトされます。私はそれを避けて、常に「server_name」をURLとして保持したいと思います。出来ますか?
これは私の/etc/nginx/conf.d/my_app.conf
です:
server {
listen 443 ssl;
server_name my-app.net;
ssl_certificate /etc/pki/tls/certs/my-app.cer;
ssl_certificate_key /etc/pki/tls/private/my-app.key;
ssl_protocols TLSv1.1 TLSv1.2;
access_log /var/log/nginx/my-app.access.log main;
location / {
proxy_pass http://ip_of_the_app:7180/;
proxy_redirect off;
}
}
http://my-app.net
に接続し、ログイン情報を入力すると、同じログインページでhttp://ip_of_the_app:7180
にリダイレクトされ、再度ログインする必要があります。この二重ログインを回避できますか?
proxy_redirect
をoff
に設定しないでください。これは、想定していることを実行していません。 proxy_redirect
は、URLの書き換えに似た処理を実行します。次に例を示します。
location /sales/ {
proxy_pass http://ip_of_the_app:7180/;
proxy_redirect http://ip_of_the_app:7180/ http://$Host/sales/;
}
これにより、/sales/
パスを別の場所でホストできます。しかし、それでも、proxy_redirect
のデフォルトパラメータは、無料で正確に実行します。デフォルトでは、場所はproxy_pass
にあるものにリダイレクトされます(proxy_redirect
をまったく設定しない場合、またはproxy_redirect default;
を使用しない場合は、デフォルトのパラメーターが使用されます)。
proxy_redirect
を設定する必要はありません。
不足しているのは、アプリに送信する必要があるヘッダーです。それらの中で最も重要なのはHost
です。これにより、必要に応じてプロキシが実行され、ブラウザに正しいURLが保持されます。
location / {
proxy_pass http://ip_of_the_app:7180/;
proxy_set_header Host $Host;
}
http://ip_of_the_app:7180/
のアプリがHost: my-app.net
ヘッダーを含むリクエストを受信することに注意してください。
また、さらにいくつかのヘッダーの使用を検討する必要があります。
proxy_set_header Referer $http_referer;
proxy_set_header X-Forwarded-For $remote_addr;
proxy_set_header X-Forwarded-Proto $scheme;
これにより、アプリ内のhttp://ip_of_the_app:7180/
でのロギングが改善されます。 X-Forwarded-For
は、実際のクライアントのIP(nginx
s IPではなく)を提供し、X-Forwarded-Proto
は、クライアントがHTTPまたはHTTPSを介してnginx
に接続したかどうかを確認します。