node&express + nginx具有多个位置

我打算在一个子域下使用express来运行2个节点的应用程序,nginx提供静态文件。 在我使用的两个节点应用中:

app.use(express.static(path.join(__dirname))); 

我有以下的nginxconfiguration:

 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访问)一切都很好,但是对于“pipe理”应用程序(sub.domain.com/admin),相同的静态文件作为“主”应用程序。 我应该如何修改我的设置以实现正确的行为?

使用开发工具检查以确保静态资产试图从正确的URL加载; 也就是http://sub.domain.com/admin/css/或者/admin/css/等等。路径正在被生成,关于它们的项目root并且显示为/css/ ,所以当浏览器尝试检索它们,它会转到http://sub.domain.com/css/

我认为你的配置中的位置块的顺序可能是问题。 有关更多详细信息,请查看此链接 。 尝试使用这个重构的配置 –

  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; } }