使用nginx和Python防止站点在更新期间关闭

我有一个托管在Ubuntu上的活动站点,使用nginx,站点是用Python编写的(CherryPy是服务器,Bottle是框架).

我有一个shell脚本,它复制我在现有的实时站点上传的python文件,然后当然导致CherryPy重新启动服务器,因此它运行最新的代码(我想要它).问题是,在它停止和启动之间,默认静态页面会显示给当时试图查看网站页面的任何不幸的人(希望他们不提交表单).我在更新时已经多次看过这个页面.

我当前的设置是两个端口上运行的两个副本,在两个端口上使用nginx反向代理.所以我想如果我更新一个,等待几秒钟,然后更新另一个,那么该网站将在100%的时间内上升,但这似乎不是这样的情况?

假设我在端口8095和8096上有反向代理,两者都显示相同的站点,但在硬盘驱动器上显示两个相同的副本.我更新了端口8095的python文件,导致该端口在CherryPy重新启动时关闭.难道每个人都不应该打8096吗?它似乎不像这样工作.我的文件复制脚本有8秒延迟,根据CherryPy日志,第2次停止重启,在第1次重启后6秒重启,但我看到服务器关闭时显示的默认静态离线页面.我糊涂了.根据日志,总有一个端口.

这是我的nginx.conf的一部分:

upstream app_servers {
    server 127.0.0.1:8095;
    server 127.0.0.1:8096;
}

server {
    server_name www.mydomain.com; 
    listen 80;

error_page 502 503 /offline/offline.html;

location /offline {
    alias   /usr/share/nginx/html/mysite/1/views/;
}

    location / {
            proxy_pass         http://app_servers;
            proxy_redirect     off;
            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_set_header   X-Forwarded-Host $server_name;
            proxy_set_header        X-Scheme $scheme;
            proxy_connect_timeout 10;
            proxy_read_timeout 10;
    }
}
最佳答案
试试这个:From the manual

upstream app_servers {
server 127.0.0.1:8095 max_fails=1 fail_timeout=1;
server 127.0.0.1:8096 max_fails=1 fail_timeout=1;;
}

转载注明原文:使用nginx和Python防止站点在更新期间关闭 - 代码日志