Перенаправить не-www на www https nginx (SSL_ERROR_BAD_CERT_DOMAIN) - PullRequest
0 голосов
/ 09 января 2019

Я только что заметил, что одна из моих страниц не может быть доступна по https без www

Итак, у меня есть четыре разных сценария:

http://example.com <- Работает </p>

https://example.com <- <strong> Не работает

http://www.example.com Работы

https://www.example.com Работы

Дело в том, что для каждого запроса, независимо от того, какие маршруты вы выбрали выше, вы всегда должны заканчиваться на: https://www.example.com

Я не первый сталкиваюсь с этой проблемой, и я пробовал много сценариев, но безуспешно (например, эти решения: здесь )

Когда я пытаюсь получить доступ к https://example.com, я получаю SSL_ERROR_BAD_CERT_DOMAIN. Таким образом, сертификат действителен только для www.example.com, что имеет смысл. Но у меня также есть другой сертификат, действительный для example.com.

Ибо моя установка NGINX выглядит следующим образом:

server {
        listen 443 ssl;
        server_name example.com

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

        return 301 https://www.example.com$request_uri;
}


server {
        listen 443 default_server ssl;
        server_name www.example.com;

        root /home/build/;
        index index.html index.htm;

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

        location / {
                try_files $uri /index.html;
        }
}

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

Я уже некоторое время пользуюсь NGINX и до недавнего времени никогда не замечал, что у меня возникла эта проблема. Я знаю, что мог бы обслуживать страницу как с www, так и без него, и это решило бы проблему. Но я хочу, чтобы каждое взаимодействие происходило на www.example.com, а не без www.

Я использую NGINX версии 1.14.0 на Ubuntu 18.04.

Вся помощь оценена.

1 Ответ

0 голосов
/ 09 января 2019

Если кому-то будет интересно, я решил проблему.

Вместо нескольких сертификатов я получил групповой сертификат и также добавил в него корневой домен.

Поскольку LetsEncrypt, как я использую в этом случае, также предоставляет бесплатные групповые сертификаты, все мои субдомены и корневой домен могут использовать один и тот же сертификат.

После установки моего группового сертификата мой файл NGINX выглядит следующим образом:

server {
        listen 443 default_server ssl;
        server_name www.example.com;

        root /home/build/;
        index index.html index.htm;
        ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
        ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;

        location / {
                try_files $uri /index.html;
        }
}

server {
        server_name www.example.com example.com;
        return 301 https://www.example.com$request_uri;

    listen 443 ssl;
    ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;
    include /etc/letsencrypt/options-ssl-nginx.conf;
    ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem;
}

server {
    if ($host = example.com) {
        return 301 https://$host$request_uri;
    }


    if ($host ~ ^[^.]+\.example\.com$) {
        return 301 https://$host$request_uri;
    }


        listen 80;
        server_name www.example.com example.com;
    return 404;
}

Следует сказать, что последняя часть кода очень вдохновлена ​​настройкой certbot.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...