NGINX:使用域/路径在同一服务器上的多个节点js应用程序

JRi*_*dsz 3 nginx node.js

问题

如果我有一些节点js应用程序,并且想将其发布为mydomain.com/app1、mydomain.com/app2等,则必须将app.get'/'更改 为app.get('/ app1',也可以在在某些情况下,css,js和图像路径。

要分配域/路径,是否应该始终修改应用程序?

有什么方法可以使应用程序独立吗?

是nodejs还是nginx配置?

这是一个用作示例的节点js应用程序:

https://github.com/jrichardsz/sensitive_web1.1/blob/master/server.js

这是mydomain.com的节点js应用程序的nginx配置(有效!)

server {
  listen 80;
  server_name mydomain.com;

  location / {
    proxy_pass http://localhost:8080/;
  }
}
Run Code Online (Sandbox Code Playgroud)

节点应用:

app.get('/', function(req, res) {
    // ejs render automatically looks in the views folder
    res.render('index');
});
Run Code Online (Sandbox Code Playgroud)

这是我针对同一节点js应用但mydomain.com/app1的 nginx配置(有效!)

server {
  listen 80;
  server_name mydomain.com;

  location /app1/ { 
    proxy_pass http://localhost:8080/app1/; 
  }
}
Run Code Online (Sandbox Code Playgroud)

这是Node js应用程序中的修复

app.get('/app1', function(req, res) {
    // ejs render automatically looks in the views folder
    res.render('index');
});
Run Code Online (Sandbox Code Playgroud)

我试过了 :

https://github.com/expressjs/express-namespace

http://expressjs.com/en/4x/api.html

但是在两种情况下,我都需要更改节点js应用程序。

提前致谢。

Bra*_*rad 5

要分配域/路径时,是否应该始终修改应用程序?

不,您根本不需要修改应用程序。

proxy_pass以这种方式使用时,需要使用正则表达式重写URL。尝试这样的事情:

  location ~ ^/app1/(.*)$ { 
    proxy_pass http://localhost:8080/$1$is_args$args; 
  }
Run Code Online (Sandbox Code Playgroud)

另请参阅:https : //serverfault.com/q/562756/52951