如何配置NginX:一个域使用SSL,另一个域不使用

时间:2018-10-16 12:34:59

标签: ssl nginx

我使用NginX在单个主机上有2个域:

  1. 在80和443端口上均具有SSL(Python后端)功能的完整服务器。

  2. 只需重定向到另一个域,无需SSL。

在不同的server文件的.conf部分中对它们进行了描述:

1。

server {
    listen 80;
    listen 443 ssl;
    server_name  verni-verni.ru www.verni-verni.ru;

    # Certificates
    ssl_certificate /var/www/SSL/ca.crt;
    ssl_certificate_key /var/www/SSL/private.key;

    # Logs
    ...

    # Static Content
    ...

    # Reverse Proxy
    location / {
        ...
    }
}

2。

server {
    listen 80;
#    listen 443;
    server_name  gdeclient.ru;

    rewrite ^/(.*)$ http://... redirect;
}

如果我仅为第二个域设置80端口,则它不会重定向HTTPS连接。

但是,如果我还为第二个域设置了443端口(没有SSL),那么端口443对于第一个域不起作用,我得到了the following error

  

在SSL握手时服务器监听SSL端口时未定义“ ssl_certificate”

问题:

  1. 如果第二个重定向服务器的域名不同,为什么第二个重定向服务器会影响第一个重定向服务器?

  2. 是否可以在不使用SSL且不影响第一台服务器的情况下为第二台服务器设置HTTPS重定向?

2 个答案:

答案 0 :(得分:1)

回答您的问题:

  1. Nginx接受端口443上的连接,然后需要确定要使用哪个服务器来处理它。请参见how Nginx processes a requestServer Name Indication

  2. 如果您没有用于第二个域的证书,那么即使浏览器不抱怨该证书,您也将无法接受该域的HTTPS连接-即使您只想将其重定向到其他地方。

如果仅想防止与第二个域的HTTPS连接被第一个域错误处理,只需将listen 443 ssl;添加到第二个域,然后使ssl_certificate语句成为全局语句,或重复它们在第二个server块中。

答案 1 :(得分:1)

如果第二个重定向服务器的域名不同,为什么第二个重定向服务器会影响第一个重定向服务器?

因为在浏览器发送HTTP请求之前,SSL握手和连接已建立,nginx不知道所请求服务器的名称。在您的情况下,所有端口443请求的请求都将转到默认服务器块(第二服务器块),找不到ssl_certificate配置并抱怨。

如果将ssl_certificate声明设为全局,则它将正确地将其重定向到第一个服务器块。