如何在 Node.js Nginx 中允许 http 请求?

How to allow http requests in Node.js Nginx?

我有一个节点应用程序(使用 PM2)在我的 DigitalOcean Droplet 运行 Ubuntu 上监听 http://127.0.0.1:3000。但是,我有一个问题。除了我的所有 http post 请求都收到 404 Not Found 错误之外,一切正常。我不知道为什么。

这是我的 Nginx conf 文件的样子:

server {
    listen 0.0.0.0:80;
    root /var/www/app_folder;

    server_name example.com;

    location / {
        proxy_pass http://127.0.0.1:3000;
    }
}

它加载一切正常。静态图像、CSS、html,甚至 javascript 文件。但是,我所有传出的 HTTP post 都是 404。

如有任何帮助,我们将不胜感激。提前致谢。

编辑:我的 node.js 文件与其他文件一样。这是概要。

app.post('/someURL', function(req, res) {...}

app.listen(3000, "127.0.0.1");

所以我解决了!

我在我的 DigitalOcean Droplet 上 运行ning Ubuntu 14.04。问题是当我调用 sudo apt-get install nginx 时,它会自动安装 NginX 版本 1.4.6。但是,NginX 的最新稳定版本是 1.8.0 版。以下是安装最新版本的步骤:

  1. 添加 NginX PPA sudo add-apt-repository ppa:nginx/stable
    1. 如果 add-apt-repository 不可用,请执行以下操作:
      1. 对于Ubuntu版本v12.04或更低:sudo apt-get install python-software-properties,然后重新运行第一个命令sudo add-apt-repository ppa:nginx/stable
      2. 对于Ubuntu大于v12.04的版本:sudo apt-get install software-properties-common,则重新运行第一个命令sudo add-apt-repository ppa:nginx/stable
  2. 现在运行更新:sudo apt-get update
  3. 最后,安装NginX:sudo apt-get install nginx

接下来,配置NginX:

  1. 导航到 /etc/nginx/
  2. cd sites-available
  3. touch YOUR_APP 注意:"YOUR_APP" 应替换为您希望给 Node.js 应用程序命名的任何名称。
  4. sudo vi YOUR_APP 并配置您的 Web 服务器以正确侦听。

以下是网络服务器代码示例:

server {  
    server_name your.domain.com;
    listen 80;

    location / {
        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_pass http://YOUR_APP_LOCAL_IP:YOUR_APP_PORT;
        proxy_redirect off;
    }
}

在您的 Node.js 文件中,将有类似于以下的一行: app.listen(3000, "127.0.0.1");
或者这个:app.listen(3000);

  • 如果你有第一个版本,填写"YOUR_APP_LOCAL_IP" “127.0.0.1”或您在 node.js 中使用的任何内容 文件,并在 "YOUR_APP_PORT" 中填写“3000”或任何端口 设置为收听。
  • 如果你有第二个版本,请在"YOUR_APP_LOCAL_IP"中填写"localhost"
    并在 "YOUR_APP_PORT" 中填写“3000”或任何你想要的端口 设置为收听。

应该就是了!确保也对应用程序进行守护进程。您可以为此使用 PM2 之类的东西。希望这对像我一样处于类似情况的人有所帮助。

编辑:Here 很好 link 总结了所有这些。