HTTPと同じ設定で提供されるnginx HTTPS


195

2つのnginx server {}ブロック間で構成ディレクティブを共有する方法はありますか?サイトのHTTPSコンテンツとHTTPコンテンツはまったく同じ構成で提供されるため、ルールの重複を避けたいと思います。

現在、次のようになっています。

server {
  listen 80;
  ...
}

server {
  listen 443;

  ssl on; # etc.
  ...
}

以下のラインに沿って何かできますか?

server {
  listen 80, 443;
  ...

  if(port == 443) {
    ssl on; #etc
  }
}

回答:


262

これを次のように1つのサーバーブロックに結合できます。

server {
    listen 80;
    listen 443 default_server ssl;

    # other directives
}

公式ハウツー


6
ああ、nginxがポート80を介してロードされた場合、SSLディレクティブを無視するほどインテリジェントであるとは思いもしませんでした。
ceejayoz 09年

72
nginxはあらゆる種類のWINです。
ジャダーホー

5
あなたは一つのサーバで複数のサイトを持っている場合と、それが「デフォルト」は必須ではないことを言及する価値がある
luchaninov

4
それが痛いので、エレガントな...
アリックスアクセル

3
ここで働いていません...「プレーンHTTP要求がHTTPSポートに送信されました」
gcstr


27

あなたが提案するような方法は知りませんが、確かに簡単で保守可能な方法があります。

共通のサーバー設定を別のファイル、つまり「serverFoo.conf」に移動し、次のincludeように別のserver {}ブロックに移動します。

server {
    listen 80;
    include serverFoo.conf;
}
server {
    listen 443 ssl;
    include serverFoo.conf;
}

2
+1 =私のために働く。(他の方法では機能しませんでした。)

また、他の例では、ロードバランサーとして機能する場合、「proxy_pass」を考慮しません。
マイクパーセル

このオプションはserver_name、ポートごとに異なる場合に最適です
-iDev247

5
SSLを使用しないで、listen 443 ssl;今から使用します。
danger89

これは、最近のnginx 1.10.1で機能している唯一のソリューションのようです。何らかの理由で2 listen行が正しく解釈されませんが、別の行に移動するとserver{}修正されます。
アルトゥールボデラ16

9

既に役立つ回答を拡張して、より完全な例を示します。

server {

    # Listen on port 80 and 443
    # on both IPv4 and IPv6
    listen 80;
    listen [::]:80 ipv6only=on;
    listen 443 ssl;
    listen [::]:443 ipv6only=on ssl;

    # Set website folder
    root /path/to/your/website;

    # Enable SSL
    ssl_certificate your-cert.pem;
    ssl_certificate_key your-cert.key;
    ssl_session_timeout 5m;
    ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
    ssl_ciphers ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv3:+EXP;
    ssl_prefer_server_ciphers on;
}

2
私は、これはかなり古い答えは知っているが、私はちょうどあなたがPOODLEの脆弱性に対する脆弱としてのSSLv3プロトコルを無効にする必要があること、それを使用することができ、他人のために指摘したかった非常に完全だとして:disablessl3.comは、 代わりに使用します。ssl_protocols TLSv1のTLSv1の.1 TLSv1.2;
user147787

4

Igor / Jauderの投稿に追加するだけで、特定のIPを聞いている場合は、次を使用できます。

listen xxx.xxx.xxx.xxx;
listen xxx.xxx.xxx.xxx:443 default ssl;
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.