Nginx代理转发报错:'proxy_pass' cannot have URI part in location given by regular expression

在使用Nginx配置代理转发时,如果在正则表达式的location中使用proxy_pass指令并指定了URI部分,就会遇到以下报错:

[emerg] 656036#656036: 'proxy_pass' cannot have URI part in location given by regular expression, or inside named location, or inside 'if' statement, or inside 'limit_except' block in /etc/nginx/conf.d/ttyd_serv.conf:2

这是因为Nginx规定在正则表达式的location中,proxy_pass指令不能包含URI部分。

解决方法:

如果需要将请求转发到特定的URI,可以使用if语句块来实现。例如,将请求转发到http://192.168.44.229:7681/,可以进行如下配置:nginxlocation /ugreen/v1/ttyd { if ($request_uri ~ ^/ugreen/v1/ttyd(.*)$) { proxy_pass http://192.168.44.229:7681/$1; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection 'upgrade'; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_read_timeout 86400; proxy_redirect off; break; } ...}

代码解释:

  • 使用if ($request_uri ~ ^/ugreen/v1/ttyd(.*)$)匹配请求URI,并将匹配到的部分存储在变量$1中。* 在proxy_pass http://192.168.44.229:7681/$1;中,使用$1将匹配到的URI部分添加到目标地址后面。* 其他proxy_set_header指令用于设置代理转发相关的头部信息。

通过这种方式,就可以在使用正则表达式的location中实现灵活的代理转发功能。

Nginx代理转发报错:'proxy_pass' cannot have URI part in location given by regular expression

原文地址: https://www.cveoy.top/t/topic/fNIg 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录