首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用于零停机时间部署的负载平衡nodejs应用程序,nginx提供不同的静态资产

用于零停机时间部署的负载平衡nodejs应用程序,nginx提供不同的静态资产
EN

Stack Overflow用户
提问于 2015-09-05 12:24:19
回答 1查看 538关注 0票数 0

我有两个目录: www-1和www-2,两者都有相同的nodejs应用程序。其中有一些玉景,一些端点等。

还有两个新启动脚本运行:

代码语言:javascript
复制
PORT=5000 node www-1/app.js

PORT=5001 node www-2/app.js

现在,我有下面的nginx配置来将传入的流量加载到其中一个或另一个。

代码语言:javascript
复制
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_502http_404添加到proxy_next_upstream指令中,以确保所有失败请求都应负载平衡(就像正在替换的映像中的404 )。

https://gist.github.com/dciccale/2331d2e0a1a6e76e05bd#file-my-nginx-2-conf

EN

回答 1

Stack Overflow用户

发布于 2015-09-05 13:54:38

您可以考虑在URL中为静态内容添加一个版本id,只要您正在刷新后端,就可以让上一个版本处于活动状态。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32413014

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档