nginx – 两个域,两个SSL证书,一个IP

前端之家收集整理的这篇文章主要介绍了nginx – 两个域,两个SSL证书,一个IP前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

我正在尝试运行两个域,一个带有通配符证书,另一个带有来自一个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;
}

现在我也有一些子域名,这就是我使用通配符证书的原因.子域配置看起来像这样:

/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;
}

此设置非常简洁,因为所有子域都继承了example.com配置中的ssl设置,因为它是default_server.

现在添加第二个域名的最佳方法是什么?如果我只是以相同的方式添加域,我显然会在启动时出错,因为有一个重复的default_server条目.如果我从example2.com的配置中删除default_server条目,它将回退到example1.com的ssl配置.

我想要但不知道如何实现:

每个域都有一个“主”配置,我们称之为example1.com-default和example2.com-default.

这些配置应该包括不同子域之间通用的所有设置,例如SSL配置,完美转发安全性……以及不同的子域只是从其各自主域继承这些设置的较小配置.

因此sub1.example1.com将继承example1.com-default中的SSL设置,sub1.example2.com将继承example2.com-default中的SSL设置.

这是可能的,如果是这样我将如何实现这一目标?

提前致谢!

最佳答案
如果您指的是其他SSL设置而不是证书/密钥,我建议您将其配置移动到Nginx配置中的http级别.

这样,设置将继承到每个服务器块.

例如,在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";

conf.d中的文件包含在http级别中.

default_server方法在这里不起作用.

在此之后,服务器块将如下所示:

server {
    listen 443 default_server ssl;
    server_name _;

    ssl_certificate /path/to/certificate;
    ssl_certificate_key /path/to/key;
}

并且,如果要覆盖某些域的某些设置,则可以在服务器级别重新输入指令.

猜你在找的Nginx相关文章