NGINX:使用域/路径

时间:2016-12-06 00:24:55

标签: node.js nginx

问题

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

问题

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

有没有办法让应用程序独立?

是nodejs还是nginx配置?

这是一个节点js应用程序,例如:

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

这是我的节点js app的nginx配置 mydomain.com (有效!)

server {
  listen 80;
  server_name mydomain.com;

  location / {
    proxy_pass http://localhost:8080/;
  }
}

节点应用:

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

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

server {
  listen 80;
  server_name mydomain.com;

  location /app1/ { 
    proxy_pass http://localhost:8080/app1/; 
  }
}

这是节点js app中的修复

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

我试过了:

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

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

但在这两种情况下,我都需要更改我的节点js app。

提前致谢。

1 个答案:

答案 0 :(得分:4)

  

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

不,你根本不必修改应用程序。

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

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

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