Nginx

在 nginx(同一伺服器)中與萬用字元和根域共享兩個 SSL 證書

  • December 7, 2017

我為我的域結構購買了一個萬用字元證書和一個證書:

app.example.com => single
*.app.example.com => wildcard

這兩個路由都應該指向同一伺服器上的同一個項目目錄

注意:RapidSSL Support 說我必須購買兩個,因為與經典域 example.com 不同,我的一個是 app.example.com,所以萬用字元不會關心我的 3 個十進制根

現在,我需要在 nginx 中設置兩個不同的證書。我的預設一個(適用於我的萬用字元),但不是“app.example.com”,因為它的 ssl 證書不包括在內。

server {
   listen 443 ssl default_server;
   listen [::]:443 ssl default_server;

   ssl on;
   ssl_certificate /etc/ssl/ssl_certificate.cer;  // this is my wildcard cert
   ssl_certificate_key /etc/ssl/private.key;


   root /var/www/example/public;
   index index.php index.html index.htm;

   server_name .app.example.com;

   location / {
           try_files $uri $uri/ /index.php?$query_string;
   }

   location ~ \.php$ {
           try_files $uri =404;
           fastcgi_split_path_info ^(.+\.php)(/.+)$;
           fastcgi_pass unix:/var/run/php/php7.0-fpm.sock;
           fastcgi_index index.php;
           fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
           include fastcgi_params;
   }
}

// And for redirect:
server {
   listen 80 default_server;
   listen [::]:80 default_server;

   server_name .app.example.com;
   return 301 https://$server_name$request_uri;
}

如何將其分為兩部分並包含我的 app.example.com 的新證書並保留萬用字元?

使用兩個server塊,一個用於單個域,一個用於萬用字元域。指定適當的server_namessl_certificate指令。

server {
   listen 443 ssl;
   listen [::]:443 ssl;

   server_name *.app.example.com;    
   ssl_certificate /etc/ssl/ssl_certificate1.cer;
   ssl_certificate_key /etc/ssl/private1.key;

   ...
}
server {
   listen 443 ssl;
   listen [::]:443 ssl;

   server_name app.example.com;    
   ssl_certificate /etc/ssl/ssl_certificate2.cer;
   ssl_certificate_key /etc/ssl/private2.key;

   ...
}

有關詳細資訊,請參閱此文件

您可以使用include指令將通用配置從其他文件中提取到每個塊中。

引用自:https://serverfault.com/questions/887127