Как настроить nginx для перенаправления всех запросов с псевдонимов домена на основной домен?
У меня есть сервер nginx, который отвечает на несколько доменов, и я хочу перенаправить все запросы в основной домен.
Пример: сайт отвечает за xxx xxx.example.com yyy.example.com $hostname
для обоих http
а также https
,
Я хочу настроить сервер таким образом, чтобы все запросы к другим доменным именам были перенаправлены на xxx.example.com
,
3 ответа
Я думаю, что-то вроде этого должно работать:
set $primary_domain "xxx.example.com";
if ($host != $primary_domain) {
rewrite ^ $scheme://$primary_domain permanent;
}
Наиболее эффективный и чистый способ сделать это - настроить два отдельных блока server{} - один для перенаправления, а другой (с каноническим именем) для фактической обработки запросов.
Пример конфигурации:
server {
listen 80;
listen 443 ssl;
server_name xxx yyy.example.com $hostname;
ssl_certificate ...
ssl_certificate_key ...
return 302 $scheme://xxx.example.com$request_uri;
}
server {
listen 80;
listen 443 ssl;
server_name xxx.example.com;
ssl_certificate ...
ssl_certificate_key ...
...
}
Документация:
Вот вариант ансера Брентона Алкера, использующий $server_name
переменная для повторного использования значения server_name
директивы.
server_name primary.tld secondary.tld;
if ($host != $server_name) {
rewrite ^ $scheme://$server_name permanent;
}
Или, чтобы сохранить любые параметры запроса:
server_name primary.tld secondary.tld;
if ($host != $server_name) {
rewrite ^/(.*) $scheme://$server_name/$1 permanent;
}
Вот, $server_name
относится к первичному имени сервера, которое является первым именем в server_name
директива, а $host
ссылается на имя хоста, указанное в HTTP-запросе.
Обратите внимание, что if
оператор в конфигурации nginx не всегда делает то, что вы ожидаете, и некоторые его не одобряют. Смотрите также https://www.nginx.com/resources/wiki/start/topics/depth/ifisevil/