我计划在一个子域下运行带有express的2个节点应用程序,nginx为静态文件提供服务。在我使用的两个节点应用程序中:
app.use(express.static(path.join(__dirname)));
我有以下nginx配置:
server {
listen 80;
server_name sub.domain.com;
index index.html;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection 'upgrade';
proxy_set_header Host $host;
proxy_cache_bypass $http_upgrade;
location / {
proxy_pass http://localhost:232;
}
location ~ ^/(dist/|img/|app/|css/) {
root /var/www/app/main/;
}
location /admin {
proxy_pass http://localhost:233;
rewrite ^/admin /$1 break;
}
location ~ ^/admin/(dist/|img/|app/|css/) {
root /var/www/app/admin/;
access_log off;
expires max;
}
}
使用此设置,一切都非常适合“主”应用(在sub.domain.com上访问),但对于'admin'应用(sub.domain.com/admin),相同的静态文件将用于'主'应用。我应该如何修改我的设置以实现正确的行为?
答案 0 :(得分:0)
使用您的开发工具检查以确保尝试从正确的URL加载静态资产;也就是http://sub.domain.com/admin/css/
或/admin/css/
等。路径可能是根据项目根生成的,并显示为/css/
,因此当浏览器尝试检索它们时,转到http://sub.domain.com/css/
。
答案 1 :(得分:0)
我认为配置中位置块的顺序可能是个问题。有关更多详细信息,请查看此link。尝试使用这个重构配置 -
server {
listen 80;
server_name sub.domain.com;
index index.html;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection 'upgrade';
proxy_set_header Host $host;
proxy_cache_bypass $http_upgrade;
location ~ ^/admin/(dist/|img/|app/|css/) {
root /var/www/app/admin/;
access_log off;
expires max;
}
location /admin {
proxy_pass http://localhost:233;
rewrite ^/admin /$1 break;
}
location ~ ^/(dist/|img/|app/|css/) {
root /var/www/app/main/;
}
location / {
proxy_pass http://localhost:232;
}
}