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

Запуск нескольких доменов и поддоменов на Nginx с https (SSL)

У меня есть установка Nginx, которая должна работать с SSL. Мои серверные блоки для этого домена следующие, что заставляет example.com и www.example.com быть направленным к https://example.com.

    server {
        listen 9.9.9.9:80;
        server_name example.com;
        return 301 https://$host$request_uri;
    }

    server { listen 443 ssl http2; server_name www.example.com; return   301   $scheme://example.com$request_uri; }

    server {
        ## SSL settings
        listen 443 ssl http2 default_server;
        listen [::]:443 ssl http2 default_server;

        server_name   example.com;
        root /home/example;

        ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
        ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;

        include common.conf;
        include ssl.conf;
    }

По сути, это работает. Материал Lets Encrypt установлен правильно. Однако у меня также есть несколько поддоменов, которые являются CNAME для Cloudfront. Так что это похоже на cdn.example.com. Как я могу убедиться, что они тоже работают и не перенаправляют на https://example.com?

В Cloudfront сертификат Cloudfront по умолчанию включен для этих CNAME:

SSL Certificate - Default CloudFront Certificate (*.cloudfront.net)

Это проблема?

Проблема в том, что когда я захожу на этот сайт, https://example.com, загружается весь контент, но изображения, файлы CSS и JS (загружаются через cdn.example.com Cloudfront cname) НЕ загружаются. Chrome показывает красный значок «небезопасно» в адресной строке для этих ресурсов и большое сообщение об ошибке: http://imgur.com/4sGWuIY

Как правильно включить мои собственные пути CNAME CDN ​​вместе с доменом? Спасибо за любые указатели.

Начнем с предположения:

  • ваш файл зоны DNS выглядит примерно так:

    $ORIGIN example.com
            IN    A     9.9.9.9
    www     IN    A     9.9.9.9
    cdn     IN    CNAME some-subdomain-at.cloudfront.net.
    

В этом случае ваш веб-сервер (9.9.9.9) никогда не должен видеть запросы, принадлежащие cdn.example.com.

Зачем?

  • при загрузке example.com веб-браузер получит IP 9.9.9.9 из систем DNS и отправлять туда запросы.
  • при доступе к файлу примера https://cdn.example.com/default.css браузер запросит адрес IPv4 / IPv6 (A / AAAA) для cdn.example.com, не получите ничего и попробуйте CNAME, чтобы получить его some-subdomain-at.cloudfront.net. как ответ. Теперь браузер попытается получить IP-адрес some-subdomain-at.cloudfront.net. и начать общение с этим адресом, как если бы это была запись A для cdn.example.com.