在nginx中,我们一直试图重定向一个URL,如下所示: Client点击url:https://new.domain.com/reg?account.name=ABC&accountID.number=1234&OrderNumber=11111111&Code=2222
而nginx必须将请求路由到后端tomcat。
http://localhost:8000/some_dir/reg?account.name=ABC&accountID.number=1234&OrderNumber=11111111&Code=2222。
服务器配置如下:
server {
listen 80;
listen [::]:80;
server_name localhost;
location ~ ^/reg?(.*) {
resolver x.x.x.x;
proxy_pass http://localhost:8000/some_dir/reg?$1;
}有了上面的设置,我可以看到请求在从浏览器访问时击中了后端tomcat。但是,URI字符串在"reg?“之后?"account.name=ABC&accountID.number=1234&OrderNumber=11111111&Code=2222"没有接到指示。
有人能帮我指出大政方针有什么问题吗?
发布于 2018-11-23 18:46:57
这里的问题是,location只匹配URL的路径组件。因此,正如所写的,regex匹配的URL比您预期的多得多。例如,它与/re、/redwood、/regular以及/reg相匹配。但是它没有将查询字符串放在捕获中,因为查询字符串不是path组件的一部分。
幸运的是,您根本不需要正则表达式,也不需要捕获查询字符串,因为nginx已经在跟踪它。考虑:
location /reg {
proxy_pass http://localhost:8080/some_dir/reg$is_args$args;
}在这里,我们去掉了所有无关的匹配,只匹配以/reg开头的URL路径。您可以通过使用location = /reg来使其更加具体。然后我们显式地传递参数。
https://serverfault.com/questions/941379
复制相似问题