как мне использовать или повторно использовать одну и ту же сигнатуру / аргументы / переменные карты в различных конфигурациях сервера в nginx

Я пытаюсь выполнить перенаправление через карты nginx. У меня есть отдельные серверные блоки для отдельных доменов [и их псевдонимов], например:

  • www.example.fr
  • www.example.uk
  • www.example.nl

Каждый в своем файле conf, скажем, например: www.example.fr.conf.

В каждом файле конфигурации сервера я настраиваю перенаправление с помощью карт, поэтому для каждого домена есть карта [перенаправления], например:

include france-redirects.conf;
server {
   server_name  www.example.fr example.fr;
   ...
   if ($redirect_uri) {
        return 301 $redirect_uri;
    } 
} 

файл: france-redirects.conf выглядит так:

map $request_uri $redirect_uri {        
    ~/news https://www.example.com/france/latest-news;
    ~/about http://www.example.com/france/about;
}

И это работает должным образом: трафик на http://www.example.fr/news перенаправляется на https://www.example.com/france/latest-news

Однако, когда я создаю аналогичные конфигурации для других доменов. Проблема начинается и кажется, что я не могу использовать ту же сигнатуру / аргументы / переменные карты:

map $request_uri $redirect_uri {}

повторяется в других файлах конфигурации сервера. Кажется, что Nginx выбирает первый блок карты [не уверен, в каком порядке] и «подчиняется» только ему. Итак, когда у меня есть:

include netherlands-redirects.conf;
server {
   server_name  www.example.nl example.nl;

   if ($redirect_uri) {
        return 301 $redirect_uri;
    } 
}

с файлом карты [net Netherlands-redirects.conf], например:

map $request_uri $redirect_uri {        
    ~/news https://www.example.com/netherlands/latest-news;
    ~/about http://www.example.com/netherlands/about;
}

, и я пытаюсь скрутить, чтобы увидеть окончательное перенаправление:

curl -Ls -o /dev/null -w %{url_effective} http://www.example.nl/news

, он вернет что-то вроде:

http://www.example.com/france/latest-news

Я пытаюсь чтобы не объединять все перенаправления в один длинный файл, а разбивать их по доменам. Разве это невозможно, или я ошибаюсь? Надеюсь, мое объяснение имеет смысл. Пожалуйста помоги. Спасибо

0
задан 15 May 2019 в 21:31
1 ответ

map глобальная директива для всех серверов блоки. Поэтому вам нужно использовать разные имена переменных. Например,

map $request_uri $redirect_uri_fr {        
    ~/news https://www.example.com/france/latest-news;
    ~/about http://www.example.com/france/about;
}

map $request_uri $redirect_uri_nl {        
    ~/news https://www.example.com/netherlands/latest-news;
    ~/about http://www.example.com/netherlands/about;
}

и используйте их соответствующие блоки server :

include france-redirects.conf;
server {
   server_name  www.example.fr example.fr;
   ...
   if ($redirect_uri) {
        return 301 $redirect_uri_fr;
    } 
} 

include netherlands-redirects.conf;
server {
   server_name  www.example.nl example.nl;

   if ($redirect_uri) {
        return 301 $redirect_uri_nl;
    } 
}
0
ответ дан 23 November 2019 в 23:52

Теги

Похожие вопросы