【问题标题】:Nginx location - sites configuration not workingNginx 位置 - 站点配置不起作用
【发布时间】:2020-08-14 18:19:52
【问题描述】:

我有一个在某个位置运行的 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(未找到)

知道我做错了什么

【问题讨论】:

    标签: nginx location sites


    【解决方案1】:

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

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

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

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

    底线:将其保留为location /,除非您有特殊需要以不同方式处理不同路径。例如,您可以使用proxy_pass 处理/api/... 到后端的请求,但/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

    【讨论】:

    • 谢谢你的答案。我有不同的后端。这就是我们要使用该位置的原因。它们都针对不同的内部实例(不同的 IP 和端口)运行。但是我仍然不明白,虽然同一个应用程序通过 location / 而不是通过 /login 工作,因为 location 块中的定义没有改变。为什么找不到文件,或者我需要做什么?
    • 当您尝试将位置从/ 更改为/login 时,您是否也将客户端更改为调用/login/foo 而不是/foo?如果不是,那么这就是它失败的原因,你不能在一端改变路径而不在另一端以同样的方式改变它。如果您正在更改两端,这就是它应该工作的原因,那可能是因为proxy_pass - 请参阅编辑后的答案。
    • 是的,你是对的。我也在我的应用程序中更改了路径并且它正在工作。非常感谢
    猜你喜欢
    • 2018-01-14
    • 2017-06-16
    • 2012-10-15
    • 2021-12-10
    • 2021-03-07
    • 1970-01-01
    • 1970-01-01
    • 2021-11-24
    • 2018-12-29
    相关资源
    最近更新 更多