0

我使用 Nginx 配置(来自 Nginxsites-available文件夹)为 React 应用程序和 NodeJS API 提供服务:

server {
    listen 80;
    listen [::]:80;

    root /var/www/html;

    index index.html index.htm index.nginx-debian.html;

    server_name my-site-name.com www.my-site-name.com;

    location /api/ {
        proxy_pass http://localhost:3000;

        proxy_set_header Host $host;
        proxy_cache_bypass $http_upgrade;

        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection 'upgrade';
    }

    location / {
        root /var/www/html/;
        try_files $uri /index.html;
    }
}

如果我在服务器上启动 NodeJS API npm start- 一切正常。如果我使用 PM2 作为进程运行 API - 我通过调用任何 API 端点得到 502 Bad gateway。

编辑:PM2 不在预期端口(3000)提供应用程序。关掉就知道了。

4

2 回答 2

0

我在设置登台服务器时遇到了同样的问题。发布了一个类似的问题

对我有用的几件事:

  • 在服务器端代码中错过它们的任何地方都使用 try/catch 循环
  • 确保正确读取所有环境变量
  • 检查 pm2 日志中是否存在节点错误
  • 检查 nginx 日志以查找配置错误
于 2022-02-01T15:12:36.357 回答
0

所以问题不是在预期的端口(3000)上为应用程序提供服务。

问题出在我server.js运行的文件中pm2 start server.jspm2 start ./bin/www我在网上看到了很多使用命令启动 NodeJS 应用程序的建议。如果您的 Express NodeJS 项目由Express 应用程序生成器初始化,您可以执行此操作。

我的项目没有被 Express 生成器初始化,所以我创建了一个虚拟项目来查看./bin/www文件内容。

> mkdir my-app
> cd my-app
> npx express-generator

www然后我将位于目录中的文件内容复制bin到我的server.js文件中。唯一的变化是在第 7 行:

var app = require('../app');

我把它改成

var app = require('./app');

因为server.jsapp.js文件都位于我的项目根目录中。

于 2020-12-20T09:15:20.853 回答