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

Nginx: как выполнять запросы динамической маршрутизации пути к одному корневому каталогу с другой страной (модуль geoip)

Как выполнять запросы динамической маршрутизации пути к единственному корневому каталогу и URL-адрес для /<country_zone>/<actual_url>/* .

Я могу извлечь $country_zone значение, которое может быть любым из (in|uk|us|other) с помощью модуля geoip.

например

Request => Response 
/ => /
/ (with geoip country as US) => /us/
/path/ => /path
/path/ (with geoip country as US) => /us/path/
/us/path/ => /us/path/
/us/path/ (with geoip country as US) => /us/path/
/in/* => /*

Моя кодовая база находится по адресу: / var / www / html (Все маршруты должны рассматривать это как корневой каталог после /

Моя текущая конфигурация nginx:

server {
    listen 80 default_server;
    listen [::]:80 default_server;


    root /var/www/html;

    # Add index.php to the list if you are using PHP
    index index.html index.htm index.nginx-debian.html;
    server_name _;

    location  ~  ^/$country_zone {
        alias /var/www/html;
        index index.html index.htm index.nginx-debian.html;
        break;
    }

    location / {
        # First attempt to serve request as file, then
        # as directory, then fall back to displaying a 404.

        if ($country_zone != in) {
                return 307 /$country_zone;
        }

        add_header X_COUNTRY_ZONE_ID $country_zone;
        try_files $uri $uri/ =404;
    }


}

PS: Я также когда-нибудь проксирую запрос на другой сервер

ИФИСЕВИЛ (https://www.nginx.com/resources/wiki/start/topics/depth/ifisevil/)

Ваше решение мне кажется вполне приемлемым. Честно говоря, я понятия не имею, что там не так.

Я бы предпочел закодировать приложение, чтобы распознавать язык по умолчанию в браузерах пользователей и отображать веб-сайт или маршрутизировать их в соответствии с этим. По крайней мере, так мы и сделали. URL-адрес всегда один и тот же, за исключением того, что сразу после основного доменного имени вы можете определить код страны, как вы ожидаете.