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

时间:2015-08-13 15:26:00

标签: python nginx cherrypy bottle

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

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

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

假设我在端口8095和8096上有反向代理,两者都显示相同的站点,但在硬盘驱动器上显示两个相同的副本。我更新了端口8095的python文件,导致该端口在CherryPy重新启动时关闭。难道每个人都不应该打8096吗?它似乎并没有像这样工作。我的文件复制脚本有8秒的延迟,根据CherryPy日志,第一个已经完成重启后,第二个停止重启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;
    }
}

1 个答案:

答案 0 :(得分:0)

试试这个: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;;
}