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

时间:2020-08-14 18:19:52

标签: nginx location sites

我的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(未找到)

知道我在做什么错

1 个答案:

答案 0 :(得分:0)

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

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

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

我知道您并没有使用它,只是为了指出要点,请注意location /location = /不同,因为第二种情况仅在路径完全为 < / em> /,因此它将不再匹配/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