nginx 2つのサイトの設定競合

nginx 2つのサイトの設定競合

ドメインの 1 つに nginx を設定しました。これは、Wildfly アプリケーション サーバーのフロントエンドとして機能します。ある日、同じマシンでベータ テスト環境を設定することにしました。そこで、別のサブドメインを設定に追加しました。再起動後、nginx は最初のアプリケーションの提供を停止しました。設定ファイルは次のとおりです。

メインサブドメイン:

server {
    listen 80;
    server_name sub.example.com;
    return 301 https://$host$request_uri;
}

server {

    listen 443;
    server_name sub.example.com;

    ssl_certificate           /etc/nginx/ssl/bundle.crt;
    ssl_certificate_key       /etc/nginx/ssl/sub.example.com.key;

    ssl on;
    ssl_session_cache  builtin:1000  shared:SSL:10m;
    ssl_protocols  TLSv1 TLSv1.1 TLSv1.2;
    ssl_ciphers HIGH:!aNULL:!eNULL:!EXPORT:!CAMELLIA:!DES:!MD5:!PSK:!RC4;
    ssl_prefer_server_ciphers on;

    access_log            /var/log/nginx/sub.example.com.access.log;

    location / {

      proxy_set_header        Host $host;
      proxy_set_header        X-Real-IP $remote_addr;
      proxy_set_header        X-Forwarded-For $proxy_add_x_forwarded_for;
      proxy_set_header        X-Forwarded-Proto $scheme;

      proxy_pass          http://localhost:8080;
      proxy_read_timeout  90;
    }
}

テストサブドメイン:

server {
    listen 443;
    server_name sub-test.example.com;
    return 301 http://$host$request_uri;
}

server {

    listen 80;
    server_name sub-test.example.com;


    access_log            /var/log/nginx/sub-test.example.com.access.log;

    location / {

      proxy_set_header        Host $host;
      proxy_set_header        X-Real-IP $remote_addr;
      proxy_set_header        X-Forwarded-For $proxy_add_x_forwarded_for;
      proxy_set_header        X-Forwarded-Proto $scheme;

      proxy_pass          http://localhost:8080;
      proxy_read_timeout  90;

    }
}

上記の各構成は、単独では期待どおりに機能することを付け加えておきます。ただし、組み合わせると互いにうまく機能しません。最初の構成を要求すると、NOT FOUND HTTP ステータスが返されます。

もちろん、問題は私の Wildfly サーバーにあるかもしれません。仮想ホストを処理するように構成されていますが、それが正常かどうかはよくわかりません。ただし、両方のアプリケーションが実行され、そのうちの 1 つだけが nginx によってプロキシされている場合は、正常に動作します。

手伝ってくれてありがとう。

答え1

Patrykさん、残念ながら、名前ベースのHTTPSサーバーを複数設定することはできません。説明は長いですが、ここ詳細な情報と例については(Apacheベース、nginxについてはわかりません)

答え2

複数の https サイトを使用できます。

この技術は SNI (サーバー名表示) と呼ばれます。参照

SSL 部分をサーバー構成から移動することで、証明書を構成するためのオーバーヘッドも削減されます。私はリバース プロキシで次の構造を使用しています。

sites.d/ | -ssl.conf | -vhost1.conf | -vhost2.conf

ssl.conf には次の内容が含まれます。

ssl_certificate /etc/ssl/certs/ssl.crt; ssl_certificate_key /etc/ssl/certs/server.key;

もう 1 つのオプションは、異なる共通名を持つ個別の証明書を使用することです。

関連情報