Назад | Перейти на главную страницу

Перенаправьте множество доменов в разные места другого домена с помощью nginx без необходимости определять множество серверных блоков

Скажем, у меня есть несколько вариантов доменного имени, один имя бренда зарегистрированы в нескольких доменах верхнего уровня; и все они должны перейти в один конкретный домен + добавить специальный пользовательский uri, относящийся к первоначально запрошенному домену.

Например, у меня есть:

куда domain.com это тот, где все запросы должны приземляться после добавления дополнительного uri, например:

Я придумал эту рабочую установку:

# (www.)domain.tld
server {

        listen 80;
        server_name domain.tld www.domain.tld;
        return 301 $scheme://www.domain.com/tld$request_uri;
}

# (www.)domain.net
server {

        listen 80;
        server_name domain.net www.domain.net;
        return 301 $scheme://www.domain.com/net$request_uri;
}

# (www.)domain.org
server {

        listen 80;
        server_name domain.org www.domain.org;
        return 301 $scheme://www.domain.com/org$request_uri;
}


# (www.)domain.com
server {

        listen 80;
        server_name domain.org www.domain.org;

        location / {
               proxy_set_header        Host $host;
               proxy_set_header        X-Real-IP $remote_addr;
               proxy_set_header        X-Forwarded-For $proxy_add_x_forwarded_for;
               proxy_pass              http://backend.host:port;
          }

}

Но объявление нескольких сервер блоки, хотя и логичны, выглядят слишком многословными.

TL; DR Есть ли способы выполнить такое перенаправление без необходимости определять сервер блокировать для каждого домена?

Регулярное выражение server_name Директива может захватывать последний элемент доменного имени для использования в перенаправлении. Например:

server {
    listen 80;
    server_name ~\.(?<tld>[^.]+)$;
    return 301 $scheme://www.domain.com/$tld$request_uri;
}

Видеть этот документ для подробностей.