Назад | Перейти на главную страницу

Директива Nginx 'listen: port', Cloudflare и SSL

У меня есть два веб-сайта на сервере, каждый со своим собственным файлом 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. Учебник здесь.