nginx – 在单个域上托管多个Nodejs应用程序

我正在尝试运行多个nodejs应用程序(使用快速框架),所有应用程序都在同一个外部端口(80)上提供,但每个都在一个子目录下.

例如.我想要…

NodeJsApplication1将于http://www.mydomain.com/NodeJsApplication1开始提供

NodeJsApplication2将于http://www.mydomain.com/NodeJsApplication2上市

等等

我已经尝试使用Nginx作为代理,其conf类似于以下内容.

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).

我知道我可以使用多个子域但不想沿着那条路走下去.我更喜欢使用子文件夹代理,因此它全部用软件处理,我不需要为每个应用程序设置任何DNS记录.

这有可能吗?

更新

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

但在渲染时,浏览器会将它们视为“www.mydomain.com/styles/main.css”,而不是“www.mydomain.com/NodeJsApplication1/styles/main.css”.

一个修改NodeJS应用程序以指定完整的URL,但这需要应用程序知道Nginx配置的子目录,并且它会破坏到另一个环境的可移植性.

最佳答案
我在同一个域上拥有多个MEAN应用程序时遇到了类似的问题.我想要子目录,而不必为每个应用程序创建一个新的子域.除了为您的Nginx配置添加重写:

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

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

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

相关文章

Nginx (engine x) 是一个高性能的HTTP和反向代理服务,也是一...
本地项目配置 1 复制 luffy/settings/dev.py为prop.py 修改l...
nginx不仅可以隐藏版本信息,还支持自定义web服务器信息 先看...
一 、此次漏洞分析 1 nginx HTTP/2漏洞 [nginx-announce] ng...
###进入nginx 目录cd /usr/local/nginx###递归显示 2 级目录...
在cmd命令窗口输入下面命令进行查看 tasklist /fi "ima...