Ngnix新手在这里。请我需要一些帮助来弄清楚如何正确地使 nginx 修改和重定向(代理?)传入请求。重定向似乎工作正常,但 URL 没有在目的地重写。
我的配置是:
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;
}
}
我试图获取诸如/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
指令中(有关详细信息,请参阅本文档)。