Конфигурирование Nginx






Продолжая серию статей, посвящённую популярному веб-серверу Nginx, сегодня я на примере базовой конфигурации , поставляемой в комплекте с Debian 5.0 Lenny, хочу рассмотреть основы конфигурирования Nginx. Как было сказано в предыдущей статье, конфигурационный файл Nginx в Debian по умолчанию располагается в /etc/nginx/nginx.conf. Вообще, простота и понятность синтаксиса конфиг-файла Nginx, на мой взгляд, являются одной из сильных его сторон. Прежде чем двигаться дальше, давайте посмотрим и построчно разберём содержимое файла конфигурации Nginx, предлагаемое разработчиками дистрибутива.


Конфигурационный файл состоит из параметров, расположенных вне секций и из секций параметров, обрамлённых фигурными скобками. В приведённом выше примере вы можете увидеть две секции: events и http.

Глобальные параметры

Опция user используется для того, чтобы сообщить серверу, чей UID/GID он должен использовать после старта, если был запущен от имени root. Если вы не определите значение этой опции, Nginx будет использовать nobody/nobody. Если же в вашей системе существует отдельная учётная запись для организации доступа к веб-содержимому, как это сделано во многих популярных дистрибутивах, то лучше использовать её. Само собой разумеется, крайне нежелательно разрешать работу веб-сервера от имени root — сие есть очень небезопасно. Вообще опция user принимает два параметра: первый — это имя учётной записи, второй — имя группы. Если имя группы не указать, то Nginx будет использовать в качестве имени группы значение имени пользователя. Таким образом, в приведённом выше примере, Nginx работает с UID и GID www-data.

Значение параметра worker_processes определяет количество запускаемых рабочих процессов Nginx. Увеличивать значение этого параметра есть смысл лишь в том случае, когда у вас Nginx работает на многопроцессорной системе либо в системе производится много операций ввода/вывода, что приводит к увеличению времени отклика рабочего процесса Nginx. Также значение этого параметра влияет на предел одновременных подключений, который определяется путём умножения значения этого параметра на значение параметра worker_connections в секции events.

Значение параметра error_log определяет местоположение файла протокола ошибок работы сервера и FastCGI, также уровень серьёзности сообщений, попадающих в этот протокол. Первым значением параметра error_log должен быть путь к файлу, а вторым, необязательным, — уровень. Уровень серьёзности может быть одним из (в порядке увеличения серьёзности): debug, info, notice, warn, error, crit. Также обратите внимание, что использование этого параметра разрешено не только в общей секции, а и в секциях http и server. По умолчанию значение параметра error_log различно в разных секциях. В общей секции — error, в секциях http и server — crit. При изменении значения этого параметра не забывайте, что снижение уровня серьёзности повлечёт за собой более интенсивный ввод-вывод со стороны сервера, что может негативно сказаться на производительности.

Значение параметра pid определяет местоположение файла, содержащего идентификатор процесса запущенного сервера. Используется внешними сценариями и программами при необходимости, поэтому менять или удалять его не стоит, если не знаете, что делаете.

Секция events

В секции events настраивается подведение Nginx относительно сетевых соединений.

В конфигурации по умолчанию определён лишь один параметр, упоминавший выше — worker_connections. Как уже говорилось, значение этого параметра помноженное на значение параметра worker_processes определяет максимально возможное количество одновременных соединений к серверу.

Секция http

Первое, что мы видим в этой секции — это директива include, сообщающая серверу о необходимости считать часть конфигурации из внешнего файла или нескольких файлов. Как видно в конце секции http, в качестве параметра директиве include можно передавать путь с использованием масок файлов. Директиву include можно применять в любом месте файла конфигурации и это даёт дополнительную гибкость и удобство администрирования сервера.

При помощи опции default_type задаётся MIME-тип по умолчанию, коорый будет передавать сервер клиенту, если этот тип не удалось определить. Опцию default_type можно использовать в контексте секций http, server и location.

Параметр access_log определяет местоположение и формат лог-файла доступа к содержимому. Если формат не определён, о будет использоваться предопределённый формат combined, что и имеет место быть в приведённом примере. Подробнее о создании своих форматов лог-файлов и их использовании можно прочесть на соответствующей вики-странице проекта. Опция access_log может применяться в контексте секций http, server и location.

Параметр sendfile включает или отключает использование сервером одноимённого системного вызова. Включение этого параметра увеличивает производительность Nginx за счёт использования более эффективного способа ввода-вывода. Опция sendfile может применяться в контексте секций http, server и location.

Включение опции tcp_nopush заставляет Nginx пытаться отправлять HTTP-заголовки в одном пакете. Имейте ввиду, что смысл в этой опции есть лишь тогда, когда включена опция sendfile. Опция tcp_nopush может применяться в контексте секций http, server и location.

keepalive_timeout регулирует время, в течение которого Nginx будет держать открытым постоянное соединение, если таковое было запрошено со стороны клиента. Не стоит ставить его слишком большим, поскольку это может повлечь за собой увеличение расхода ресурсов системы. По умолчанию значение параметра равно 75 секундам. Опция keepalive_timeout может применяться в контексте секций http, server и location.

Параметр tcp_nodelay влияет разрешает или запрещает использование сервером опции сокета TCP_NODELAY при работе с постоянными соединениями. Опция tcp_nodelay может применяться в контексте секций http, server и location.

Параметр gzip управляет включением/отключением сжатия сервером данных, передаваемых клиенту. Включение этой опции увеличивает нагрузку на центральный процессор системы, однако позволяет существенно сократить объём передаваемых данных. Опция gzip может применяться в контексте секций http, server и location.

В следующей статье, посвящённой Nginx, мы рассмотрим базовые  принципы использования секций server и location, упомянутые в сегодняшней заметке.

tcp_nopush