2016-12-08 82 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