Рейтинг:0

Nginx, не удается перенаправить домен www на домен https без www при использовании certbot

флаг us

Несмотря на то, что в Интернете есть много примеров, я пробовал много вещей, в частности, используя операторы if, но до сих пор мне не удалось правильно настроить мой виртуальный хост.

Итак, мой виртуальный хост

    a1.example.com

www.a1.example.com должен перенаправлять на https://a1.example.com
a1.example.com должен перенаправлять на https://a1.example.com

Цель состоит в том, чтобы каждый раз перенаправлять его на https без www.

Пока это мой виртуальный хост, я использую certbot

сервер {
     имя_сервера a1.example.com www.a1.example.com;
     корень /var/www/example/build;

     индекс index.html index.htm;

     место расположения / {
          try_files $uri $uri/ =404;
     }

    слушать [::]:443 ssl ipv6only=on; # под управлением Certbot
    слушать 443 ssl; # под управлением Certbot
    ssl_certificate /etc/letsencrypt/live/a1.example.com/fullchain.pem; # под управлением Certbot
    ssl_certificate_key /etc/letsencrypt/live/a1.example.com/privkey.pem; # под управлением Certbot
    включить /etc/letsencrypt/options-ssl-nginx.conf; # под управлением Certbot
    ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # под управлением Certbot

}
сервер {

    если ($ хост = a1.example.com) {

    вернуть 301 https://$host$request_uri;
   }
     слушать 80;
     слушать [::]:80;
     имя_сервера a1.example.com www.a1.example.com;
    вернуть 404; # под управлением Certbot

}

Это перенаправляет с http на https, но я не могу сделать перенаправление с www на nonwww

Мои текущие записи DNS

А @ IP
а1 ИП
CNAME www-домен
CNAME www.a1 www.a1.домен
Ivan Shatsky avatar
флаг gr
Обратите внимание, я пропустил знак вопроса в регулярном выражении (`^(?:www\.)a1\.example\.com$` вместо `^(?:www\.)?a1\.example\.com$` ). Я уже исправил ответ.
Рейтинг:1
флаг gr

Я думаю, что лучший ответ на эту тему дал @MichaelHampton. здесь. В качестве быстрого исправления вы можете добавить

если ($host = www.a1.example.com) {
    вернуть 301 https://a1.example.com$request_uri;
}

к вашему блоку HTTPS-сервера и измените если ($host = a1.example.com) { ... } в блоке HTTP-сервера для

если ($хост ~ ^(?:www\.)?a1\.example\.com$) {
    вернуть 301 https://a1.example.com$request_uri;
}

В любом случае, я полностью согласен с Майклом Хэмптоном в том, что вы не должны позволять certbot изменять вашу конфигурацию nginx и использовать ее только для получения/обновления сертификатов (см. его ответ для хорошо написанного примера конфигурации nginx).

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.