В настоящее время я столкнулся со следующей проблемой и, черт возьми, не могу ее решить. > 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;
...
}
И это работает отлично. Если я попробую открытьмой-домен.com, я буду перенаправлен наhttps:// мой-домен.com. Но проблема с поддоменами все еще есть. Если я открываюwww.my-domain.comилиtest.my-domain.com, я бы хотел, чтобы эти поддомены перенаправлялись на мой кореньHTTPSдомен: https:// my-domain.com. Без каких-либо поддоменов перед ним. То же самое должно быть и для поддоменов HTTPS. Я буквально хочу запретить любые поддомены (пока).
Я перепробовал много конфигураций, например, добавление*.мой-домен.comна server_name, и все равно это не работает так, как ожидалось. Я также пытался создать HTTPS-перенаправление с *.my-domain.com на мой обычный HTTPS-домен, и все равно у меня похожий результат с каждой конфигурацией:
- Все HTTP-запросы приводят к созданию HTTPS-URL, содержащего поддомен.
- Все HTTPS-запросы никогда не приводят к созданию HTTPS-URL БЕЗ поддомена.
Теперь мой вопрос: как перенаправить каждый поддомен (http и https) на определенный https URL, не содержащий в себе НИКАКОГО поддомена? Каждая комбинация всегда должна приводить к:https:// мой-домен.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://мой-домен. Также мой-домен(http и без www.) будет перенаправлять наhttps://мой-доментоже. Это кажется "нормальным" для моих нужд.
решение1
Вы можете использовать default_server
блок для сопоставления любых http
и https
доменов, явно не определенных в другом server
блоке. Эта https
часть работает правильно только с wild-card сертификатами.
server {
listen 80 default_server;
listen 443 ssl default_server;
... ssl configuration
return 301 https://example.com$request_uri;
}
server {
listen 443 ssl http2;
...
}
Видетьэтот документдля получения подробной информации.