【问题标题】:How to handle multiple ssl server with nginx如何使用 nginx 处理多个 ssl 服务器
【发布时间】:2015-03-20 04:40:57
【问题描述】:

我有 2 个 SSL 网络服务器,我必须使用 nginx 来处理它们。 我也有一个 http 服务器(重定向工作正常)。

当我只处理 http 和 https(只有一个 ssl 网络服务器)时,重定向效果很好。

问题是,当我想处理 2 个 ssl 网络服务器时:

na.test.lan 用于 https nnm.toast.lan 用于 https

https 请求由第一个服务器块文件处理,该文件将我重定向到错误的 ssl 网络服务器(可能是第一个侦听端口 443 的服务器块)。

这是我的 ssl.conf:

server {
    listen       443;
    server_name  na.test.lan ;

    ssl                  on;
    ssl_certificate      /etc/pki/nginx/server.crt;
    ssl_certificate_key  /etc/pki/nginx/server.key;

    ssl_session_timeout  1m;

    ssl_protocols  SSLv2 SSLv3 TLSv1;
    ssl_ciphers  ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP;
    ssl_prefer_server_ciphers   on;

    location / {
        proxy_pass https://172.17.100.200/; }
}
 server {
    listen       443;
    server_name  nnm.toast.lan ;   

    ssl                  on;
    ssl_certificate      /etc/pki/nginx/server.crt;
    ssl_certificate_key  /etc/pki/nginx/server.key;

    ssl_session_timeout  1m;

    ssl_protocols  SSLv2 SSLv3 TLSv1;
    ssl_ciphers  ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP;
    ssl_prefer_server_ciphers   on;

    location / {
        proxy_pass https://179.60.192.3/; }
}

【问题讨论】:

    标签: http ssl nginx https server


    【解决方案1】:

    这是我的解决方案,它终于奏效了:

    ssl_certificate      /etc/pki/nginx/server.crt;
    ssl_certificate_key  /etc/pki/nginx/server.key;
    
    HTTPS server configuration
    
    server {
    listen       443;
    server_name  na.test.lan ;
    
    ssl                  on;
    ssl_session_timeout  1m;
    
    ssl_protocols  SSLv2 SSLv3 TLSv1;
    ssl_ciphers  ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP;
    ssl_prefer_server_ciphers   on;
    
    location / {
        proxy_pass https://172.17.100.200/;
     }
    }
    
    server {
    listen       443;
    server_name  na.toast.lan ;
    
    ssl                  on;
    ssl_session_timeout  1m;
    
    ssl_protocols  SSLv2 SSLv3 TLSv1;
    ssl_ciphers  ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP;
    ssl_prefer_server_ciphers   on;
    
    location / {
        proxy_pass https://172.17.201.2/;
     }
    }
    
    server {
    listen       443;
    server_name  na.tist.lan ;
    
    ssl                  on;
    ssl_session_timeout  1m;
    
    ssl_protocols  SSLv2 SSLv3 TLSv1;
    ssl_ciphers  ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP;
    ssl_prefer_server_ciphers   on;
    
    location / {
        proxy_pass https://172.17.202.2/;
     }
    }
    

    【讨论】:

      【解决方案2】:

      您应该为每个 SSL 服务器使用不同的 IP 地址。这是 SSL 协议的本质,在建立连接的过程中必须完成 SSL 握手,因此服务器必须选择 SSL 证书发送给客户端。但是此时它对 Host: 头一无所知,所以它只是选择了第一个。

      更新:或使用 SNI http://nginx.org/en/docs/http/configuring_https_servers.html#sni

      【讨论】:

      • 我已经通过“proxy_pass”选项指定了ip地址没有?
      • 我的意思是你监听的IP地址
      • 这是一个反向代理,它只有一个IP地址
      • 如果你想为 nginx 使用一个 IP 地址,那么可能会查看 SNI nginx.org/en/docs/http/configuring_https_servers.html#sni 。不过自己没试过。
      • 我对两个 ssl 网络服务器使用相同的证书。 Nginx 是否无法在有关域或子域(.conf 文件中的名称服务器)指定的服务器上重定向?
      猜你喜欢
      • 1970-01-01
      • 2014-08-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-07-01
      • 1970-01-01
      • 1970-01-01
      • 2012-08-11
      相关资源
      最近更新 更多