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