Модуль ngx_http_fastcgi_module
- Пример конфигурации
- Директивы
- fastcgi_allow_upstream
- fastcgi_bind
- fastcgi_bind_dynamic
- fastcgi_buffer_size
- fastcgi_buffering
- fastcgi_buffers
- fastcgi_busy_buffers_size
- fastcgi_cache
- fastcgi_cache_background_update
- fastcgi_cache_bypass
- fastcgi_cache_key
- fastcgi_cache_lock
- fastcgi_cache_lock_age
- fastcgi_cache_lock_timeout
- fastcgi_cache_max_range_offset
- fastcgi_cache_methods
- fastcgi_cache_min_uses
- fastcgi_cache_path
- fastcgi_cache_purge
- fastcgi_cache_revalidate
- fastcgi_cache_use_stale
- fastcgi_cache_valid
- fastcgi_catch_stderr
- fastcgi_connect_timeout
- fastcgi_force_ranges
- fastcgi_hide_header
- fastcgi_ignore_client_abort
- fastcgi_ignore_headers
- fastcgi_index
- fastcgi_intercept_errors
- fastcgi_keep_conn
- fastcgi_limit_rate
- fastcgi_max_temp_file_size
- fastcgi_next_upstream
- fastcgi_next_upstream_timeout
- fastcgi_next_upstream_tries
- fastcgi_no_cache
- fastcgi_param
- fastcgi_pass
- fastcgi_pass_header
- fastcgi_pass_request_body
- fastcgi_pass_request_headers
- fastcgi_read_timeout
- fastcgi_request_buffering
- fastcgi_request_dynamic
- fastcgi_send_lowat
- fastcgi_send_timeout
- fastcgi_socket_keepalive
- fastcgi_split_path_info
- fastcgi_store
- fastcgi_store_access
- fastcgi_temp_file_write_size
- fastcgi_temp_path
- Параметры, передаваемые FastCGI-серверу
- Встроенные переменные
Модуль ngx_http_fastcgi_module позволяет передавать запросы FastCGI-серверу.
Пример конфигурации
location / {
fastcgi_pass localhost:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME /home/www/scripts/php$fastcgi_script_name;
fastcgi_param QUERY_STRING $query_string;
fastcgi_param REQUEST_METHOD $request_method;
fastcgi_param CONTENT_TYPE $content_type;
fastcgi_param CONTENT_LENGTH $content_length;
}
Директивы
| Синтаксис: | fastcgi_allow_upstream string ...; |
|---|---|
| Значение по умолчанию: | — |
| Контекст: | http, server, location |
Эта директива появилась в версии 1.29.3.
Задаёт условия, при которых доступ к FastCGI-серверу разрешён или запрещён. Если все строковые параметры не пусты и не равны «0», доступ разрешён. Условия проверяются каждый раз перед установлением соединения с FastCGI-сервером. Значения параметров могут содержать переменные:
geo $upstream_last_addr $allow {
volatile;
10.10.0.0/24 1;
}
server {
listen 127.0.0.1:8080;
location / {
fastcgi_pass localhost:9000;
fastcgi_allow_upstream $allow;
...
}
}
Эта директива доступна в рамках нашей коммерческой подписки.
| Синтаксис: | fastcgi_bind
address
[transparent] |
off; |
|---|---|
| Значение по умолчанию: | — |
| Контекст: | http, server, location |
Эта директива появилась в версии 0.8.22.
Заставляет исходящие соединения с FastCGI-сервером устанавливаться с указанного локального IP-адреса и, при необходимости, порта (1.11.2). Значение параметра может содержать переменные (1.3.12). Специальное значение off (1.3.12) отменяет действие директивы fastcgi_bind, унаследованной с предыдущего уровня конфигурации, что позволяет системе автоматически назначать локальный IP-адрес и порт.
Параметр transparent (1.11.0) позволяет устанавливать исходящие соединения с FastCGI-сервером с нелокального IP-адреса, например с реального IP-адреса клиента:
fastcgi_bind $remote_addr transparent;
Чтобы этот параметр работал, обычно необходимо запускать рабочие процессы nginx с привилегиями суперпользователя. В Linux этого не требуется (1.13.8), так как при указании параметра transparent рабочие процессы наследуют возможность CAP_NET_RAW от главного процесса. Также необходимо настроить таблицу маршрутизации ядра для перехвата сетевого трафика от FastCGI-сервера.
| Синтаксис: | fastcgi_bind_dynamic on | off; |
|---|---|
| Значение по умолчанию: | fastcgi_bind_dynamic off; |
| Контекст: | http, server, location |
Эта директива появилась в версии 1.29.3.
При включении операция bind выполняется при каждой попытке установить соединение.
Эта директива доступна в рамках нашей коммерческой подписки.
| Синтаксис: | fastcgi_buffer_size size; |
|---|---|
| Значение по умолчанию: | fastcgi_buffer_size 4k|8k; |
| Контекст: | http, server, location |
Задаёт size буфера, используемого для чтения первой части ответа, полученного от FastCGI-сервера. Эта часть обычно содержит небольшой заголовок ответа; если его размер превышает размер буфера, ответ считается недопустимым. По умолчанию размер буфера равен размеру одной страницы памяти. В зависимости от платформы он составляет 4K или 8K. Его можно уменьшить.
| Синтаксис: | fastcgi_buffering on | off; |
|---|---|
| Значение по умолчанию: | fastcgi_buffering on; |
| Контекст: | http, server, location |
Эта директива появилась в версии 1.5.6.
Включает или отключает буферизацию ответов FastCGI-сервера.
При включённой буферизации nginx как можно быстрее получает ответ от FastCGI-сервера и сохраняет его в буферах, заданных директивами fastcgi_buffer_size и fastcgi_buffers. Если весь ответ не помещается в памяти, его часть может быть сохранена во временный файл на диске. Запись во временные файлы регулируется директивами fastcgi_max_temp_file_size и fastcgi_temp_file_write_size.
При отключённой буферизации ответ передаётся клиенту синхронно, сразу после получения. nginx не пытается прочитать весь ответ от FastCGI-сервера. Максимальный объём данных, который nginx может получить от сервера за один раз, задаётся директивой fastcgi_buffer_size.
Буферизацию также можно включить или отключить, передав в поле заголовка ответа «X-Accel-Buffering» значение «yes» или «no». Эту возможность можно отключить с помощью директивы fastcgi_ignore_headers.
| Синтаксис: | fastcgi_buffers number size; |
|---|---|
| Значение по умолчанию: | fastcgi_buffers 8 4k|8k; |
| Контекст: | http, server, location |
Задаёт number и size буферов, используемых для чтения ответа FastCGI-сервера при одном соединении. По умолчанию размер буфера равен размеру одной страницы памяти. В зависимости от платформы он составляет 4K или 8K.
| Синтаксис: | fastcgi_busy_buffers_size size; |
|---|---|
| Значение по умолчанию: | fastcgi_busy_buffers_size 8k|16k; |
| Контекст: | http, server, location |
При включённой буферизации ответов FastCGI-сервера ограничивает общий size буферов, которые могут быть заняты отправкой ответа клиенту, пока ответ ещё не прочитан полностью. Остальные буферы в это время могут использоваться для чтения ответа и, при необходимости, для записи его части во временный файл. По умолчанию size ограничено размером двух буферов, заданных директивами fastcgi_buffer_size и fastcgi_buffers.
| Синтаксис: | fastcgi_cache zone | off; |
|---|---|
| Значение по умолчанию: | fastcgi_cache off; |
| Контекст: | http, server, location |
Задаёт зону общей памяти, используемую для кэширования. Одна и та же зона может использоваться в нескольких местах. Значение параметра может содержать переменные (1.7.9). Параметр off отключает кэширование, унаследованное с предыдущего уровня конфигурации.
| Синтаксис: | fastcgi_cache_background_update on | off; |
|---|---|
| Значение по умолчанию: | fastcgi_cache_background_update off; |
| Контекст: | http, server, location |
Эта директива появилась в версии 1.11.10.
Разрешает запуск фонового подзапроса для обновления просроченного элемента кэша, пока клиенту возвращается устаревший кэшированный ответ. Обратите внимание, что необходимо разрешить использование устаревшего кэшированного ответа во время его обновления.
| Синтаксис: | fastcgi_cache_bypass string ...; |
|---|---|
| Значение по умолчанию: | — |
| Контекст: | http, server, location |
Задаёт условия, при которых ответ не будет получен из кэша. Если хотя бы одно значение строковых параметров не пусто и не равно «0», ответ не будет получен из кэша:
fastcgi_cache_bypass $cookie_nocache $arg_nocache$arg_comment; fastcgi_cache_bypass $http_pragma $http_authorization;
Может использоваться вместе с директивой fastcgi_no_cache.
| Синтаксис: | fastcgi_cache_key string; |
|---|---|
| Значение по умолчанию: | — |
| Контекст: | http, server, location |
Задаёт ключ кэширования, например
fastcgi_cache_key localhost:9000$request_uri;
| Синтаксис: | fastcgi_cache_lock on | off; |
|---|---|
| Значение по умолчанию: | fastcgi_cache_lock off; |
| Контекст: | http, server, location |
Эта директива появилась в версии 1.1.12.
Если директива включена, одновременно только одному запросу разрешается заполнить новый элемент кэша, определяемый согласно директиве fastcgi_cache_key, путём отправки запроса FastCGI-серверу. Другие запросы для того же элемента кэша будут ждать появления ответа в кэше или снятия блокировки этого элемента в течение времени, заданного директивой fastcgi_cache_lock_timeout.
| Синтаксис: | fastcgi_cache_lock_age time; |
|---|---|
| Значение по умолчанию: | fastcgi_cache_lock_age 5s; |
| Контекст: | http, server, location |
Эта директива появилась в версии 1.7.8.
Если последний запрос, отправленный FastCGI-серверу для заполнения нового элемента кэша, не завершился в течение указанного time, FastCGI-серверу может быть отправлен ещё один запрос.
| Синтаксис: | fastcgi_cache_lock_timeout time; |
|---|---|
| Значение по умолчанию: | fastcgi_cache_lock_timeout 5s; |
| Контекст: | http, server, location |
Эта директива появилась в версии 1.1.12.
Задаёт время ожидания для fastcgi_cache_lock. По истечении time запрос будет отправлен FastCGI-серверу, однако ответ не будет кэширован.
До версии 1.7.8 ответ мог быть кэширован.
| Синтаксис: | fastcgi_cache_max_range_offset number; |
|---|---|
| Значение по умолчанию: | — |
| Контекст: | http, server, location |
Эта директива появилась в версии 1.11.6.
Задаёт смещение в байтах для запросов диапазона байтов. Если диапазон выходит за пределы смещения, запрос диапазона будет передан FastCGI-серверу, а ответ не будет кэширован.
| Синтаксис: | fastcgi_cache_methods
GET |
HEAD |
POST
...; |
|---|---|
| Значение по умолчанию: | fastcgi_cache_methods GET HEAD; |
| Контекст: | http, server, location |
Эта директива появилась в версии 0.7.59.
Если метод клиентского запроса указан в этой директиве, ответ будет кэширован. Методы «GET» и «HEAD» всегда добавляются в список, хотя рекомендуется указывать их явно. См. также директиву fastcgi_no_cache.
| Синтаксис: | fastcgi_cache_min_uses number; |
|---|---|
| Значение по умолчанию: | fastcgi_cache_min_uses 1; |
| Контекст: | http, server, location |
Задаёт number запросов, после которого ответ будет кэширован.
| Синтаксис: | fastcgi_cache_path
path
[levels=levels]
[use_temp_path=on|off]
keys_zone=name:size
[inactive=time]
[max_size=size]
[min_free=size]
[manager_files=number]
[manager_sleep=time]
[manager_threshold=time]
[loader_files=number]
[loader_sleep=time]
[loader_threshold=time]
[purger=on|off]
[purger_files=number]
[purger_sleep=time]
[purger_threshold=time]; |
|---|---|
| Значение по умолчанию: | — |
| Контекст: | http |
Задаёт путь и другие параметры кэша. Данные кэша хранятся в файлах. Ключ и имя файла в кэше являются результатом применения функции MD5 к проксируемому URL. Параметр levels задаёт уровни иерархии кэша: от 1 до 3; для каждого уровня допускаются значения 1 или 2. Например, при следующей конфигурации
fastcgi_cache_path /data/nginx/cache levels=1:2 keys_zone=one:10m;
имена файлов в кэше будут выглядеть так:
/data/nginx/cache/c/29/b7f54b2df7773722d382f4809d65029c
Кэшированный ответ сначала записывается во временный файл, а затем файл переименовывается. Начиная с версии 0.8.9 временные файлы и кэш могут располагаться в разных файловых системах. Однако учтите, что в этом случае файл копируется между файловыми системами вместо дешёвой операции переименования. Поэтому рекомендуется размещать кэш и каталог временных файлов для каждой конкретной локации в одной файловой системе. Каталог временных файлов задаётся параметром use_temp_path (1.7.10). Если этот параметр опущен или имеет значение on, будет использоваться каталог, заданный директивой fastcgi_temp_path для данной локации. Если задано значение off, временные файлы будут размещаться непосредственно в каталоге кэша.
Кроме того, все активные ключи и информация о данных хранятся в зоне общей памяти, name и size которой настраиваются параметром keys_zone. В зоне размером один мегабайт может храниться около 8 тысяч ключей.
В рамках коммерческой подписки в зоне общей памяти также хранится расширенная информация о кэше, поэтому для того же количества ключей требуется задавать больший размер зоны. Например, в зоне размером один мегабайт может храниться около 4 тысяч ключей.
Кэшированные данные, к которым не обращались в течение времени, указанного параметром inactive, удаляются из кэша независимо от их актуальности. По умолчанию inactive равен 10 минутам.
Специальный процесс «менеджер кэша» отслеживает максимальный размер кэша, заданный параметром max_size, и минимальный объём свободного места, заданный параметром min_free (1.19.1), в файловой системе с кэшем. При превышении размера или нехватке свободного места он удаляет данные, к которым обращались реже всего. Данные удаляются итерациями, настроенными параметрами manager_files, manager_threshold и manager_sleep (1.11.5). За одну итерацию удаляется не более manager_files элементов (по умолчанию 100). Продолжительность одной итерации ограничена параметром manager_threshold (по умолчанию 200 миллисекунд). Между итерациями делается пауза, заданная параметром manager_sleep (по умолчанию 50 миллисекунд).
Через минуту после запуска активируется специальный процесс «загрузчик кэша». Он загружает в зону кэша информацию о ранее кэшированных данных, хранящихся в файловой системе. Загрузка также выполняется итерациями. За одну итерацию загружается не более loader_files элементов (по умолчанию 100). Кроме того, продолжительность одной итерации ограничена параметром loader_threshold (по умолчанию 200 миллисекунд). Между итерациями делается пауза, заданная параметром loader_sleep (по умолчанию 50 миллисекунд).
Кроме того, в рамках нашей коммерческой подписки доступны следующие параметры:
-
purger=on|off - Указывает, следует ли удалять с диска записи кэша, соответствующие маске с подстановочными знаками, с помощью очистителя кэша (1.7.12). Значение
on(по умолчанию —off) активирует процесс «очиститель кэша», который постоянно перебирает все записи кэша и удаляет записи, соответствующие маске с подстановочными знаками. -
purger_files=number - Задаёт количество элементов, проверяемых за одну итерацию (1.7.12). По умолчанию
purger_filesравно 10. -
purger_threshold=number - Задаёт продолжительность одной итерации (1.7.12). По умолчанию
purger_thresholdравно 50 миллисекундам. -
purger_sleep=number - Задаёт паузу между итерациями (1.7.12). По умолчанию
purger_sleepравно 50 миллисекундам.
В версиях 1.7.3, 1.7.7 и 1.11.10 формат заголовка кэша был изменён. После обновления до более новой версии nginx ранее кэшированные ответы будут считаться недействительными.
| Синтаксис: | fastcgi_cache_purge string ...; |
|---|---|
| Значение по умолчанию: | — |
| Контекст: | http, server, location |
Эта директива появилась в версии 1.5.7.
Задаёт условия, при которых запрос считается запросом на очистку кэша. Если хотя бы одно значение строковых параметров не пусто и не равно «0», удаляется запись кэша с соответствующим ключом кэша. Успешное выполнение операции подтверждается ответом 204 (No Content).
Если ключ кэша запроса на очистку заканчивается звёздочкой («*»), из кэша удаляются все записи, соответствующие ключу с подстановочным знаком. Однако эти записи останутся на диске, пока не будут удалены из-за отсутствия обращений, не будут обработаны очистителем кэша (1.7.12) или к ним не обратится клиент.
Пример конфигурации:
fastcgi_cache_path /data/nginx/cache keys_zone=cache_zone:10m;
map $request_method $purge_method {
PURGE 1;
default 0;
}
server {
...
location / {
fastcgi_pass backend;
fastcgi_cache cache_zone;
fastcgi_cache_key $uri;
fastcgi_cache_purge $purge_method;
}
}
Эта функция доступна в рамках нашей коммерческой подписки.
| Синтаксис: | fastcgi_cache_revalidate on | off; |
|---|---|
| Значение по умолчанию: | fastcgi_cache_revalidate off; |
| Контекст: | http, server, location |
Эта директива появилась в версии 1.5.7.
Включает повторную проверку актуальности просроченных элементов кэша с помощью условных запросов с полями заголовка «If-Modified-Since» и «If-None-Match».
| Синтаксис: | fastcgi_cache_use_stale
error |
timeout |
invalid_header |
updating |
http_500 |
http_503 |
http_403 |
http_404 |
http_429 |
off
...; |
|---|---|
| Значение по умолчанию: | fastcgi_cache_use_stale off; |
| Контекст: | http, server, location |
Определяет, в каких случаях при ошибке связи с FastCGI-сервером можно использовать устаревший кэшированный ответ. Параметры директивы соответствуют параметрам директивы fastcgi_next_upstream.
Параметр error также разрешает использовать устаревший кэшированный ответ, если для обработки запроса не удалось выбрать FastCGI-сервер.
Кроме того, параметр updating разрешает использовать устаревший кэшированный ответ, если в данный момент он обновляется. Это позволяет свести к минимуму количество обращений к FastCGI-серверам при обновлении кэшированных данных.
Использование устаревшего кэшированного ответа также можно разрешить непосредственно в заголовке ответа на заданное число секунд после того, как ответ устарел (1.11.10). Этот способ имеет более низкий приоритет, чем параметры директивы.
- Расширение «stale-while-revalidate» поля заголовка «Cache-Control» разрешает использовать устаревший кэшированный ответ, если в данный момент он обновляется.
- Расширение «stale-if-error» поля заголовка «Cache-Control» разрешает использовать устаревший кэшированный ответ в случае ошибки.
Чтобы свести к минимуму количество обращений к FastCGI-серверам при заполнении нового элемента кэша, можно использовать директиву fastcgi_cache_lock.
| Синтаксис: | fastcgi_cache_valid [code ...] time; |
|---|---|
| Значение по умолчанию: | — |
| Контекст: | http, server, location |
Задаёт время кэширования для разных кодов ответа. Например, следующие директивы
fastcgi_cache_valid 200 302 10m; fastcgi_cache_valid 404 1m;
задают время кэширования в 10 минут для ответов с кодами 200 и 302 и в 1 минуту для ответов с кодом 404.
Если указано только кэширование time
fastcgi_cache_valid 5m;
кэшируются только ответы 200, 301 и 302.
Кроме того, для кэширования любых ответов можно указать параметр any:
fastcgi_cache_valid 200 302 10m; fastcgi_cache_valid 301 1h; fastcgi_cache_valid any 1m;
Параметры кэширования также можно задавать непосредственно в заголовке ответа. Это имеет более высокий приоритет, чем задание времени кэширования с помощью директивы.
- Поле заголовка «X-Accel-Expires» задаёт время кэширования ответа в секундах. Нулевое значение отключает кэширование ответа. Если значение начинается с префикса
@, оно задаёт абсолютное время в секундах от эпохи, до которого ответ может кэшироваться. - Если в заголовке отсутствует поле «X-Accel-Expires», параметры кэширования можно задать в полях заголовка «Expires» или «Cache-Control».
- Если заголовок содержит поле «Set-Cookie», такой ответ не кэшируется.
- Если заголовок содержит поле «Vary» со специальным значением «
*», такой ответ не кэшируется (1.7.7). Если заголовок содержит поле «Vary» с другим значением, ответ кэшируется с учётом соответствующих полей заголовка запроса (1.7.7).
Обработку одного или нескольких из этих полей заголовка ответа можно отключить с помощью директивы fastcgi_ignore_headers.
| Синтаксис: | fastcgi_catch_stderr string; |
|---|---|
| Значение по умолчанию: | — |
| Контекст: | http, server, location |
Задаёт строку для поиска в потоке ошибок ответа, полученного от FastCGI-сервера. Если найдена string, считается, что FastCGI-сервер вернул недопустимый ответ. Это позволяет обрабатывать ошибки приложения в nginx, например:
location /php/ {
fastcgi_pass backend:9000;
...
fastcgi_catch_stderr "PHP Fatal error";
fastcgi_next_upstream error timeout invalid_header;
}
| Синтаксис: | fastcgi_connect_timeout time; |
|---|---|
| Значение по умолчанию: | fastcgi_connect_timeout 60s; |
| Контекст: | http, server, location |
Задаёт время ожидания установления соединения с FastCGI-сервером. Следует учитывать, что обычно это время не может превышать 75 секунд.
| Синтаксис: | fastcgi_force_ranges on | off; |
|---|---|
| Значение по умолчанию: | fastcgi_force_ranges off; |
| Контекст: | http, server, location |
Эта директива появилась в версии 1.7.7.
Включает поддержку диапазонов байтов для кэшированных и некэшированных ответов FastCGI-сервера независимо от наличия в этих ответах поля «Accept-Ranges».
| Синтаксис: | fastcgi_hide_header field; |
|---|---|
| Значение по умолчанию: | — |
| Контекст: | http, server, location |
По умолчанию nginx не передаёт клиенту поля заголовка «Status» и «X-Accel-...» из ответа FastCGI-сервера. Директива fastcgi_hide_header задаёт дополнительные поля, которые передаваться не будут. Если, напротив, требуется разрешить передачу полей, можно использовать директиву fastcgi_pass_header.
| Синтаксис: | fastcgi_ignore_client_abort on | off; |
|---|---|
| Значение по умолчанию: | fastcgi_ignore_client_abort off; |
| Контекст: | http, server, location |
Определяет, следует ли закрывать соединение с FastCGI-сервером, если клиент закрыл соединение, не дождавшись ответа.
| Синтаксис: | fastcgi_ignore_headers field ...; |
|---|---|
| По умолчанию: | — |
| Контекст: | http, server, location |
Отключает обработку определённых полей заголовка ответа FastCGI-сервера. Можно игнорировать следующие поля: «X-Accel-Redirect», «X-Accel-Expires», «X-Accel-Limit-Rate» (1.1.6), «X-Accel-Buffering» (1.1.6), «X-Accel-Charset» (1.1.6), «Expires», «Cache-Control», «Set-Cookie» (0.8.44) и «Vary» (1.7.7).
Если обработка этих полей заголовка не отключена, она приводит к следующим последствиям:
- «X-Accel-Expires», «Expires», «Cache-Control», «Set-Cookie» и «Vary» задают параметры кэширования ответа;
- «X-Accel-Redirect» выполняет внутреннее перенаправление на указанный URI;
- «X-Accel-Limit-Rate» задаёт ограничение скорости передачи ответа клиенту;
- «X-Accel-Buffering» включает или отключает буферизацию ответа;
- «X-Accel-Charset» задаёт требуемую кодировку ответа.
| Синтаксис: | fastcgi_index name; |
|---|---|
| По умолчанию: | — |
| Контекст: | http, server, location |
Задаёт имя файла, добавляемое после URI, оканчивающегося косой чертой, в значении переменной $fastcgi_script_name. Например, при таких настройках
fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME /home/www/scripts/php$fastcgi_script_name;
для запроса «/page.php» параметр SCRIPT_FILENAME будет равен «/home/www/scripts/php/page.php», а для запроса «/» он будет равен «/home/www/scripts/php/index.php».
| Синтаксис: | fastcgi_intercept_errors on | off; |
|---|---|
| По умолчанию: | fastcgi_intercept_errors off; |
| Контекст: | http, server, location |
Определяет, следует ли передавать клиенту ответы FastCGI-сервера с кодами, равными или превышающими 300, либо перехватывать их и перенаправлять в nginx для обработки директивой error_page.
| Синтаксис: | fastcgi_keep_conn on | off; |
|---|---|
| По умолчанию: | fastcgi_keep_conn off; |
| Контекст: | http, server, location |
Эта директива появилась в версии 1.1.4.
По умолчанию FastCGI-сервер закрывает соединение сразу после отправки ответа. Однако, если директиве задано значение on, nginx укажет FastCGI-серверу сохранять соединения открытыми. Это необходимо, в частности, для работы соединений keepalive с FastCGI-серверами.
| Синтаксис: | fastcgi_limit_rate rate; |
|---|---|
| По умолчанию: | fastcgi_limit_rate 0; |
| Контекст: | http, server, location |
Ограничивает скорость чтения ответа от FastCGI-сервера. Значение rate задаётся в байтах в секунду. Нулевое значение отключает ограничение скорости. Ограничение задаётся для каждого запроса, поэтому, если nginx одновременно откроет два соединения с FastCGI-сервером, общая скорость будет вдвое выше указанного ограничения. Ограничение действует только при включённой буферизации ответов FastCGI-сервера. Значение параметра может содержать переменные (1.27.0).
| Синтаксис: | fastcgi_max_temp_file_size size; |
|---|---|
| По умолчанию: | fastcgi_max_temp_file_size 1024m; |
| Контекст: | http, server, location |
Если включена буферизация ответов FastCGI-сервера и весь ответ не помещается в буферы, заданные директивами fastcgi_buffer_size и fastcgi_buffers, часть ответа может быть сохранена во временный файл. Эта директива задаёт максимальный size временного файла. Размер данных, записываемых во временный файл за один раз, задаётся директивой fastcgi_temp_file_write_size.
Нулевое значение отключает буферизацию ответов во временные файлы.
Это ограничение не применяется к ответам, которые будут кэшироваться или сохраняться на диске.
| Синтаксис: | fastcgi_next_upstream
error |
timeout |
denied |
invalid_header |
http_500 |
http_503 |
http_403 |
http_404 |
http_429 |
non_idempotent |
off
...; |
|---|---|
| По умолчанию: | fastcgi_next_upstream error timeout; |
| Контекст: | http, server, location |
Указывает, в каких случаях запрос следует передавать следующему серверу:
error- произошла ошибка при установлении соединения с сервером, передаче ему запроса или чтении заголовка ответа;
timeout- во время установления соединения с сервером, передачи ему запроса или чтения заголовка ответа истекло время ожидания;
denied- сервер отклонил соединение (1.29.3);
Этот параметр доступен в рамках нашей коммерческой подписки.
invalid_header- сервер вернул пустой или недопустимый ответ;
http_500- сервер вернул ответ с кодом 500;
http_503- сервер вернул ответ с кодом 503;
http_403- сервер вернул ответ с кодом 403;
http_404- сервер вернул ответ с кодом 404;
http_429- сервер вернул ответ с кодом 429 (1.11.13);
non_idempotent- обычно запросы с неидемпотентным методом (
POST,LOCK,PATCH) не передаются следующему серверу, если запрос уже был отправлен вышестоящему серверу (1.9.13); включение этой опции явно разрешает повторную отправку таких запросов; off- отключает передачу запроса следующему серверу.
Следует учитывать, что передать запрос следующему серверу можно только в том случае, если клиенту ещё ничего не отправлено. То есть, если ошибка или истечение времени ожидания произошли в середине передачи ответа, исправить ситуацию невозможно.
Директива также определяет, что считается неудачной попыткой связи с сервером. Случаи error, timeout, denied и invalid_header всегда считаются неудачными попытками, даже если они не указаны в директиве. Случаи http_500, http_503 и http_429 считаются неудачными попытками, только если они указаны в директиве. Случаи http_403 и http_404 никогда не считаются неудачными попытками.
Передача запроса следующему серверу может быть ограничена количеством попыток и временем.
| Синтаксис: | fastcgi_next_upstream_timeout time; |
|---|---|
| По умолчанию: | fastcgi_next_upstream_timeout 0; |
| Контекст: | http, server, location |
Эта директива появилась в версии 1.7.5.
Ограничивает время, в течение которого запрос может передаваться следующему серверу. Значение 0 отключает это ограничение.
| Синтаксис: | fastcgi_next_upstream_tries number; |
|---|---|
| По умолчанию: | fastcgi_next_upstream_tries 0; |
| Контекст: | http, server, location |
Ограничивает число возможных попыток передачи запроса следующему серверу. Значение 0 отключает это ограничение.
| Синтаксис: | fastcgi_no_cache string ...; |
|---|---|
| По умолчанию: | — |
| Контекст: | http, server, location |
Определяет условия, при которых ответ не будет сохраняться в кэш. Если хотя бы одно значение строковых параметров не пустое и не равно «0», ответ не будет сохранён:
fastcgi_no_cache $cookie_nocache $arg_nocache$arg_comment; fastcgi_no_cache $http_pragma $http_authorization;
Может использоваться вместе с директивой fastcgi_cache_bypass.
| Синтаксис: | fastcgi_param
parameter value
[if_not_empty]; |
|---|---|
| По умолчанию: | fastcgi_param HTTP_HOST $host$is_request_port$request_port; |
| Контекст: | http, server, location |
Задаёт parameter, который следует передать FastCGI-серверу. value может содержать текст, переменные и их сочетания. Эти директивы наследуются с предыдущего уровня конфигурации тогда и только тогда, когда на текущем уровне не определено ни одной директивы fastcgi_param.
В следующем примере показаны минимальные настройки, необходимые для PHP:
fastcgi_param SCRIPT_FILENAME /home/www/scripts/php$fastcgi_script_name; fastcgi_param QUERY_STRING $query_string;
Параметр SCRIPT_FILENAME используется в PHP для определения имени скрипта, а параметр QUERY_STRING — для передачи параметров запроса.
Для скриптов, обрабатывающих запросы POST, также необходимы следующие три параметра:
fastcgi_param REQUEST_METHOD $request_method; fastcgi_param CONTENT_TYPE $content_type; fastcgi_param CONTENT_LENGTH $content_length;
Если PHP был собран с параметром конфигурации --enable-force-cgi-redirect, следует также передавать параметр REDIRECT_STATUS со значением «200»:
fastcgi_param REDIRECT_STATUS 200;
Если директива указана с if_not_empty (1.1.11), такой параметр будет передан серверу, только если его значение не пустое:
fastcgi_param HTTPS $https if_not_empty;
| Синтаксис: | fastcgi_pass address; |
|---|---|
| По умолчанию: | — |
| Контекст: | location, if in location |
Задаёт адрес FastCGI-сервера. Адрес можно указать в виде доменного имени или IP-адреса и порта:
fastcgi_pass localhost:9000;
или в виде пути к сокету домена UNIX:
fastcgi_pass unix:/tmp/fastcgi.socket;
Если доменное имя разрешается в несколько адресов, все они будут использоваться по очереди. Кроме того, адрес можно указать как группу серверов.
Значение параметра может содержать переменные. В этом случае, если адрес указан как доменное имя, имя ищется среди описанных групп серверов; если оно не найдено, адрес определяется с помощью резолвера.
| Синтаксис: | fastcgi_pass_header field; |
|---|---|
| По умолчанию: | — |
| Контекст: | http, server, location |
Разрешает передавать клиенту поля заголовка FastCGI-сервера, отключённые в противном случае.
| Синтаксис: | fastcgi_pass_request_body on | off; |
|---|---|
| По умолчанию: | fastcgi_pass_request_body on; |
| Контекст: | http, server, location |
Указывает, передаётся ли исходное тело запроса FastCGI-серверу. См. также директиву fastcgi_pass_request_headers.
| Синтаксис: | fastcgi_pass_request_headers on | off; |
|---|---|
| По умолчанию: | fastcgi_pass_request_headers on; |
| Контекст: | http, server, location |
Указывает, передаются ли поля заголовка исходного запроса FastCGI-серверу. См. также директиву fastcgi_pass_request_body.
| Синтаксис: | fastcgi_read_timeout time; |
|---|---|
| По умолчанию: | fastcgi_read_timeout 60s; |
| Контекст: | http, server, location |
Задаёт время ожидания чтения ответа от FastCGI-сервера. Время ожидания задаётся только между двумя последовательными операциями чтения, а не для передачи всего ответа. Если FastCGI-сервер ничего не передаёт в течение этого времени, соединение закрывается.
| Синтаксис: | fastcgi_request_buffering on | off; |
|---|---|
| По умолчанию: | fastcgi_request_buffering on; |
| Контекст: | http, server, location |
Эта директива появилась в версии 1.7.11.
Включает или отключает буферизацию тела запроса клиента.
При включённой буферизации всё тело запроса считывается от клиента до отправки запроса FastCGI-серверу.
При отключённой буферизации тело запроса отправляется FastCGI-серверу сразу по мере получения. В этом случае запрос нельзя передать следующему серверу, если nginx уже начал отправлять тело запроса.
| Синтаксис: | fastcgi_request_dynamic on | off; |
|---|---|
| По умолчанию: | fastcgi_request_dynamic off; |
| Контекст: | http, server, location |
Эта директива появилась в версии 1.29.3.
Включает или отключает создание отдельного экземпляра запроса для каждого FastCGI-сервера. По умолчанию для всех FastCGI-серверов используется один запрос. Если эта возможность включена, создаётся отдельный экземпляр запроса, позволяющий настраивать запрос для каждого сервера.
Эта директива доступна в рамках нашей коммерческой подписки.
| Синтаксис: | fastcgi_send_lowat size; |
|---|---|
| По умолчанию: | fastcgi_send_lowat 0; |
| Контекст: | http, server, location |
Если директиве задано ненулевое значение, nginx попытается свести к минимуму количество операций отправки в исходящих соединениях с FastCGI-сервером, используя либо флаг NOTE_LOWAT метода kqueue, либо параметр сокета SO_SNDLOWAT с указанным значением size.
В Linux, Solaris и Windows эта директива игнорируется.
| Синтаксис: | fastcgi_send_timeout time; |
|---|---|
| По умолчанию: | fastcgi_send_timeout 60s; |
| Контекст: | http, server, location |
Задаёт время ожидания передачи запроса FastCGI-серверу. Время ожидания задаётся только между двумя последовательными операциями записи, а не для передачи всего запроса. Если FastCGI-сервер ничего не получает в течение этого времени, соединение закрывается.
| Синтаксис: | fastcgi_socket_keepalive on | off; |
|---|---|
| По умолчанию: | fastcgi_socket_keepalive off; |
| Контекст: | http, server, location |
Настраивает поведение «TCP keepalive» для исходящих соединений с FastCGI-сервером. По умолчанию для сокета используются настройки операционной системы. Если директиве задано значение «on», для сокета включается параметр SO_KEEPALIVE.
| Синтаксис: | fastcgi_split_path_info regex; |
|---|---|
| По умолчанию: | — |
| Контекст: | location |
Задаёт регулярное выражение, выделяющее значение для переменной $fastcgi_path_info. Регулярное выражение должно содержать две группы захвата: первая становится значением переменной $fastcgi_script_name, вторая — значением переменной $fastcgi_path_info. Например, при таких настройках
location ~ ^(.+\.php)(.*)$ {
fastcgi_split_path_info ^(.+\.php)(.*)$;
fastcgi_param SCRIPT_FILENAME /path/to/php$fastcgi_script_name;
fastcgi_param PATH_INFO $fastcgi_path_info;
для запроса «/show.php/article/0001» параметр SCRIPT_FILENAME будет равен «/path/to/php/show.php», а параметр PATH_INFO будет равен «/article/0001».
| Синтаксис: | fastcgi_store
on |
off |
string; |
|---|---|
| По умолчанию: | fastcgi_store off; |
| Контекст: | http, server, location |
Включает сохранение файлов на диск. Параметр on сохраняет файлы по путям, соответствующим директивам alias или root. Параметр off отключает сохранение файлов. Кроме того, имя файла можно задать явно с помощью string с переменными:
fastcgi_store /data/www$original_uri;
Время изменения файлов задаётся в соответствии с полученным полем заголовка ответа «Last-Modified». Сначала ответ записывается во временный файл, а затем файл переименовывается. Начиная с версии 0.8.9 временные файлы и постоянное хранилище можно размещать в разных файловых системах. Однако следует учитывать, что в этом случае файл копируется между двумя файловыми системами, а не просто переименовывается. Поэтому рекомендуется для каждого location размещать сохранённые файлы и каталог временных файлов, заданный директивой fastcgi_temp_path, в одной файловой системе.
Эту директиву можно использовать для создания локальных копий статических неизменяемых файлов, например:
location /images/ {
root /data/www;
error_page 404 = /fetch$uri;
}
location /fetch/ {
internal;
fastcgi_pass backend:9000;
...
fastcgi_store on;
fastcgi_store_access user:rw group:rw all:r;
fastcgi_temp_path /data/temp;
alias /data/www/;
}
| Синтаксис: | fastcgi_store_access users:permissions ...; |
|---|---|
| По умолчанию: | fastcgi_store_access user:rw; |
| Контекст: | http, server, location |
Задаёт права доступа для вновь создаваемых файлов и каталогов, например:
fastcgi_store_access user:rw group:rw all:r;
Если указаны права доступа group или all, права user можно опустить:
fastcgi_store_access group:rw all:r;
| Синтаксис: | fastcgi_temp_file_write_size size; |
|---|---|
| По умолчанию: | fastcgi_temp_file_write_size 8k|16k; |
| Контекст: | http, server, location |
Ограничивает size данных, записываемых за один раз во временный файл, если включена буферизация ответов FastCGI-сервера во временные файлы. По умолчанию size ограничивается двумя буферами, заданными директивами fastcgi_buffer_size и fastcgi_buffers. Максимальный размер временного файла задаётся директивой fastcgi_max_temp_file_size.
| Синтаксис: | fastcgi_temp_path
path
[level1
[level2
[level3]]]; |
|---|---|
| По умолчанию: | fastcgi_temp_path fastcgi_temp; |
| Контекст: | http, server, location |
Задаёт каталог для хранения временных файлов с данными, полученными от FastCGI-серверов. Внутри указанного каталога можно использовать иерархию подкаталогов глубиной до трёх уровней. Например, при следующей конфигурации
fastcgi_temp_path /spool/nginx/fastcgi_temp 1 2;
временный файл может выглядеть так:
/spool/nginx/fastcgi_temp/7/45/00000123457
См. также параметр use_temp_path директивы fastcgi_cache_path.
Параметры, передаваемые FastCGI-серверу
Поля заголовка HTTP-запроса передаются FastCGI-серверу как параметры. В приложениях и скриптах, работающих в качестве FastCGI-серверов, эти параметры обычно доступны как переменные окружения. Например, поле заголовка «User-Agent» передаётся как параметр HTTP_USER_AGENT. Помимо полей заголовка HTTP-запроса, с помощью директивы fastcgi_param можно передавать произвольные параметры.
Встроенные переменные
Модуль ngx_http_fastcgi_module поддерживает встроенные переменные, которые можно использовать для задания параметров с помощью директивы fastcgi_param:
-
$fastcgi_script_name - URI запроса или, если URI оканчивается косой чертой, URI запроса с добавленным именем индексного файла, заданным директивой fastcgi_index. Эта переменная может использоваться для задания параметров
SCRIPT_FILENAMEиPATH_TRANSLATED, определяющих имя скрипта в PHP. Например, для запроса «/info/» при следующих директивахfastcgi_index index.php; fastcgi_param SCRIPT_FILENAME /home/www/scripts/php$fastcgi_script_name;
параметрSCRIPT_FILENAMEбудет равен «/home/www/scripts/php/info/index.php».При использовании директивы fastcgi_split_path_info переменная
$fastcgi_script_nameравна значению первой группы захвата, заданной директивой. $fastcgi_path_info- значение второй группы захвата, заданной директивой fastcgi_split_path_info. Эта переменная может использоваться для задания параметра
PATH_INFO.
© 2002-2021 Igor Sysoev
© 2011-2026 Nginx, Inc.
Licensed under the BSD License.
https://nginx.org/en/docs/http/ngx_http_fastcgi_module.html