python - 使用 nginx 和 Python 防止网站在更新期间关闭

标签 python nginx cherrypy bottle

我有一个托管在 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;;
}

关于python - 使用 nginx 和 Python 防止网站在更新期间关闭,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31992469/

相关文章:

nginx - nginx.service 的作业失败,因为控制进程退出并显示错误代码

python - 如何使用 CherrPy 作为 Web 服务器和 Bottle 作为应用程序来支持多个虚拟主机?

amazon-ec2 - 如何在 EC2 实例上打开 Web 服务器端口

python - 旧版本 Cherrypy 的文档

python - 如何更改文件夹的修改时间?

python - 如何分割大型 XBRL 文件?

Nginx 配置未针对浏览器更新

laravel - 使用 NGINX 在单个域上运行多个 Laravel 项目

android - 通过python控制android设备/模拟器

python - 在colab中找不到kaggle.json?