我正在尝试运行多个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配置的子目录,并且它会破坏到另一个环境的可移植性.
最佳答案