
В нашей основной статье мы кратко описали, что такое nginx, а также как установить и настроить его в вашей системе. В следующем руководстве мы предоставим вам обзор основных команд и опций конфигурации современного веб-серверного программного обеспечения.
Центральный блок управления: nginx.conf
Nginx основан на событиях и поэтому работает иначе, чем Apache. Отдельные запросы классифицируются не как новые рабочие процессы (для которых должны быть загружены все модули), а как события. Эти события делятся на существующие рабочие процессы, которые обслуживаются основным главным процессом. Конфигурационный файл nginx.conf определяет количество рабочих процессов, которые в конечном итоге существуют, а также то, как разделяются запросы сервера (т.е. события). Вы можете найти их в этих файлах /usr/local/nginx/conf, /etc/nginx или /usr/local/etc/nginx.
Управление процессами и принятие новых конфигураций
Nginx запускается автоматически после установки, но вы можете инициировать его работу с помощью следующей команды:
sudo service nginx start
После запуска веб-серверного ПО вы можете управлять им, обращаясь к процессам (в первую очередь к главному процессу) с помощью параметра -s и определенного сигнала. Синтаксис соответствующих команд относительно непритязателен:
sudo nginx -s signal
Для ‘signal’ у вас есть следующие четыре возможности:
- stop: nginx завершается немедленно.
- quit: nginx завершается после ответа на все активные запросы.
- reload: конфигурационный файл перезагружается.
- reopen: перезапускаются лог-файлы.
Опция reload, которая используется для перезагрузки конфигурационного файла, является хорошим способом внести изменения без необходимости завершать работу веб-сервера и впоследствии запускать его заново. В любом случае, чтобы принять изменения, вы должны решить, хотите ли вы полностью перезапустить сервер или просто перезагрузить nginx. Если вы выбрали последний вариант и выполнили приведенную ниже команду, то основной процесс получает указание применить изменения к файлу nginx.conf:
sudo nginx -s reload
Для этого сначала проверяется правильность синтаксиса. При положительном результате новые настройки позволяют основному процессу запустить новые рабочие процессы и одновременно остановить старые. Если синтаксис не может быть проверен, то сохраняется старый статус конфигурации. Все активные рабочие процессы завершаются, как только все активные запросы будут обработаны.
Кроме того, вы можете нацелиться на процессы nginx с помощью таких инструментов, как kill. Все, что вам нужно, это соответствующий идентификатор процесса, который можно найти в файле nginx.pid в каталоге /usr/local/nginx/logs или в каталоге /var/run. Если, например, главный процесс имеет ID 1628, его можно завершить последовательным сигналом kill и quit.
sudo kill -s quit 1628
Вы также можете использовать служебную программу ps, чтобы вывести список всех запущенных процессов nginx:
sudo ps -ax | grep nginx
Как регулировать доставку статического содержимого
Скорее всего, вы используете свой веб-сервер для доставки таких файлов, как изображения, видео или статический HTML-контент. Для повышения эффективности работы хорошо бы выбрать разные локальные каталоги для разных типов контента. Начните с создания каталога образцов /data/html и поместите туда пример HTML-документа index.html, а также создайте папку /data/images с несколькими примерами изображений.
На следующем этапе эти две директории необходимо внести в конфигурационный файл, поместив обе в директиву server block, которая, в свою очередь, является поддирективой директивы HTTP block. По умолчанию уже установлены различные директивы, которые вы можете сначала отключить с помощью (off). Затем просто создайте отдельный оператор блока сервера:
http {
server {
}
}
В этом серверном блоке следует указать две директории, содержащие изображения и HTML-документы. Соответствующий результат выглядит следующим образом:
server {
location / {
root /data/html;
}
location /images/ {
root /data;
}
}
Эта конфигурация является настройкой по умолчанию для сервера, который прослушивает порт 80 и доступен через локальный хост. Все запросы, URI которых начинаются с /images/, теперь будут запрашивать файлы из каталога /data/images. Если соответствующего файла не существует, появится сообщение об ошибке. Все события nginx, URI которых не начинаются с /images/, передаются в каталог /data/html.
Не забудьте перезагрузить или перезапустить nginx, чтобы применить изменения.
Настройка простого прокси-сервера nginx
Nginx очень часто используется (вместо настоящего сервера) для запуска прокси-сервера для приема входящих запросов. Он фильтрует их по различным критериям, перенаправляет и доставляет соответствующие ответы клиентам. Особенно популярны кэш-прокси. Они напрямую доставляют локально хранящийся статический контент и пересылают все дальнейшие запросы только на сервер. Также очень распространены прокси-серверы, которые отфильтровывают небезопасные или нежелательные соединения. Ниже приведен пример кэш-прокси, который извлекает запрашиваемые изображения из локального каталога и перенаправляет все дальнейшие запросы на веб-сервер.
Для первого шага необходимо определить главный сервер в файле nginx.conf:
server {
listen 8080;
root /data/up1;
location / {
}
}
В отличие от предыдущего примера, здесь используется директива list, поскольку для входящих запросов будет использоваться порт 8080 (а не стандартный порт). Также необходимо создать целевой каталог /data/up1 и поместить туда страницу index.html.
Во-вторых, определяется прокси-сервер и его функция по доставке содержимого изображений. Для этого используется директива ProxyPass, включающая сведения о протоколе основного сервера (http), имени (localhost) и порте (8080):
server {
location / {
proxy_pass http://localhost:8080;
}
location ~ .(gif|jpg|png) $ {
root /data/images;
}
}
Второй location-блок предписывает прокси-серверу самому отвечать на все запросы, если их URI заканчиваются типичными файлами изображений, такими как .gif, .jpg и .png, извлекая соответствующее содержимое из локального каталога /data/images. Все остальные запросы перенаправляются на главный сервер. Как и в случае с предыдущими настройками, сохраните свой прокси-сервер изображений с помощью сигнала reload основному процессу или перезапуском nginx. Дополнительные директивы для сложных настроек прокси вы можете найти в официальном онлайн руководстве nginx.