Nginx 'listen:port' 指令、Cloudflare 和 SSL

Nginx 'listen:port' 指令、Cloudflare 和 SSL

我在服务器上有两个网站,每个网站在 Nginx 中都有自己的 vhost 文件。两个网站也都在 Cloudflare 上,并且都拥有我通过 Let's Encrypt 获得的 SSL 证书。

两个站点的 vhosts 文件如下:

server {
    server_name domain.co.uk www.domain.co.uk;
    listen 80;
    listen domain.co.uk:80;
    return 301 https://$http_host$request_uri;

    // ...
}

server {
    server_name domain.co.uk www.domain.co.uk;

    listen 443;
    listen domain.co.uk:443;

    // ...
}

我发现,如果我在浏览器中请求第二个网站,有时它会显示第一个网站。这是因为通用listen [port];行吗?

此外,如果我发出 SSL 请求,浏览器会因主机名不匹配而引发安全警告,因为它试图显示第一个域的 SSL 证书。

我发现如果我退出listen 80;或者listen 443;Nginx 就会发脾气,因为 Cloudflare 的 IP 是动态的,并且与线路不匹配listen [host]:443;

我不确定我是否从根本上不了解 Nginx 以及它的工作原理。

答案1

消除

listen domain.co.uk:80;

这是我的一个配置的开始

server_name www.example.com;
listen 443 ssl http2;

ssl_certificate /var/lib/acme/certs/***CERT_DIRECTORY/fullchain;
ssl_certificate_key /var/lib/acme/certs/***CERT_DIRECTORY/privkey;

# Set up preferred protocols and ciphers. TLS1.2 is required for HTTP/2
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_prefer_server_ciphers on;
ssl_ciphers ECDH+AESGCM:ECDH+AES256:ECDH+AES128:DH+3DES:!ADH:!AECDH:!MD5;

# This is a cache for SSL connections
ssl_session_cache shared:SSL:2m;
ssl_session_timeout 60m;

我有另一台端口 80 的服务器,它只是转发到 SSL 服务器。教程在这里

相关内容