Nginx 使用特定位置连接到 expressjs

Nginx 使用特定位置连接到 expressjs

我正在尝试让 nginx 作为反向代理工作。

我想要一个虚拟服务器hostname/service,它连接到位于端口 5000 的 NodeJS 服务器。

如果我尝试:

server {
    listen 80 default_server;
    location /service {
        proxy_pass http://localhost:5055;
        (...)
     }
}

当我尝试连接时,出现 404 错误,提示没有/service文件。不过,我很确定是 NodeJS 在响应我。

所以问题是,对/servicenginx 的请求被代理到对 NodeJS 的请求/service。如何将请求转换为/service请求/

答案1

在您的 proxy_pass 中您正在传递给端口5055并且您上面说过您正在端口上运行节点5000

也许只需改变proxy_passhttp://localhost:5000;可以了。

此外,当您代理到位置时,/service所有请求也可能使用 edge 代理/service,正如 nginx 网站上所说的那样

如果指定了 proxy_pass 但没有指定 URI,则在处理原始请求时,请求 URI 将以客户端发送的相同形式传递给服务器,或者在处理更改的 URI 时传递完整的规范化请求 URI:

location /some/path/ {
    proxy_pass http://127.0.0.1;
}

在 1.1.12 版本之前,如果指定了 proxy_pass 但没有指定 URI,则在某些情况下可能会传递原始请求 URI 而不是改变后的 URI。

阅读更多内容

我通常使用上游来执行此操作,以下是我使用的示例配置,它也可以正确代理 Web 套接字连接。

upstream sample_app {
  server localhost:5000;
}

server {
listen 80 default_server;
location /service {
     proxy_set_header X-Real-IP $remote_addr;
     proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
     proxy_set_header Host $http_host;
     proxy_set_header X-NginX-Proxy true;

     proxy_http_version 1.1;
     proxy_set_header Upgrade $http_upgrade;
     proxy_set_header Connection "upgrade"

     proxy_pass sample_app;
     proxy_redirect off;
 }
}

使用此配置,如果您转到http://localhost/service自动转到端口 80,它应该将请求传递给以 5000 运行的节点服务器。

相关内容