为什么我在Nginx反向代理上得到404?

时间:2019-01-11 17:20:29

标签: nginx nginx-location nginx-reverse-proxy

下面是我的配置,除了save_model路由外,我在所有定义的路由上都收到404,我不明白为什么。

如果我向http://example.tech/connect发出请求,我会得到404;如果我向http://api.example.tech发出请求,我也会得到404。

我看不到哪里出了问题,因为它看起来应该可以工作!

well-known

3 个答案:

答案 0 :(得分:0)

出于某种原因,在proxy_pass末尾需要正斜杠

答案 1 :(得分:0)

您需要在proxy_pass指令中使用特定的uri,而不要使用反斜杠。但是在您的情况下,反斜杠充当特定的uri。 Nginx将'/auth'(例如)替换为'/'(您已添加)。

实际上,您输入的答案是正确的,将proxy_pass http://myapp.net;更改为proxy_pass http://myapp.net/;

原因是proxy_pass在有/没有特定uri的情况下将以两种不同的方式工作。 More details about this directive在nginx.org上。打击是该链接中引用的某些内容。

  
      
  • 如果使用URI指定了proxy_pass指令,那么当请求传递到服务器时,标准化请求URI的一部分   匹配位置的位置将替换为伪指令中指定的URI:

         

    位置/名称/ {
          proxy_pass http://127.0.0.1/remote/;
      }

  •   
  • 如果指定了不带URI的proxy_pass,则请求URI会以与原始客户端发送时相同的格式传递到服务器   处理请求,或传递完整的规范化请求URI   处理更改的URI时:

         

    位置/ some / path / {
          proxy_pass http://127.0.0.1;
      }

  •   

在您的情况下,proxy_pass指令中没有URI,因此/auth将被传递到后端服务器。不幸的是,您的后端服务器没有/auth资源,因此返回404。如果您的后端服务器确实有/auth待处理,则在请求uri /auth时永远不会出现404错误。

答案 2 :(得分:0)

这是我的情况,我得到404而不是502:

# let's define some proxy pass
location ~ /.well-known/acme-challenge {
    proxy_pass http://127.0.0.1:5080; # this backend doesn't exist which leads to 502
    proxy_set_header Host $host;
}

# this is a default directives
error_page   500 502 503 504  /50x.html; # this is a reason to redirect 502 to 50x.html
location = /50x.html { # but this file doesn't exist in root so we get 404 instead of 502
    root   /usr/share/nginx/html;
}