nginx.conf 对于 NodeJS/React 应用返回 502 和 405

nginx.conf for NodeJS/React App returning 502 and 405

尝试在 Amazon LINUX EC2 实例上设置暂存环境并从 Heroku 迁移。 我的存储库有两个文件夹:

我们的前端和后端在部署中运行在同一个端口

dev 中,这些 运行 在不同的端口上,所有来自 WEB 的请求都被代理到 API (例如,端口 3000 上的 WEB 运行s 和端口 3001 上的 API 运行s。在 package.json[=55 中设置代理=] WEB 文件/)

目前应用部署是这样的:

  • 构建网络/分发
  • 复制 build/ 到 API 文件夹
  • 使用 web npm start
  • 部署到 Heroku

prod中,我们只用WEB构建部署API文件夹/

当前 nginx.conf 看起来像这样 Commented out all other attempts

也使用 PM2 来 运行 像这样的线程 $ sudo pm2 bin/www 当前线程 运行ning 是这样的: pm2 log 这是 运行宁在 EC2 实例

的端口 3000

例如,转到 public IPv4 DNS 将我带到登录,它是从 /build 文件夹中获取的,但是 none 登录方法(或任何 API 调用) 在工作中。 502 response example

我尝试了很多不同的配置。将 proxy_pass 设置为端口 3000,因为那是节点进程 运行ning 所在的端口。 我得到的唯一响应代码是 405 Not Allowed502 Bad Gateway

如果我可以提供任何其他信息来找到解决方案,请告诉我。

您的配置中似乎没有上游块。看起来您正在尝试使用 proxy-pass 发送到命名服务器和端口而不是定义的上游。此页面上有一个示例,展示了如何定义上游,然后向其发送流量。 https://nginx.org/en/docs/http/ngx_http_upstream_module.html

    server backend1.example.com       weight=5;
    server backend2.example.com:8080;
    server unix:/tmp/backend3;
    server backup1.example.com:8080   backup;
    server backup2.example.com:8080   backup;
}
server {
    location / {
        proxy_pass http://backend;
    }
}````

原来存储在 Postgres 中的快速会话存在问题。 这导致我重新测试连接字符串,我发现我一直收到以下错误:

connect ECONNREFUSED 127.0.0.1:5432

我确实有一个包含环境变量的 .env 文件,但 pm2 没有读取它们。 所以我将这一行添加到 app.js:

const path = require("path");
require('dotenv').config({ path: path.join(__dirname, '.env') });

然后使用以下命令使用 pm2 重新启动应用程序:

$ pm2 restart /bin/www --update-env