404在NGINX反向代理后发布并获取Node.js应用程序的请求

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

我有一个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
和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;
    }