Jak przetestować konfigurację Nginx przed jego restartem

Modyfikując ustawienia w Nginx dość powszechnym zachowaniem jest jego restart bez uprzedniego sprawdzenia konfiguracji. Może prowadzić to do sytuacji w której zawartość wszystkich stron nie jest serwowana i trzeba możliwie szybko znaleźć i naprawić błąd.

Chesz przetestować działanie poniższych instrukcji, a nie masz dostępu do serwera Linuxowego? Po rejestacji na DigitalOcean otrzymasz 100 dolarów do wykorzystania w ciągu 60 dni, a z przyjaznym interfejsem uruchomisz ulubioną dystrybucję w ciągu paru minut.

Jaka jest różnica między przeładowaniem (reload) a ponownym uruchomieniem (restartem) Nginxa?

Korzystanie z opcji reload jest bezpieczniejsze albowiem automatycznie przeprowadzane jest sprawdzenie poprawności konfiguracji oraz, jeśli wszystko jest w porządku, jej załadowanie. Następnie uruchamiane są nowe procesy obsługujące żądania HTTP przy jednoczesnym zamknięciu starych.

Z drugiej strony, przy czym zachowanie to może zależeć od systemu, w przypadku błędu konfiguracji użytkownik nie jest o tym informowany. Ujawni się on dopiero podczas restartu usługi bądź gdy będzie ona uruchamiana przy starcie serwera.

Restart polega na zatrzymaniu głównego procesu Nginx oraz obsługujących żądania HTTP, a następnie uruchomienie ich na nowo. O ile zatrzymanie procesu zawsze się uda, to błędy w konfiguracji uniemożliwią jego ponowne uruchomienie.

Choć zawsze warto wpierw korzystać z przeładowania Nginxa to istnieją przypadki w których konieczny jest restart.

Niezależnie czy stosowane będzie przeładowanie bądź ponowne uruchomienie warto przed tą operacją skorzystać z polecenia sudo nginx -t które wywoła sprawdzenie konfiguracji serwera oraz wypisze ewentualne błędy.

Można także uruchamiać reload bądź restart jedynie w sytuacji gdy sprawdzenie ustawień się powiedzie. W tym celu należy użyć sudo nginx -t && sudo systemctl reload nginx bądź sudo nginx -t && sudo systemctl restart nginx.

radek@centos.local:~$ sudo nginx -t && sudo systemctl restart nginx
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
radek@centos.local:~$