我为React应用程序和NodeJS API提供Nginx配置(来自Nginxsites-available
文件夹(:
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-我得到502坏网关通过调用任何API端点。
编辑:PM2不在预期端口(3000(提供应用程序。通过关闭发现。
因此问题不是在预期端口(3000(为应用程序提供服务。
问题出现在我的server.js
文件中,该文件由pm2 start server.js
运行。我在网上看到了很多用pm2 start ./bin/www
命令启动NodeJS应用程序的建议。如果您的Express NodeJS项目由Express应用程序生成器初始化,则可以执行此操作。
我的项目没有被Express生成器初始化,所以我创建了一个伪项目来查看./bin/www
文件的内容。
> mkdir my-app
> cd my-app
> npx express-generator
然后,我将位于bin
目录中的www
文件的内容复制到我的server.js
文件中。唯一的变化是在第7行:
var app = require('../app');
我把它改成
var app = require('./app');
因为server.js
和app.js
文件都位于我的项目根目录中。
我在设置临时服务器时遇到了同样的问题。张贴了一个类似的问题
对我有用的几件事:
- 在服务器端代码中遗漏的地方使用try/catch循环
- 确保正确读取所有环境变量
- 检查pm2日志中的节点错误
- 检查nginx日志中的配置故障