在单个域中托pipe多个Nodejs应用程序

我试图运行多个nodejs应用程序(使用快速框架)所有服务在同一个外部端口(80),但每个子目录下。

比如我想…

NodeJsApplication1在http://www.mydomain.com/NodeJsApplication1上可用

NodeJsApplication2在http://www.mydomain.com/NodeJsApplication2上可用

等等

我曾尝试使用Nginx作为代理类似于以下的configuration文件。

server { listen 80; server_name www.mydomain.com; location / { root /var/www/html; index index.html index.htm; } location /NodeJsApplication1/ { proxy_pass http://0.0.0.0:3000; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; rewrite /NodeJsApplication1/(.*) /$1 break; } location /NodeJsApplication2/ { proxy_pass http://0.0.0.0:3001; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; rewrite /NodeJsApplication2/(.*) /$1 break; } } 

这工作发现访问页面,但它打破了返回页面上的所有相对URL。 所有的脚本和CSS等指向根(例如www.mydomain.com/styles/main.css)。

我知道我可以使用多个子域,但不想沿着这条路线走。 我宁愿有子文件夹代理,所以它都在软件中处理,我不需要为每个应用程序设置任何DNSlogging。

这甚至有可能吗?

更新

在应用程序本身中,所有链接都使用相对path。 例如:

但是,当呈现浏览器对待他们作为“www.mydomain.com/styles/main.css”而不是“www.mydomain.com/NodeJsApplication1/styles/main.css”。

首先是修改NodeJS应用程序来指定一个完整的URL,但是这需要应用程序知道nginxconfiguration的子目录,并且将可移植性遗留给另一个环境。

这应该在NodeJS应用程序中解决。 大多数编写良好的应用程序允许您指定应用程序将驻留在的根URL,并使用它来生成所有本地URL,因此我build议您对应用程序执行相同的操作。

我在同一个域上有多个MEAN应用程序也有类似的问题。 我想要子目录,而不必为每个应用程序创build一个新的子域名。 除了在你的Nginxconfiguration中添加一个重写:

 rewrite ^/app1/(.*)$ /$1 break; 

您还需要在索引的头部设置<base>标记:

 <base href="/app1/"> 

https://www.digitalocean.com/community/questions/how-to-run-multiple-node-application-with-nginx-same-droplet-same-domain