Nginx 位置 - 站点配置不起作用

Nginx location - sites configuration not working

我有一个 nginx 运行 一个位置 :

location / {
   proxy_pass http://10.22.1.27:3000;
               proxy_http_version 1.1;
               proxy_set_header Connection "";
}

结果我的申请出现了

当我将位置更改为

location /login {
     proxy_pass http://10.22.1.27:3000;
     proxy_http_version 1.1;
     proxy_set_header Connection "";
    
}

我的申请根本没有出现。在控制台中,我收到以下错误消息:

ET https://demo3.xxxxx.rocks/static/js/vendor.f9538d6f661cb0e94054.js net::ERR_ABORTED 404(未找到)

知道我做错了什么吗

A location 告诉 NGINX 在路径匹配给定模式时如何处理请求。

location / 将匹配任何路径,或更准确地说,任何以 / 开头的内容,这实际上是任何请求。所以这已经包括 /login 和您导航到的任何其他页面或路径。

当您将其更改为 location /login 时,它将不再匹配您首次导航到该地址时的 /,这将导致 HTTP 404 Not Found.

我知道你没有用过这个但只是为了说明一点,注意 location /location = / 不同,因为第二种情况只有在路径为 [=51 时才会匹配=]完全 /,所以它不再匹配/login.

底线:将其保留为 location / 除非您有特定需要以不同方式处理不同路径。例如,您可能会在 /api/... 处使用 proxy_pass 处理请求到后端,但 /docs/... 请求通过从本地目录提供静态文件来处理。

编辑:此外,如果您确实更改了位置路径,请记住它会将其附加到 proxy_pass 地址。因此,对 /login/foo 的请求将被转发到 http://10.22.1.27:3000/login/foo。如果上游服务器无法识别 /login 路径,那么它将失败并显示 404 Not Found.

要解决此问题,请向 proxy_pass 添加一个路径,即使它只是一个根路径,例如 http://10.22.1.27:3000/(注意尾部斜杠)。然后 NGINX 会将 location 路径映射到 proxy_pass 路径,并且只附加剩下的内容。例如,现在对 /login/foo 的请求将被转发到 http://10.22.1.27:3000/foo.