我有一个 Node 应用程序(使用 PM2)监听 http://127.0.0.1:3000在我运行 Ubuntu 的 DigitalOcean Droplet 上。但是,我有一个问题。一切正常,除了我所有的 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");
最佳答案
所以我解决了!
我在我的 DigitalOcean Droplet 上运行 Ubuntu 14.04。问题是当我调用 sudo apt-get install nginx
时,它会自动安装 NginX 1.4.6 版。但是,NginX 的最新稳定版本是 1.8.0 版。以下是安装最新版本的步骤:
- 添加 NginX PPA
sudo add-apt-repository ppa:nginx/stable
- 如果
add-apt-repository
不可用,请执行以下操作:- 对于 Ubuntu v12.04 或更低版本:
sudo apt-get install python-software-properties
,然后重新运行第一个命令sudo add-apt-repository ppa:nginx/稳定
- 对于高于 v12.04 的 Ubuntu 版本:
sudo apt-get install software-properties-common
,然后重新运行第一个命令sudo add-apt-repository ppa:nginx/稳定
- 对于 Ubuntu v12.04 或更低版本:
- 如果
- 现在运行更新:
sudo apt-get update
- 最后,安装 NginX:
sudo apt-get install nginx
接下来,配置NginX:
- 导航到
/etc/nginx/
cd sites-available
touch YOUR_APP
注意:“YOUR_APP”应替换为您希望调用 Node.js 应用的任何内容。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”
并用“3000”或任何端口填写“YOUR_APP_PORT” 将其设置为可以收听。
应该是吧!确保也对应用程序进行守护进程。你可以使用类似 PM2 的东西为了那个原因。希望这对像我一样处于类似情况的人有所帮助。
编辑:Here是一个很好的链接,总结了所有这些。
关于javascript - 如何在 Node.js Nginx 中允许 http 请求?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32193840/