0

Nginx と Tomcat で ssh オフロードを実行しようとしています。私のセットアップは次のとおりです。ブラウザ - (HTTPS) -> nginx -> (http/https) -> tomcat

x-forwarded-proto ヘッダーでリクエスト スキームを転送するように nginx をセットアップしました。

                    proxy_pass http://default_upstream;
                    add_header Set-Cookie "SRVGROUP=$group; path=/";
                    proxy_next_upstream error;
                    proxy_set_header Host $host;
                    proxy_set_header X-Real-IP $remote_addr;
                    proxy_set_header X-Host $http_host;
                    proxy_set_header X-Forwarded-For $http_x_forwarded_for;
                    proxy_set_header X-URI $uri;
                    proxy_set_header X-ARGS $args;
                    proxy_set_header X-Forwarded-Proto $scheme;
                    proxy_set_header X-Scheme $scheme;
                    proxy_set_header Refer $http_refer;
                    proxy_redirect http:// $scheme://;
                    proxy_set_header Strict-Transport-Security "max-age=7200";

Tomcat では、常に http を取得する X-Forwarded-Proto ヘッダーを出力します。交換したら

proxy_set_header X-Forwarded-Proto $scheme;

proxy_set_header X-Forwarded-Proto https;

それはすべて動作します。しかし、すべてのページが https 経由で提供されているわけではないため、$scheme を使用したいと考えています。

解決策を探している、または誰かが以前に同じ問題を抱えていたかどうか。

4

4 に答える 4

1

見つけた。SSLのnginx構成では、誰かがこれを残していました:

proxy_pass http://127.0.0.1;

これは再びnginxにリダイレクトされますが、ポート80でリダイレクトされます。コメントアウトしたところ、すべて正常に動作するようになりました。

助けてくれてありがとう。

于 2013-03-14T14:49:53.550 に答える
0

proxy_set_header X-Forwarded-Proto https; SSL オフロードの場合は正しいです。あなたが期待しているように見えるのは、Nginxがhttp接続をプロキシすることです。それも可能ですが、ポート 80 のリスナーとして個別に設定してから、アップストリーム サーバーへのプロキシ接続を行う必要があります。

基本的に、ポート 443 とポート 80 には個別のサーバー構成ブロックが必要です。

于 2013-03-12T19:09:39.893 に答える
0

いくつかのマイナーな変更を加えて、私の devbox で構成を試しました。アップストリーム スクリプトは、https からアクセスすると「https」を認識し、http からアクセスすると「http」を認識します。したがって、設定は機能します。

私が変更した唯一の行は、アップストリームに送信された Host ヘッダーです。から

proxy_set_header Host $host;

proxy_set_header Host my_upstream_domain_name;

同じ devbox でホストされている両方のサイト (アップストリーム/ダウンストリーム) があります。したがって、ホスト ヘッダーがアップストリームのドメイン名ではなく、現在のドメイン名を指している場合、私のテストは機能しません。

アップストリームが別のサーバーでホストされている場合、上記の変更はテストに関係しない可能性があります。

于 2013-03-13T03:04:20.980 に答える