Ngnix newbie here. Please I need some help to figure out how to correctly make nginx modify and redirect (proxy?) incoming requests. The redirection seems to work ok, but the URL is not rewritten at the destination.
My configuration is:
server {
listen 91 default_server ssl;
ssl_prefer_server_ciphers on;
ssl_certificate /etc/nginx/ssl/domain.crt;
ssl_certificate_key /etc/nginx/ssl/domain.key;
location /dest {
rewrite ^a_service_prod&id_number=((1234701|1234708|1234802|1234808|1234812|1234902)\d+)&(.*?)$ /dest?service=a_service_prod.sub_service&operation=sub_service&id_number=$1&$2 break;
proxy_pass http://192.168.1.1:1440;
proxy_redirect off;
proxy_set_header Host $host;
}
}
Im trying to get requests such as /dest?service=a_service_prod&id_number=12347016734696&slime=somethig
должен быть переписан и запрос отправлен на другой сервер как http://192.168.1.1:1440/dest?service=a_service_prod.sub_service&operation=sub_service&id_number=12347016734696&slime=somethig
Но вместо этого в пункте назначения получено то, что http://192.168.1.1:1440/dest?service=a_service_prod&id_number=12347016734696&slime=somethig
Пожалуйста, что я делаю не так и как я могу это исправить?
Текущий метод не работает потому что вы пытаетесь захватить строку запроса в регулярном выражении директивы rewrite
. nginx
использует нормализованный URI для оценки директив rewrite
и location
, который не включает ?
и все, что следует за ним.
] Вы можете найти строку запроса в переменной $ request_uri
, переменной $ args
или разделить ее между переменными $ arg_xxx
. Подробнее см. этот документ .
Вы можете применить регулярное выражение к одной из этих переменных, используя оператор if
или директиву map
.
] В приведенном ниже примере используется директива map
(подробности см. этот документ ) с регулярным выражением и двумя именованными захватами для восстановления необходимого списка аргументов. URI восходящего потока добавляется к директиве proxy_pass
(подробности см. В этом документе ).
map $args $newargs {
default $args;
~*^(?<prefix>service=a_service_prod)&(?<suffix>id_number=(?:1234701|1234708|1234802|1234808|1234812|1234902)\d+&.*)$ $prefix.sub_service&operation=sub_service&$suffix;
}
server {
...
location /dest {
proxy_pass http://192.168.1.1:1440$uri?$newargs;
...
}
}