Опубликовано Оставить комментарий

Редирект с алиасов на основной домен, на который куплен SSL сертификат

Приключилась однажды такая история: был сайт, допустим my.site. Был приобретен SSL сертификат на my.site и на www.my.site. По ТЗ было еще несколько доменных имен, с которых пользователь должен был попадать на my.site. Но они не были «прописаны» в сертификате.

Конфигурационные файлы сайта на Bitrix-VM и их пути на сервере:

  • /etc/nginx/nginx.conf – основной конфигурационный файл nginx (заменяется при обновлении).
  • /etc/nginx/bx/ – основной каталог для хранения конфигурационных файлов виртуальной машины.
  • /etc/nginx/bx/conf/ – каталог с общими конфигурационными файлами, чаще всего подключенных непосредственно в конфиг сайта.
    • bitrix.conf – для сайтов, у которых не включен композит (меняется при обновлении).
    • bitrix_general.conf – используется для любого сайта (меняется при обновлении).
    • ssl.conf – настройки сертификата по умолчанию (меняется при обновлении).
  • /etc/nginx/bx/maps/ – каталог хранения общих и персональных переменных сайта, представленные в виде карт nginx.
  • /etc/nginx/bx/settings/ – каталог с персональными конфигами под сайт. По умолчанию (если установлено соответствующее обновление) будет содержать настройки для хранения временных файлов сайта (BX_TEMPORARY_FILES_DIRECTORY) и отдачи этих файлов через nginx.
  • /etc/nginx/bx/site_available/ – каталог с существующими сайтами (или виртуальными хостами).
    • s1.conf и ssl.s1.conf – конфиги сайта по умолчанию для http и https соответственно.
    • bx_ext_<SITE_NAME>.conf и >bx_ext_ssl_<SITE_NAME>.conf – конфиги сайтов для http и https соответственно.
  • /etc/nginx/bx/site_enabled/ – каталог с подключенными сайтами (в большинстве случаев, симлинки на site_available).
  • /etc/nginx/bx/site_ext_enabled/ – каталог с конфигами сайтов, не связанных с Bitrix-окружением.

В nginx были следующие настройки:

В файле /etc/nginx/bx/site_available/bx_ext_my.site.conf (Обратите внимание, что в названии файла нет слова «ssl»)

server {
listen 80;
server_name my.site www.my.site alias1-my.site www.alias1-my.site alias2-my.site www.alias2-my.site xn--100500-2nfa5e3a2e.xn--p1acf;
# и ещё 100500 других алиасов

# тут еще всякие настройки включая редирект на https
}

В файле /etc/nginx/bx/site_available/bx_ext_ssl_my.site.conf (Обратите внимание, что в названии файла есть слово «ssl»)

server {
    listen 443 ssl http2;  
    server_name my.site www.my.site alias1-my.site www.alias1-my.site alias2-my.site www.alias2-my.site xn--100500-2nfa5e3a2e.xn--p1acf;

В такой вот конфигурации, все замечательно работало, если заходить по основному домену, будь то с www или без (помним про сертификат). Но как только пытаемся зайти на любой из алиасов, то трындец, всё пропало!

— И сертификат у вас не такой, и вообще все у вас не такое, буду отображать что хочу! — сообщил тут же браузер, и показал даже и основной сайт на хосте, а второй или даже третий!

Ок, гуголь хром… В файле /etc/nginx/bx/site_available/bx_ext_my.site.conf (Снова обратите внимание, что в названии файла нет слова «ssl») выносим/переносим алиасы и редирект с них на основной домен в отдельную секцию server{}. Порядок важен: сначала секция server с алиасами! Во втором файле также.

server {
listen 80 ;
server_name alias1-my.site www.alias1-my.site alias2-my.site www.alias2-my.site xn--100500-2nfa5e3a2e.xn--p1acf;
server_name_in_redirect on;
rewrite ^/(.*) https://my.site$1 permanent;
}
server { listen 80;
server_name my.site www.my.site; # и ещё 100500 других алиасов # тут еще всякие настройки включая редирект на https }

В файле /etc/nginx/bx/site_available/bx_ext_ssl_my.site.conf (Обратите внимание, что в названии файла есть слово «ssl»)

server {
listen 443 ssl http2;
server_name alias1-my.site www.alias1-my.site alias2-my.site www.alias2-my.site xn--100500-2nfa5e3a2e.xn--p1acf;
return 301 https://my.site$request_uri;
}

server { listen 443 ssl http2; server_name my.site www.my.site;

Вот и все. Позже разберусь почему на 80 порту  в первом файле, я написал rewrite, а во втором return 301.  Правильно, скорее всего, в первом файле тоже return 301  прописать. Так поисковики поймут куда им идти, в смысле на какой сайт пользователей посылать…  ну, вы поняли? 🙂

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *