我有两个目录: www-1和www-2,两者都有相同的nodejs应用程序。其中有一些玉景,一些端点等。
还有两个新启动脚本运行:
PORT=5000 node www-1/app.js
PORT=5001 node www-2/app.js现在,我有下面的nginx配置来将传入的流量加载到其中一个或另一个。
upstream backend {
server 127.0.0.1:5000 fail_timeout=0;
server 127.0.0.1:5001 fail_timeout=0;
}
server {
listen 80 default_server;
listen [::]:80 default_server;
gzip on;
gzip_types text/plain application/xml text/css application/x-javascript text/javascript application/javascript image/x-icon image/jpeg;
gzip_vary on;
charset UTF-8;
index index.html index.htm;
server_name myserver.com;
location / {
proxy_pass http://backend;
proxy_next_upstream error timeout invalid_header http_500;
proxy_connect_timeout 2;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_redirect off;
proxy_buffering off;
}
location ~* \.(ico|css|js|gif|jpe?g|png|svg|woff2?|ttf|eot)$ {
expires 168h;
add_header Pragma public;
add_header Cache-Control "public, must-revalidate, proxy-revalidate";
root /home/user/myserver.com/www-1/public;
}
}https://gist.github.com/dciccale/2331d2e0a1a6e76e05bd
但是,正如您在第34行中所看到的,我也在为nginx中的所有静力学提供服务,但是我希望通过某种方式指定根值为www-1或www-2,具体取决于哪个服务器已经启动。
让我解释一下为什么:
在服务器中,我有一个git,通常,每当我进行更改时,我都会使用git pull。然后,我将构建新的代码gulp dist,它生成一个dist目录,然后生成一个rm -rf www-1 && cp -r dist www-1,因此在执行最后一个命令时,www-1 (应用程序运行于5000)中可能会有一些停机时间,例如,提供500个未找到视图或其他东西的翡翠文件,因此nginx将平衡到端口5001。这是可行的,但如果替换这些静态资产,nginx将无法提供www-1中的静态文件。在此之后,我将重新启动第一个新启动脚本,以重新运行新部署的应用程序。在此之后,我将对www-2做同样的处理。
这就是我的问题,如何使静态资产动态化的root。或者,如果有更好的方法来处理这件事,我会感谢你的帮助。
编辑:第二种配置
我设置了另一个配置,但是在几秒钟内,用户可以看到更新的内容,而另一个可以看到旧的内容,这是我所能得到的最好的配置。
通过创建两个新的服务器块来侦听端口3000和3001,它们分别对5000和5001执行proxy_pass,并且每个服务器块都有用于静态资产的路由,一个指向www-1,另一个指向www-2。
还需要将http_502和http_404添加到proxy_next_upstream指令中,以确保所有失败请求都应负载平衡(就像正在替换的映像中的404 )。
https://gist.github.com/dciccale/2331d2e0a1a6e76e05bd#file-my-nginx-2-conf
发布于 2015-09-05 13:54:38
您可以考虑在URL中为静态内容添加一个版本id,只要您正在刷新后端,就可以让上一个版本处于活动状态。
https://stackoverflow.com/questions/32413014
复制相似问题