На основе кода страны http_cook ie предпочтение переписать на соответствующие сайты на Nginx - PullRequest
0 голосов
/ 23 апреля 2020

Как выполнить маршрутизацию на основе файлов cookie, предпочитаемых конечным пользователем? У нас Nginx / 1.17.10 работает как AKS в качестве модуля. Сайт электронной коммерции размещен на этом. CloudFlare - это внешний интерфейс, выступающий в роли DNS и WAF. В CloudFlare включен GeoIP, поэтому у нас есть параметр - $ http_cf_ipcountry для отслеживания кода страны. однако мы ищем предпочтение, сохраненное конечным пользователем, и маршрут к этому указанному c региону.

Пример:

If $http_cookie --> COUNTRY_CODE=UAE;
Then rewrite to example.com --> example.com/en-ae
If $http_cookie --> COUNTRY_CODE=KW;
Then rewrite to example.com --> example.com/en-kw
If there is no preference saved on cookie, then route to default "example.com"

Параметр Http_cook ie также содержит другие детали, такие как _cfduid , COUNTRY_CODE_PREV, CURRENYCY_CODE, EXCHANGE_RATE

Каким должен быть наилучший подход для удовлетворения этого требования? Кто-нибудь, помогите мне в этом, спасибо!

1 Ответ

0 голосов
/ 23 апреля 2020

Я хотел бы создать карту для обработки URL-адресов перенаправления. http://nginx.org/en/docs/http/ngx_http_map_module.html#map

Это установит URL перезаписи в переменную $ new_uri. По умолчанию, если нет значения cook ie, будет / en-en /. Теперь вы можете создать правило перезаписи.

 rewrite ^(.*)$ $new_uri permanent;

Вот обновленный пример конфигурации по запросу.

map $cookie_user_country $new_uri {
    default /en-en/;
    UAE /en-ae/;
    KW /en-kw/;
}


server {
        listen 8080;
        return 200 "$uri \n";
}

server {
        listen 8081;
        rewrite ^(.*)$ $new_uri permanent;
        return 200 "$cookie_user_country \n";
}

Используйте директиву $cookie_NAME, чтобы получить правильное значение одного повара ie. $http_VAR содержит значение указанного c заголовка HTTP-запроса.

Подробнее см. Мой запрос curl.

[root@localhost conf.d]# curl -v --cookie "user_country=KW; test=id; abcc=def" localhost:8081
* About to connect() to localhost port 8081 (#0)
*   Trying ::1...
* Connection refused
*   Trying 127.0.0.1...
* Connected to localhost (127.0.0.1) port 8081 (#0)
> GET / HTTP/1.1
> User-Agent: curl/7.29.0
> Host: localhost:8081
> Accept: */*
> Cookie: user_country=KW; test=id; abcc=def
>
< HTTP/1.1 301 Moved Permanently
< Server: nginx/1.17.6
< Date: Sun, 26 Apr 2020 12:34:15 GMT
< Content-Type: text/html
< Content-Length: 169
< Location: http://localhost:8081/en-kw/
< Connection: keep-alive
<
<html>
<head><title>301 Moved Permanently</title></head>
<body>
<center><h1>301 Moved Permanently</h1></center>
<hr><center>nginx/1.17.6</center>
</body>
</html>
* Connection #0 to host localhost left intact

Проверка текущего выполнения NGINX Модуль двоичного файла содержит карту

type

strings `which nginx` | grep ngx_http_map_module | head -1

Будет выведен список всех «печатаемых» строк из двоичного файла nginx и grep вывода с помощью «ngx_http_map_module». Результат должен выглядеть следующим образом:

[root@localhost conf.d]# strings `which nginx` | grep ngx_http_map_module | head -1

--> ngx_http_map_module

Если вывод равен eg to ngx_http_map_module, текущий исполняемый двоичный файл NGINX был скомпилирован с поддержкой карт. Если нет -> убедитесь, что вы используете двоичный файл NGX, скомпилированный с поддержкой карт.

...