Nginx Перенаправить все субдомены на URL не субдоменов

1134
onek24

В настоящее время я выпускаю следующую проблему и, черт возьми, я не могу ее решить. > 20 похожих тем, которые я нашел с Google, не помогают.

Прежде всего, я создал простое перенаправление HTTP на HTTPS, которое выглядит так:

server { listen 80; server_name my-domain.com; return 301 https://my-domain.com$request_uri; }  server { listen 443 ssl http2; server_name my-domain.com; ... } 

И это прекрасно работает. Если я попытаюсь открыть my-domain.com, я буду перенаправлен на https: // my-domain.com . Но есть проблема с поддоменами. Если я открою www.my-domain.com или test.my-domain.com, я бы хотел, чтобы эти субдомены перенаправили на мой корневой домен HTTPS : https: // my-domain.com. Без каких-либо поддоменов перед ним. То же самое должно появиться для поддоменов HTTPS. Я буквально хочу забанить любые субдомены (пока).

Я перепробовал множество конфигураций, таких как добавление * .my-domain.com к server_name, и все же это не работает, как ожидалось. Я также попытался создать перенаправление HTTPS с * .my-domain.com на мой обычный домен HTTPS, и все же у меня был похожий результат с каждой конфигурацией:

  1. Все запросы HTTP приводят к URL-адресу HTTPS, содержащему поддомен.
  2. Все HTTPS-запросы никогда не приводят к URL-адресу HTTPS БЕЗ субдомена.

Теперь мой вопрос: Как я могу перенаправить каждый субдомен (http и https) на определенный URL-адрес https, в котором нет субдомена? Каждая комбинация всегда должна приводить к: https: // my-domain.com $ request_uri

заранее спасибо

Обновить:

Не решил мою проблему полностью, но у меня есть кое-что, с чем я могу жить. Я создал CNAME от www.my-domain.com до my-domain.com в конфигурации моего домена. Я также изменил nginx и добавил новую конфигурацию сервера, которая перенаправляет с 443 www.my-domain на https: // my-domain. У меня также есть обычный сервер порта 80, который также перенаправляет с www.my-domain на https: // my-domain. Я изменил свой сертификат и добавил www.my-domain в список доменов и поддоменов. Теперь каждый запрос на www.my-domain (http или https) будет перенаправляться на https: // my-domain . Также my-domain (http и без www.) Будет также перенаправлять на https: // my-domain . Это кажется "хорошо" для моих нужд.

1

1 ответ на вопрос

0
Richard Smith

Вы можете использовать default_serverблок для сопоставления любому httpи httpsдоменам, явно не определенным в другом serverблоке. httpsЧасть работает правильно только с сертификатами диких карт.

server { listen 80 default_server; listen 443 ssl default_server; ... ssl configuration return 301 https://example.com$request_uri; }  server { listen 443 ssl http2; ... } 

Смотрите этот документ для деталей.