为什么 Nginx 将整个 URL 传递给反向代理应用程序?

为什么 Nginx 将整个 URL 传递给反向代理应用程序?

我有一个 NodeJS 应用程序,已在端口 40000 上启动。我安装了 Nginx,以便可以从各个端口反向代理多个应用程序。我有这个位置块:

    location /deduplication/v1/ {
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header x-api-key  $http_x_api_key;
        proxy_set_header XContent-Type $http_XContent-Type;
        proxy_pass_request_headers on;
        proxy_pass http://127.0.0.1:40000;
    }

但是当我使用 curl 进行查询测试时,出现 404 错误。当我查看 NodeJS 应用程序的日志时,我看到它收到了以下内容:

"url":"/deduplication/v1/",

这是什么?我期望“/deduplication/v1/”被剥离,以便我得到:

/

如何让 Nginx 删除“/deduplication/v1/”?

答案1

proxy_pass http://127.0.0.1:40000/;

这样就可以了,请注意末尾的 /。

如果没有斜杠,nginx 会被告知将完整的 URI 透明地代理到给定的上游。

相关内容