Настройка Nginx
Секция статьи "Настройка Nginx"Веб-сервер Nginx был разработан в 2004 году Игорем Сысоевым для работы со статическим контентом и оказался очень быстрым. Благодаря модульности, Nginx постоянно обрастал функциональностью, и сейчас может использоваться практически для любой задачи бэкенда.
Вы можете установить Nginx с помощью официальной инструкции.
Структура файлов конфигурации
Секция статьи "Структура файлов конфигурации"С помощью директив описывается конфигурация и подключаются модули. Директивы делятся на простые и блочные. Например, с помощью простой директивы listen 8080;
веб-сервер понимает, что надо прослушивать порт 8080
, на который будут приходить запросы от клиентов. Пример сложной директивы:
server { listen 8080; root /data/up1; location / { }}
server { listen 8080; root /data/up1; location / { } }
Директива server
описывает поведение Nginx. Согласно конфигурации веб-сервер должен слушать порт 8080 на компьютере, номер которого задаётся директивой listen
, и отдавать статические файлы из директории
при обращении к корневой странице сайта (за это отвечает директива root
). Внутри фигурных скобок директивы становятся зависимыми от контекста. Контекст location
означает, что директивы внутри фигурных скобок описывают действия сервера при обращении к корневой директории сайта. Доступны несколько контекстов: events, http, server и location.
Чтобы перенаправить часть запросов по URI
(подробнее об этом в статье «Работа с сетью») приложению или службе, запущенной на компьютере и прослушивающей порт 8080, а часть запросов по пути
в директорию
, нужно описать это в конфигурации:
server { location / { proxy_pass http://localhost:8080; } location /images/ { root /data; }}
server { location / { proxy_pass http://localhost:8080; } location /images/ { root /data; } }
Можно фильтровать по типу файлов, используя регулярные выражения:
location ~ \.(gif|jpg|png)$ { root /data/images;}
location ~ \.(gif|jpg|png)$ { root /data/images; }
Если нужно, чтобы часть запросов перенаправлялось к интерпретатору (например, PHP), нужно описать это так:
server { location / { fastcgi_pass localhost:9000; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; fastcgi_param QUERY_STRING $query_string; } location ~ \.(gif|jpg|png)$ { root /data/images; }}
server { location / { fastcgi_pass localhost:9000; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; fastcgi_param QUERY_STRING $query_string; } location ~ \.(gif|jpg|png)$ { root /data/images; } }
В сложной директиве location
описывается поведение Nginx для всех обращений к корневой директории сайта. Веб-сервер ожидает, что соответствующий модуль ngx
прослушивает порт 9000 на этом же компьютере.
Каждый модуль имеет набор простых директив, которые можно использовать в конфигурации Nginx. fastcgi
, fastcgi
входят в список таких директив для модуля ngx
. В примере этот модуль принимает HTTP-запросы клиента, пересланные Nginx, исполняет PHP-скрипт с именем fastcgi
в директории document
и GET-параметры query
для обработки этих запросов. Модуль передаёт HTTP-ответ веб-серверу Nginx, который в свою очередь посылает их клиенту.
Вторая сложная директива location
отдаёт клиенту статические файлы картинок напрямую, минуя модуль ngx
. Символ
означает, что за ним следует регулярное выражение. В примере регулярное выражение проверяет запрошенные клиентом файлы по маске. Если файлы удовлетворяют условию, то они передаются согласно запрошенному пути из каталога
на сервере.
Управление конфигурацией
Секция статьи "Управление конфигурацией"Запустить Nginx можно напрямую, используя исполняемый файл, или в качестве службы в операционной системе.
Можно протестировать конфигурацию с помощью ключа
:
nginx -t
nginx -t
Если конфигурационный файл написан правильно, то Nginx сообщит об этом в консоль, равно как и укажет на ошибки при их наличии.
Веб-сервером Nginx можно управлять, вызывая запущенный процесс с параметром
. Используйте следующий синтаксис:
nginx -s <signal>
nginx -s <signal>
Можно использовать сигналы из списка:
stop
— быстро завершить;
quit
— плавно завершить;
reload
— перезагрузить конфигурационный файл;
reopen
— открыть лог-файлы заново.
Можно получить конфигурационный файл с помощью сервиса Mozilla SSL Configuration Generator. Попробовать сгенерировать разные конфигурации позволит разобраться с конкретными настройками детальнее.
На практике
Секция статьи "На практике"Управление и мониторинг
Секция статьи "Управление и мониторинг"С помощью сигналов в Unix-подобных операционных системах можно управлять большинством системных служб. Веб-сервер — не исключение.
Если Nginx уже запущен, можно получить отчёт о состоянии командой:
sudo systemctl status nginx
sudo systemctl status nginx
Остановить Nginx можно командой:
sudo systemctl stop nginx
sudo systemctl stop nginx
Запустить Nginx можно командой:
sudo systemctl start nginx
sudo systemctl start nginx
Для перезапуска веб-сервера, например, после смены конфигурации, можно использовать две команды:
sudo systemctl reload nginxsudo systemctl restart nginx
sudo systemctl reload nginx sudo systemctl restart nginx
Первый способ лучше, поскольку позволяет сначала остановить все задачи Nginx, а уже потом перезапустить веб-сервер. Вторая команда обрывает текущие задачи и сразу перезагружает Nginx.