У меня есть два веб-сайта на сервере, каждый со своим собственным файлом vhost в Nginx. Оба они также находятся на Cloudflare, и у обоих есть сертификаты SSL, которые я получил через Let's Encrypt.
Файлы 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 первого домена сертификат.
Я обнаружил, что если я сниму слушайте 80;
или слушайте 443;
, тогда Nginx подойдет, потому что IP-адреса Cloudflare являются динамическими и не соответствуют listen [host]: 443;
lines.
Я не уверен, что я принципиально не понимаю Nginx и то, как он работает.
Удалить
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. Учебник здесь .