【问题标题】:How to allow http requests in Node.js Nginx?如何在 Node.js Nginx 中允许 http 请求?
【发布时间】:2016-08-24 05:31:23
【问题描述】:

我有一个节点应用程序(使用 PM2)在运行 Ubuntu 的 DigitalOcean droplet 上监听 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 帖子都是 404。

任何帮助将不胜感激。提前谢谢。

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

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

app.listen(3000, "127.0.0.1");

【问题讨论】:

  • Node.js 文件可能是调试此问题所必需的。
  • @MinusFour 我进行了编辑,但我的 node.js 文件非常标准。如果我不使用 Nginx 而我只是在终端中使用“node main.js”,那么帖子就可以正常工作。我认为 Nginx 出于某种原因阻止了我的请求。
  • Node.js 正在为静态文件提供服务?
  • @MinusFour 是的
  • app.get 请求有效吗?

标签: javascript node.js ubuntu nginx


【解决方案1】:

所以我解决了!

我在 DigitalOcean Droplet 上运行 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. 对于高于v12.04的Ubuntu版本: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 并配置您的网络服务器以正确收听。

这是一个网络服务器代码示例:

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”或任何您想要的端口 设置为收听。
  • 如果你有第二个版本,用“localhost”填写“YOUR_APP_LOCAL_IP”
    并用“3000”或任何端口填写“YOUR_APP_PORT” 设置为收听。

应该是这样的!确保也守护应用程序。您可以为此使用PM2 之类的东西。希望这可以帮助像我一样处于相似位置的人拔头发。

编辑:Here 是一个很好的链接,总结了所有这些。

【讨论】:

    猜你喜欢
    • 2014-08-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-05
    • 2013-05-30
    • 1970-01-01
    • 2017-03-30
    • 2017-10-11
    相关资源
    最近更新 更多