web-dev-qa-db-ja.com

TomcatおよびSSLで使用するためのnginxの構成

私はさまざまなSSL構成のサンプルをGoogleで調べてみましたが、正しく設定されているようですが、2つの問題があります。

  1. https://mysite.com をロードすると、ブラウザウィンドウの右上隅に表示されるはずのロックが表示されません。
  2. Java舞台裏のアプリケーションは、httpUtil.GetRequestURL()を使用して現在のリクエストを取得します http://mysite.com です。

Hostヘッダーを$ http_Hostではなく$ Hostに設定しようとしましたが、proxy_redirectを設定してURLをhttpsに設定しようとしましたが、どちらも効果がありませんでした。

私のSSL構成は以下の通りです。誰かが私が間違ったことを教えてもらえますか?

server {
    listen       443;
    server_name  dev.mysite.com;

    access_log  /var/log/nginx/dev_mysite_access.log;
    error_log  /var/log/nginx/dev_mysite_error.log;

    ssl on;
    ssl_certificate /export/nginx/certs/mysite.com.crt;
    ssl_certificate_key /export/nginx/certs/mysite.com.key;

    location / {
        # give site more time to respond
        proxy_read_timeout 120;

        # needed to forward user's IP address
        proxy_set_header  X-Real-IP  $remote_addr;

        # needed for HTTPS
        proxy_set_header  X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header Host $http_Host;
        proxy_redirect off;
        proxy_max_temp_file_size 0;

        proxy_pass http://localhost:8081;
    }
}
6
Janine Ohmer

6か月以上経ちましたが、試してみましょう。 X-Forwarded-Protoヘッダーがないと思います。 nginxでの関連する仮想ホスト構成:

        server jira.site.com;
        ...
        location /jira {
            proxy_set_header Host $Host;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-Proto https;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_pass http://127.0.0.1:8080/jira;
        }

たとえば上記のJIRAのように、プロキシの背後にあることをTomcatに伝える必要がある場合があります。

   <Connector port="8080" protocol="HTTP/1.1"
           connectionTimeout="20000"
           URIEncoding="UTF-8"
           redirectPort="8443"
           scheme="https"
           proxyName="jira.site.com"
           proxyPort="443"/>

そうすれば、アプリケーションごとにいくつかのポートができてしまうかもしれませんが、問題なく動作します。

Troyengelについては、なぜ "Nginx + Tomcat"に悩むのでしょうか。まあ、nginxの方がはるかに高速であり、メモリとCPUの両方の点でほとんど何もしません。そうすれば、Tomcatなどで無駄になるリソースが増えます。 :/

最後に、Apache-AJP13-Tomcatを適切な統合と呼ぶことはもうありません。 Tomcat APRリスナーを有効にしたら:

<Listener className="org.Apache.catalina.core.AprLifecycleListener" SSLEngine="on" />

そしてsendfile(- tcnative ライブラリを使用)では、すべてが飛んでしまいます。次に、nginxから静的コンテンツを直接提供しますが、php-fpmにプロキシすることで、お気に入りのphpサイトを実行するのに十分なパワーがあります。

まあ、それは私の経験からですが、ymmv。

6
igracek

私の仕事でも同様の設定があります。 nginxはSSLを終了し、生のHTTPをTomcatに返します。このアプリケーションでは複数のドメイン名を使用しています。

server.xmlに行を追加するだけで十分であることがわかりました。

    scheme="https"
    proxyPort="443"

tomcatもnginxも、proxyNameは不要であり、その他の変更も必要ありませんでした。

4
Daniel Farrell