gpt4 book ai didi

nginx - 以零停机时间更新容器中的 Nginx 配置文件

转载 作者:行者123 更新时间:2023-12-01 05:48:03 25 4
gpt4 key购买 nike

我们使用 Nginx 作为 docker-cloud 服务的反向代理。每当新服务部署在 docker cloud 上或服务在 docker-cloud 上获得新 url 时,都会执行一个脚本来更新 Nginx 的配置文件。

Nginx 和脚本已分别在 docker 容器中运行。
Nginx 配置文件挂载在 Host(ECS) 中。使用脚本更新配置文件后,需要重新加载 Nginx 才能应用更改。

首先,我想知道这是否是更新 Nginx 配置文件的最佳方式,以及在不停机的情况下重新加载 Nginx 的最佳方式是什么?

每次更新后我要重新创建 Nginx 容器吗?如果是这样,如何?

或者可以通过监视配置文件中的更改(使用脚本)从主机重新加载 Nginx 并使用以下命令重新加载它?

docker exec NginxcontainerID | nginx -s reload    

最佳答案

Shall I recreate the Nginx container after each update? if so, how?



不,大部分时间您只需要重新加载 nginx 服务。
您可以使用:
docker exec nginxcontainername/id nginx -s reload

或者
docker kill -s HUP nginxcontainername/id 

另一种选择 将使用自定义图像并检查 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包裹。

关于nginx - 以零停机时间更新容器中的 Nginx 配置文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42598542/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com