redirect - Nginx 放弃​​与多个虚拟主机的 SSL 握手

标签 redirect ssl nginx

我在具有多个主机(1 个 IP)的 Ubuntu VPS 上设置了一个 Nginx 服务器。以前,1 台主机设置了证书并且没有重定向(允许 http),1 台主机有证书并通过 301 强制使用 HTTPS。现在我试图强制我的所有主机使用 SSL 并强制使用 HTTPS,我看到 Nginx 正在下降当我有超过 1 个带有 301 指令的虚拟主机时握手。特别是,我看到的错误是:

[error] 12370#0: *30 在 SSL 握手时监听 SSL 端口的服务器中未定义“ssl_certificate”,客户端:(已删除),服务器:0.0.0.0:443

问题肯定出在我的 301 上,因为如果我排除它们,我就没有问题。在我的服务器 block 中强制使用 HTTPS 和非 www 的最佳方法是什么?

我所有的虚拟主机都在 /etc/nginx/conf.d 中,还有 ssl.conf(如下所列)。如果需要,我可以提供 nginx.conf,但我没有看到任何有用的东西。

example1.conf

server {
    server_name www.example1.com example1.com;
    return 301 https://example1.com$request_uri;
}

server {
    listen 443;

    server_name www.example1.com
    return 301 https://example1.com$request_uri;
}

server {
    listen 443 ssl;

    server_name example1.com;

    ssl_certificate /etc/letsencrypt/live/example1.com/cert.pem;
    ssl_certificate_key /etc/letsencrypt/live/example1.com/privkey.pem;

    root /var/www/example1.com;

    location / {
        try_files $uri $uri/ $uri.html =404;
    }

    access_log /var/log/nginx/example1.com.access.log;
    error_log /var/log/nginx/example1.com.error.log;
}

example2.conf
example1.conf 相同(除了 example2.com 而不是 example1.com)

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";

# HSTS
add_header Strict-Transport-Security max-age=31536000;

指出其他明显的错误也是值得赞赏的。

最佳答案

通过删除(至少现在)解决了

server {  
    listen 443;

    server_name www.example1.com
    return 301 https://example1.com$request_uri;
}

似乎由于没有指定证书,所有 HTTPS 请求都会命中此 block ,然后连接会断开。

关于redirect - Nginx 放弃​​与多个虚拟主机的 SSL 握手,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34539495/

相关文章:

python - 如何从 Python 程序连接到 Db2 Event Store 数据库?

nginx - 入口未绑定(bind)到负载均衡器

apache - www 和 https 重定向未按预期工作

c++ - 如何在 C++ 中刷新重定向的标准输出

java.security.cert.CertificateException : No subject alternative DNS name matching

python-2.7 - Debian 中的 SSL 证书未更新

ruby-on-rails - 远期到期日

laravel - Vue JS 和 Laravel 在同一台服务器上但端口不同(SSL 问题)

javascript - 停止 onclick 重定向

ssl - NGINX:将非 www https 重定向到 https://www