繁体   English   中英

使用 proxy_pass 重写 Nginx

[英]Nginx rewrite with proxy_pass

我最近在 Nginx 中要求重写 URL,然后将其转发到另一个后端服务器到动态代理传递地址。 我已经尝试了几件事,但目前运气不佳。 例如,这是我在 nginx.conf 文件中的设置类型:

server {
  listen 443;
  server_name scheduler.domain-name;
  rewrite ^scheduler(.*)/(.*)/(.*) $2$1$3; # scheduler.domain.local/changepass/report?target=service
...

location / {
  proxy_pass $to-rewrite-address:9443; # changepass.domain.local/report?target=service
  ...
}

本质上,我只需要使用重写的 URL 变量将请求转发到不同的端口,但看不到它的工作。

我已经做了很多搜索,但还没有找到解决方案,但我知道在使用代理传递变量( Dynamic proxy_pass to $var with nginx 1.0 )时必须设置 DNS 解析器。

如果有人可以就如何实现上述目标提出建议,非常感谢。

假设您的端点总是被指定为 URI 的第一部分,下面是一个应该可以工作的配置示例:

server {
    listen 443;
    server_name scheduler.domain-name;
    resolver <your resolver for domain.local>;
    ...
    location ~ ^/(?<endpoint>changepass|endpoint2|endpoint3|...)(?<route>/.*) {
        proxy_pass http://$endpoint.domain.local:9443$route;
    }
}

我在这里使用命名捕获组以获得更好的可读性,这个位置块等于

    location ~ ^/(changepass|endpoint2|endpoint3|...)(/.*) {
        proxy_pass http://$1.domain.local:9443$2;
    }

我不确定这样的结构是否会保留查询参数,如果不会,请更改

proxy_pass http://$endpoint.domain.local:9443$route;

proxy_pass http://$endpoint.domain.local:9443$route$is_args$args;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM