med*_*cre 6 nginx ssl-certificate
我正在尝试运行两个域,一个带有通配符证书,另一个带有来自一个 IP 和一个 nginx 的常规证书。
设置:example1.com 带有通配符证书 example2.com 带有常规证书
我当前用于通配符设置的 nginx 配置如下所示(我还没有开始添加第二个域):
/etc/nginx/sites-available/example1.com:
server {
listen 443 default_server ssl;
server_name _;
ssl_certificate /etc/nginx/ssl/example1.com/example1.com.crt;
ssl_certificate_key /etc/nginx/ssl/example1.com/example1.com.key;
ssl_session_cache shared:SSL:10m;
ssl_session_timeout 10m;
# Perfect Forward Security
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_prefer_server_ciphers on;
ssl_ciphers "EECDH+ECDSA+AESGCM EECDH+aRSA+AESGCM EECDH+ECDSA+SHA384 EECDH+ECDSA+SHA256 EECDH+aRSA+SHA384 EECDH+aRSA+SHA256 EECDH+aRSA+RC4 EECDH EDH+aRSA RC4 !aNULL !eNULL !LOW !3DES !MD5 !EXP !PSK !SRP !DSS +RC4 RC4";
}
server {
listen 443;
server_name example1.com;
error_log /var/log/nginx/example1.com.error.ssl.log;
access_log /var/log/nginx/example1.com.access.ssl.log;
root /var/www/example1.com/;
index index.html;
}
server {
listen 80;
server_name example1.com;
rewrite ^ https://$server_name$request_uri? permanent;
}
Run Code Online (Sandbox Code Playgroud)
现在我还有一些子域,这就是我使用通配符证书的原因。子域配置如下所示:
/etc/nginx/sites-available/sub1.example1.com
server {
listen 443;
server_name sub1.example1.com;
error_log /var/log/nginx/sub1.example1.com.error.ssl.log;
access_log /var/log/nginx/sub1.example1.com.access.ssl.log;
root /var/www/sub1.example1.com/;
location / {
# nothing
}
}
server {
listen 80;
server_name sub1.example1.com;
rewrite ^ https://$server_name$request_uri? permanent;
}
Run Code Online (Sandbox Code Playgroud)
这个设置非常简洁,因为所有子域都从example.com
配置继承了 ssl 设置,因为它是default_server
.
现在添加第二个域的最佳方法是什么?如果我只是以相同的方式添加域,我显然会在启动时遇到错误,因为有重复的default_server
条目。如果我default_server
从example2.com
的配置中删除条目,它将回退到 .ssl 配置中的 ssl 配置example1.com
。
我想要但不知道如何实现:
每个域都有一个“主要”配置,我们称之为example1.com-default
和example2.com-default
.
这些配置应该包括不同子域之间通用的所有设置,例如 SSL 配置、Perfect Forward Security...,而不同的子域只是从各自的主域继承这些设置的较小配置。
因此,sub1.example1.com
将从 继承 SSL 设置example1.com-default
并将sub1.example2.com
从example2.com-default
.
这是可能的,如果是的话,我将如何实现这一目标?
提前致谢!
如果您指的是证书/密钥之外的其他 SSL 设置,我建议您将其配置移至http
nginx 配置中的级别。
这样设置将被继承到每个server
块。
例如,在 Debian 及其衍生版本中,您可以创建/etc/nginx/conf.d/ssl.conf
文件,并在其中放置以下几行:
ssl_session_cache shared:SSL:10m;
ssl_session_timeout 10m;
# Perfect Forward Security
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_prefer_server_ciphers on;
ssl_ciphers "EECDH+ECDSA+AESGCM EECDH+aRSA+AESGCM EECDH+ECDSA+SHA384 EECDH+ECDSA+SHA256 EECDH+aRSA+SHA384 EECDH+aRSA+SHA256 EECDH+aRSA+RC4 EECDH EDH+aRSA RC4 !aNULL !eNULL !LOW !3DES !MD5 !EXP !PSK !SRP !DSS +RC4 RC4";
Run Code Online (Sandbox Code Playgroud)
里面的文件conf.d
包含在http
关卡中。
default_server
方法在这里不起作用。
之后,server
块将如下所示:
server {
listen 443 default_server ssl;
server_name _;
ssl_certificate /path/to/certificate;
ssl_certificate_key /path/to/key;
}
Run Code Online (Sandbox Code Playgroud)
而且,如果您想覆盖某些域的某些设置,则可以在关卡中重新输入指令server
。