web-dev-qa-db-ja.com

HTTPと同じ設定でnginx HTTPSを提供

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

現在、それはこのようなものです:

server {
  listen 80;
  ...
}

server {
  listen 443;

  ssl on; # etc.
  ...
}

私は次のように何かをすることができますか?

server {
  listen 80, 443;
  ...

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

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

server {
    listen 80;
    listen 443 default_server ssl;

    # other directives
}

公式ハウツー

270
Jauder Ho

受け入れられた答えを明確にするために、あなたは省略する必要があります

SSL on;

そしてあなたは0.8.21以降のnginxバージョンのために以下が必要です

listen 443 ssl;

参照:

Nginx Docs-単一のHTTP/HTTPSサーバーの構成

90
Sean Tan

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

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

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

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

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;
}
9
Jonathan

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

listen xxx.xxx.xxx.xxx;
listen xxx.xxx.xxx.xxx:443 default ssl;
4
Matt Bostock