Spec-Zone.ru › nginx

Модуль ngx_http_fastcgi_module

  • Пример конфигурации
  • Директивы
  • fastcgi_bind
  • 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_очистка
  • 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_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_bind address [transparent] | off;
Значение по умолчанию: —
Контекст: http, server, location

Эта директива появилась в версии 0.8.22.

Эта директива позволяет задавать локальный IP-адрес и порт, с которого будут исходить исходящие соединения к серверу FastCGI (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_buffer_size size;
Значение по умолчанию: fastcgi_buffer_size 4k|8k;
Контекст: http, server, location

Устанавливает размер буфера, используемого для чтения первой части ответа, полученного от сервера FastCGI. Эта часть обычно содержит небольшой заголовок ответа. По умолчанию, размер буфера равен одной странице памяти. Это либо 4К, либо 8К, в зависимости от платформы. Его можно сделать меньше.

Синтаксис: 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.

Буферизация также может быть включена или отключена путём передачи «yes» или «no» в поле заголовка ответа «X-Accel-Buffering». Эта возможность может быть отключена с помощью директивы fastcgi_ignore_headers.

Синтаксис: fastcgi_buffers number size;
Значение по умолчанию: fastcgi_buffers 8 4k|8k;
Контекст: http, server, location

Устанавливает количество и размер буферов, используемых для чтения ответа от сервера FastCGI для одного соединения. По умолчанию, размер буфера равен одной странице памяти. Это либо 4К, либо 8К, в зависимости от платформы.

Синтаксис: fastcgi_busy_buffers_size size;
Значение по умолчанию: fastcgi_busy_buffers_size 8k|16k;
Контекст: http, server, location

При включённой буферизации ответов от сервера FastCGI ограничивает общее количество буферов, которые могут быть заняты отправкой ответа клиенту, пока ответ ещё не полностью прочитан. В это время остальные буферы могут быть использованы для чтения ответа и, при необходимости, буферизации части ответа во временный файл. По умолчанию, 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, временные файлы будут размещаться непосредственно в каталоге кэша.

Кроме того, все активные ключи и информация о данных хранятся в области общей памяти, размер которой в байтах и size настраиваются параметром keys_zone. Одна мегабайтная область может хранить около 8 тысяч ключей.

В рамках коммерческой подписки, область общей памяти также хранит расширенную информацию о кэше ngx_http_api_module, поэтому необходимо указать больший размер области для того же количества ключей. Например, одна мегабайтная область может хранить около 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). Это имеет более низкий приоритет по сравнению с параметрами директивы.

END_OF_DOCUMENT_MARKER
  • Расширение «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

Эта директива появилась в версии 1.7.7.

Ограничивает скорость чтения ответа от сервера FastCGI. rate указано в байтах в секунду. Нулевое значение отключает ограничение скорости. Ограничение устанавливается на запрос, и если nginx одновременно открывает два соединения с сервером FastCFI, общая скорость будет вдвое больше, чем указанное ограничение. Ограничение работает только если буферизация ответов от сервера 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 | 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
произошёл таймаут при установлении соединения с сервером, передаче запроса или чтении заголовка ответа;
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) не передаются на следующий сервер, если запрос был отправлен на upstream сервер (1.9.13); включение этого параметра явно позволяет повторно отправлять такие запросы;
off
отключает передачу запроса на следующий сервер.

Следует иметь в виду, что передача запроса на следующий сервер возможна только если ещё ничего не было отправлено клиенту. То есть, если ошибка или таймаут произойдёт в середине передачи ответа, исправить это невозможно.

Директива также определяет, что считается неудачной попыткой связи с сервером. Сюда всегда относятся error, timeout и 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

Эта директива появилась в версии 1.7.5.

Ограничивает количество попыток передачи запроса на следующий сервер. Значение 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];
По умолчанию: —
Контекст: 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_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

Эта директива появилась в версии 1.15.6.

Настраивает поведение «TCP keepalive» для исходящих соединений с FastCGI-сервером. По умолчанию используются настройки операционной системы для сокета. Если директива установлена в значение “on”, то опция SO_KEEPALIVE включена для сокета.

Синтаксис: fastcgi_split_path_info regex;
По умолчанию: —
Контекст: location
END_OF_DOCUMENT_MARKER

Определяет регулярное выражение, которое захватывает значение для переменной $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, временные файлы и постоянное хранилище могут находиться на разных файловых системах. Однако, следует учитывать, что в этом случае файл копируется между двумя файловыми системами вместо дешевой операции переименования. Поэтому рекомендуется, чтобы для каждого расположения как сохранённые файлы, так и каталог, содержащий временные файлы, заданный директивой 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-2024 Nginx, Inc.
Licensed under the BSD License.
https://nginx.org/en/docs/http/ngx_http_fastcgi_module.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API