NGINX URL 重定向

NGINX URL 重定向

在 nginx 中我们一直尝试重定向 URL,如下所示:客户端点击该 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&订单号=11111111&代码=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。但是,“reg?” 之后的 URI 字符串(即:)"account.name=ABC&accountID.number=1234&OrderNumber=11111111&Code=2222"没有得到定向。

有人能帮我指出正则表达式的错误吗?

答案1

这里的问题是仅匹配 URL 的路径部分。因此,正如所写的那样location,您的正则表达式匹配的 URL 比您预期的要多得多。例如,它匹配/re、以及。但它/redwood/regular/reg才不是将查询字符串放在捕获中,因为查询字符串不是路径组件的一部分。

幸运的是,您根本不需要正则表达式,也不需要捕获查询字符串,因为 nginx 已经跟踪了它。考虑一下:

location /reg {
    proxy_pass http://localhost:8080/some_dir/reg$is_args$args;
}

这里我们去掉了所有无关的匹配,只匹配以 开头的 URL 路径/reg。您可以使用 来使其更具体location = /reg。然后我们明确传递参数。

相关内容