使用代理_pass重写nginx返回404

使用代理_pass重写nginx返回404,nginx,url-rewriting,Nginx,Url Rewriting,我试图创建一个与proxy\u pass相结合的重写规则,但我一直得到404响应代码 Nginx是nodejs和应用程序的反向代理,我想在不公开的情况下将特定路径指向更长的路径,以下是我当前的服务器块: upstream backend { server 127.0.0.1:8080; keepalive 128; } server { listen 80 default_server; listen [::]:80 default_server; l

我试图创建一个与
proxy\u pass
相结合的重写规则,但我一直得到
404
响应代码

Nginx是nodejs和应用程序的反向代理,我想在不公开的情况下将特定路径指向更长的路径,以下是我当前的服务器块:

upstream backend {
    server 127.0.0.1:8080;
    keepalive 128;
}

server {
    listen 80 default_server;
    listen [::]:80 default_server;

    location / {
        rewrite ^/health$ /app/custom/path/health break; <-- this returns 404
        proxy_set_header Host $host;
        proxy_set_header X-Forwarded-For $remote_addr;
        proxy_set_header X-Forwarded-Proto "http";
        proxy_pass http://backend$request_uri;
}
上游后端{
服务器127.0.0.1:8080;
保持128;
}
服务器{
监听80个默认_服务器;
侦听[:]:80默认_服务器;
地点/{

重写^/health$/app/custom/path/health break;尝试使用
proxy\u passhttp://backend
rewrite
指令更改
$uri
内部nginx变量,而不是
$request\u uri
变量。如前所述,使用
proxy\u passhttp://backend
应该足够了,如果不够,请尝试
proxy\u passhttp://backend美元ri?$args;
@IvanShatsky,但是当您只指定后端主机名或上游名称(如
代理\u pass)时,它不会中断其他不是/health的调用吗http://backend;
)当请求URI和查询参数出现在请求中时,应将它们传递到后端(除非通过
rewrite
set$args something
修改它们)。