Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ssl/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何配置NginX:一个域使用SSL,另一个域不使用SSL_Ssl_Nginx - Fatal编程技术网

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

如何配置NginX:一个域使用SSL,另一个域不使用SSL,ssl,nginx,Ssl,Nginx,我在使用NginX的单个主机上有两个域: 在80和443端口上使用SSL(Python后端)的完整服务器 只需重定向到另一个域,无需SSL 它们在不同的.conf文件的server部分中进行了描述: 一, 二, 如果我只为第二个域设置了80个端口,那么它不会重定向HTTPS连接 但是,如果我为第二个域设置443端口(不带SSL),那么端口443对第一个域不起作用,我会得到: ssl握手时,在侦听ssl端口的服务器中未定义“ssl_证书” 问题是: 为什么第二个重定向服务器会影响第一个,如果它们有

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

  • 在80和443端口上使用SSL(Python后端)的完整服务器

  • 只需重定向到另一个域,无需SSL

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

    一,

    二,

    如果我只为第二个域设置了80个端口,那么它不会重定向HTTPS连接

    但是,如果我为第二个域设置443端口(不带SSL),那么端口443对第一个域不起作用,我会得到:

    ssl握手时,在侦听ssl端口的服务器中未定义“ssl_证书”

    问题是:
  • 为什么第二个重定向服务器会影响第一个,如果它们有不同的域名

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


  • 回答你的问题:

  • Nginx接受端口443上的连接,然后需要决定使用哪台服务器来处理它。见和

  • 如果您没有第二个域的证书,您将无法接受该域的HTTPS连接,而浏览器不会抱怨该证书-即使您只想将其重定向到其他位置

  • 如果您只想防止第一个域错误地处理到第二个域的HTTPS连接,只需添加
    listen443SSL
    到第二个域,并使
    ssl\u证书
    语句全局化,或在第二个
    服务器
    块中重复它们

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

    因为SSL握手和连接是在浏览器发送HTTP请求之前建立的,而nginx不知道请求服务器的名称。在您的情况下,对于所有端口443请求,请求将转到默认服务器块(第二个服务器块),找不到ssl_证书配置,并发出投诉


    如果您将ssl\U证书声明设置为全局,那么它将正确地重定向到第一个服务器块。

    谢谢,我找到了!还有一个问题:当使用具有不同SSL的多个域时,这种行为会导致问题吗?据我所知,如果NginX在发送证书之前没有检查域,它可能会发送错误的证书,这不适合当前域,客户端将拒绝连接。。。对于如此长的延迟,很抱歉,您可以将所有SSL证书捆绑到一个证书中,或者使用具有多个名称的SSL证书,请参见。还可以查看服务器名称指示(SNI)
    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 / {
            ...
        }
    }
    
    server {
        listen 80;
    #    listen 443;
        server_name  gdeclient.ru;
    
        rewrite ^/(.*)$ http://... redirect;
    }