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

前端之家收集整理的这篇文章主要介绍了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相关文章