微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

PM2,502 错误网关,Nginx 为 React 应用程序和 NodeJS API 提供服务

如何解决PM2,502 错误网关,Nginx 为 React 应用程序和 NodeJS API 提供服务

我使用 Nginx 配置(来自 Nginx sites-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;
    }
}

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

编辑:PM2 不在预期端口 (3000) 提供应用程序。关闭后发现。

解决方法

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

问题出在我由 server.js 运行的 pm2 start server.js 文件中。我在网上看到很多使用 pm2 start ./bin/www 命令启动 NodeJS 应用程序的建议。如果您的 Express NodeJS 项目由 Express application generator 初始化,您可以这样做。

我的项目没有被 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 文件都位于我的项目根目录中。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。