我想在 Capistrano 部署上创建一个任务,将我的公共 IP 放在我的 NGINX 服务器的地理模块配置中,而无需重新启动 NGINX,可以吗?例如,我的 /etc/nginx/nginx.conf:
geo $geo {
default no;
include /home/deploy_user/appname/shared/ip_list;
}
我将在部署期间提供文件 /home/deploy_user/appname/shared/ip_list。我需要这个,因为我的公共 IP 可能会多次更改。
问候,若昂
答案1
由于您的配置文件位于 /etc/nginx,我假设您使用某种基于 Debian 的 Linux 版本。
我基本上会在部署时备份并替换 ip_list,如下所示:
cd /home/deploy_user/appname/shared/ip_list
mv ip_list ip_list`date +"%Y%m%d%H%M%S"`
cp <path to new ip_list> ip_list
然后,您可以通过执行以下操作将配置重新加载到 Nginx 中,而不会丢失任何请求:
sudo service nginx reload
或者sudo /etc/init.d/nginx reload
。
这将在完成时杀死所有使用旧配置的 worker,并启动所有使用新配置的新 worker。这样你就不会丢失任何请求
只需确保您能够以 Capistrano 提升的权限运行您的命令,因为这对于重新加载/重新启动 Nginx 是必要的。