2016-12-08 55 views
0

目前正在设置一个nginx反向代理负载平衡各种各样的域名。Nginx Reload配置最佳实践

nginx的配置文件是由程序生成的,可能会经常发生变化(即添加或删除HTTP/HTTPS服务器)

我使用:

nginx -s reload 

告诉nginx的重新读取配置。

主要nginx.conf文件包含一个包括所有生成的配置文件这样的:

http { 
    include /volumes/config/*/domain.conf; 
} 

包括配置文件可能是这样的:

server { 
    listen 80; 
    listen [::]:80; 
    server_name mydomain.com; 
    location/{ 
    try_files $uri /404.html /404.htm =404; 
    root /volumes/sites/mydomain; 
    } 
} 

我的问题:

运行是否健康或有害:

nginx -s reload 

每分钟多次通知nginx考虑配置上的修改? 这意味着什么样的性能打击?

编辑:我想重新提出这个问题:我们如何能够在没有大的性能影响的情况下,经常动态地更改nginx的配置?

回答

0

而不是每分钟重新加载nginx几次,我会建议观看配置文件,并只在保存更改时执行重新加载;你可以使用inotifywait(可通过inotify-tools包),用下面的命令:

while inotifywait -e close_write /etc/nginx/sites-enabled/default; do service nginx reload; done

+0

这是我能想到的最好的解决方案,但如果配置确实需要每分钟多次更改一次,该怎么办? – Crappy

+0

'close_wait'不会捕获'delete'事件,这并不意味着文件被写入。 close_write =>“在可写模式下打开后,观看目录中的文件或文件被关闭,这并不一定意味着文件被写入。“ – alindt

0

我会用inotifywatch有超时的目录包含生成的conf文件并重新加载nginx只有一些被修改/创建/在所述目录中删除:

-t,--timeout
只收听指定的秒数。如果未指定,则inotifywatch将收集统计信息 ,直到通过(例如) 在控制台按CONTROL-C接收到中断信号。

while true; do 
    if [[ "$(inotifywatch -e modify,create,delete -t 30 /volumes/config/ 2>&1)" =~ filename ]]; then 
     service nginx reload; 
    fi; 
done 

这样你设立最低计时器之后,重装将于你不调用之间丢失任何手表到inotifywait

+0

如果我没有记错的话,仍可能引起的nginx重新加载多次一分钟,如果配置没有真正得到经常更新的,我们知道什么样的性能损失,我们在看什么? – Crappy

+0

您可以将超时更改为60年代或任何你认为可以接受,它会重新加载定时器每次最多一次,只有当CONFIGS在这段时间发生变化。你真的改变CONFIGS经常?应该不会出现大的一个打击这一点。 – alindt

+0

也许我在看从错误的角度来看这个问题,但我需要能够改变nginx的配置非常非常频繁(不伤运行时的性能)理想的10X +每分钟 – Crappy