Nginxリバースプロキシリダイレクト


13

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と、同じログインページにリダイレクトされ、再度ログインする必要があります。この二重ログインを回避できますか?


tonio94、問題は解決されましたか?はいの場合、答えを受け入れてください。いいえの場合、不足しているものを明確にしてください。
cnst 2016

2
私は昨日それをテストしました、それは機能し、proxy_redirectを削除する必要があります。助けてくれてありがとう。
tonio94 2016

回答:


25

設定しないでくださいproxy_redirectoffあなたがそれをやっていると思う何をやっていないこと、。 proxy_redirect次に例を示します。

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実際のクライアントnginxのIP (IPではなく)を指定X-Forwarded-Protoし、クライアントがnginxHTTPまたはHTTPSを介してに接続しているかどうかを確認します。


ご協力いただきありがとうございます。proxy_redirectは必要ありませんが、proxy_set_headerリファラーip_of_the_app:7180を正しく機能させるために設定する必要があります。
tonio94 2016

@ tonio94-おかげで、私は答えを更新しました。の通常の使用方法は、リクエストからコピーするRefererだけ$http_refererです。リクエストにRefererヘッダーがない場合は機能しません。そのため、ハードコーディングで解決する場合があります。
2016

@JonathanKomar-ありがとうございます。正解です。コメントに気付くまでに少し時間がかかりました。
19
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.