私はこれを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
同じログインページにリダイレクトされ、再度ログインする必要があります。二重ログインを避けることはできますか?
答え1
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
IPではない)を提供し、X-Forwarded-Proto
クライアントがnginx
HTTPまたはHTTPSを介して接続されていることを確認します。