【发布时间】:2015-12-28 21:32:48
【问题描述】:
我有一个带有冷部署(未运行)网站的备份服务器。
这些网站也在多台生产服务器上,有时其中一些会出现故障。我为我的生产服务器配置了一个 DNS 回退,所以如果出现问题 - 请求将被传递到我的备份服务器,在那里它们由 nginx + uwsgi 处理。
当请求被传递到备份服务器时,nginx 使用默认的 nginx 配置(/etc/nginx/conf.d/default_site.conf)
(因为没有与 URL 匹配的网站正在运行,并且 /etc/nginx/sites-enabled 中没有符号链接
注意:我在 /etc/nginx/sites-available 和 /etc/uwsgi/apps-available 中的所有网站都有 nginx 和 uwsgi 配置)
我想编写一个 Python(或 Perl 或 bash 脚本):
每当对默认 nginx 配置发出请求时:
- 检查sites-available 中是否有匹配的nginx 配置以及apps-available 中是否有匹配的uwsgi 进程。如果是这样:
- 在已启用应用程序中创建指向 uwsgi 记录的链接并启动服务
- 在启用了站点的站点中创建指向 nginx 记录的链接并重新启动 nginx
这是我目前所拥有的:
我的 /etc/nginx/conf.d/default_site.conf:
server {
listen 80 default_server;
listen 443 ssl default_server;
server_name backup.server.com;
location / {
include uwsgi_params;
uwsgi_modifier1 5;
#SOCKET for the app
uwsgi_pass unix:///var/run/uwsgi/app/backupprocessor/socket;
add_header Vary Accept-Encoding;
add_header Cache-Control private;
}
}
我有一个启用网站的 bash 脚本(我的问题中的第 2 + 3 点)
#!/bin/sh
if [ $# -ne 1 ]; then
echo "Wrong ammount of arguments supplied"
echo "Usage: ./enable_website.sh website_name"
exit 33
fi
WEBSITE_NAME="$1"
echo "Linking apps-available/${WEBSITE_NAME}.ini to apps-enabled/${WEBSITE_NAME}.ini"
sudo ln -s /etc/uwsgi/apps-available/${WEBSITE_NAME}.ini /etc/uwsgi/apps-enabled/${WEBSITE_NAME}.ini
echo "Linking sites-available/${WEBSITE_NAME} to sites-enabled/${WEBSITE_NAME}"
sudo ln -s /etc/nginx/sites-available/${WEBSITE_NAME} /etc/nginx/sites-enabled/${WEBSITE_NAME}
echo "Starting website ..."
sudo service uwsgi restart ${WEBSITE_NAME}
echo "Started !"
我还配置了一个带有 Python Hello Word 应用程序的 uWSGI,我想将其用于第 1 点,但我的方法可能是错误的。 (nginx 甚至无法在端口 80 上启动它......这就是请求的来源)
测试:
uwsgi --http-socket 127.0.0.1:80 --wsgi-file app.py --master --processes 4 --threads 2 --stats 127.0.0.1:9191
得到:
probably another instance of uWSGI is running on the same address (127.0.0.1:80).
bind(): Address already in use [core/socket.c line 769]
任何关于我的选择的帮助/建议将不胜感激!圣诞快乐!!
【问题讨论】: