我们正在使用Nginx作为对接云服务的反向代理。每当新服务部署到docker云中或服务在docker云上获得新url时,都会实现一个脚本来更新Nginx的配置文件。
Nginx和脚本分别在一个码头容器中运行。Nginx配置文件被挂载在主机(ECS)中。使用脚本更新配置文件后,它需要重新加载Nginx,以便应用更改。
首先,我想知道这是否是更新Nginx配置文件的最佳方式,以及在不停机的情况下重新加载Nginx的最佳方法是什么?
每次更新后,我应该重新创建Nginx容器吗?如果是,怎么做?
或者,通过监视配置文件中的更改(使用脚本)重新加载Nginx并使用下面的命令重新加载Nginx也可以吗?
docker exec NginxcontainerID | nginx -s reload 发布于 2017-03-05 06:44:36
每次更新后,我应该重新创建Nginx容器吗?如果是,怎么做?
不,你只需要在大部分时间重新加载nginx服务。您可以使用:
docker exec nginxcontainername/id nginx -s reload或
docker kill -s HUP nginxcontainername/id 的另一个选项是使用自定义映像并检查nginx、校验和,并在nginx更改时重新加载nginx。示例脚本:
nginx "$@"
oldcksum=`cksum /etc/nginx/conf.d/default.conf`
inotifywait -e modify,move,create,delete -mr --timefmt '%d/%m/%y %H:%M' --format '%T' \
/etc/nginx/conf.d/ | while read date time; do
newcksum=`cksum /etc/nginx/conf.d/default.conf`
if [ "$newcksum" != "$oldcksum" ]; then
echo "At ${time} on ${date}, config file update detected."
oldcksum=$newcksum
nginx -s reload
fi
done您需要安装inotifywait包。
https://stackoverflow.com/questions/42598542
复制相似问题