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

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

私はこれを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_redirectURL書き換えと同様の操作を行います。たとえば、次のようになります。

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_redirectproxy_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(nginxIPではない)を提供し、X-Forwarded-ProtoクライアントがnginxHTTPまたはHTTPSを介して接続されていることを確認します。

関連情報