404在NGINX反向代理后发布并获取Node.js应用程序的请求
我有一个Ubuntu web服务器,它的运行结构如下: Nginx反向代理localhost:80,它重定向到404在NGINX反向代理后发布并获取Node.js应用程序的请求,node.js,nginx,Node.js,Nginx,我有一个Ubuntu web服务器,它的运行结构如下: Nginx反向代理localhost:80,它重定向到“/”(本地主机上带有WordPress站点的apache服务器:8080),目前可以正常工作 最近,我尝试在www.site.com/app或在内部添加一个Node.js应用程序,localhost:3000。我能够提供node.js webapp的HTML和CSS,但是所有内部路由调用都是404ing,可能是因为/app/的URL地址 IE.试图点击/someendpoint和404
“/”
(本地主机上带有WordPress站点的apache服务器:8080),目前可以正常工作
最近,我尝试在www.site.com/app
或在内部添加一个Node.js应用程序,localhost:3000
。我能够提供node.js webapp的HTML和CSS,但是所有内部路由调用都是404ing,可能是因为/app/的URL地址
IE.试图点击/someendpoint
和404s,因为Node.js技术上运行于localhost:3000
(www.site.com/app
)。我应该像(www.site.com/app/someendpoint
)那样路由参数吗
问题是:由于我对NGINX config的理解不好,所有来自NODE.JS的POST/GET调用都是404ing。如何将此GET调用路由到Node.js服务器的实际位置(site.com/app/,localhost:3000)
这是我在/etc/nginx/available\u sites/
server {
listen 80 default_server;
listen [::]:80 default_server;
root /var/www/html;
index index.php index.html index.htm index.nginx-debian.html;
server_name www.*site*.name;
location / {
proxy_pass http://127.0.0.1:8080$request_uri;
proxy_buffering on;
proxy_buffers 12 12k;
proxy_redirect off;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $remote_addr;
proxy_set_header Host $host;
try_files $uri $uri/ /index.php?q=$uri&$args;
}
#Currenly serving HTML, CSS of site, however node routes 404
location /app/ {
proxy_pass http://localhost:3000/;
}
}
如何更新此NGINX配置文件,以说明节点端点主动尝试访问apache站点的路由,而不是节点服务器的实际位置
任何帮助或想法都会很好,我已经在这个问题上停留了一段时间,作为个人项目的一部分
谢谢 下面是一个示例app.js文件,它可能会让您对这件事有所了解
var express = require("express");
var router = require("./lib/routes/index");
var app = express();
var port = 3000;
app.use('/app', router);
app.listen(port, function () {
console.log("Listening on port " + port);
});
至于nginx配置,我建议如下:
# Sample nginx config with 2 upstream blocks
upstream nodeApp {
server 127.0.0.1:3000;
}
upstream apacheApp {
server 127.0.0.1:8080
}
server {
listen 80;
listen [::]:80;
server_name www.domain.com domain.com;
root /var/www/domain;
location / {
proxy_pass http://apacheApp;
}
location /app {
proxy_pass http://nodeApp;
# OR
# try_files $uri $uri/ @backend;
}
location @backend {
proxy_pass http://nodeApp;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
}
}
其中的关键部分是在app.js中使用外部路由器,然后使用以下行:app.use('/app',router)代码>
您可能还希望将nginx设置为提供静态文件,而不是依赖express.static()
。通过设置更多的位置块也很容易做到这一点,如下所示:
location /app/public {
try_files $uri $uri/ =404;
}
这对你的目的应该有用。别忘了用nginx-t
检查配置。请删除位置/块中的try\u files语句
您的位置应该如下所示
我认为app.js
块中有一个小错误:它应该是var-port=3000
而不是var-port=8085
。
location / {
proxy_pass http://localhost:8080;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection 'upgrade';
proxy_set_header Host $host;
proxy_cache_bypass $http_upgrade;
}