Mercurial > hg > nginx-site
view xml/ru/docs/http/ngx_http_fastcgi_module.xml @ 91:36f1994d7fa1
Made index alignment more natural.
author | Ruslan Ermilov <ru@nginx.com> |
---|---|
date | Fri, 14 Oct 2011 10:47:18 +0000 |
parents | 0a45870d0160 |
children | 5533b2bb34e5 |
line wrap: on
line source
<?xml version="1.0" encoding="utf-8"?> <!DOCTYPE module SYSTEM "../../../../dtd/module.dtd"> <module name="Директивы модуля ngx_http_fastcgi_module" link="/ru/docs/http/ngx_http_fastcgi_module.html" lang="ru"> <section name="" id="summary"> <para> Модуль ngx_http_fastcgi_module позволяет передавать запросы удалённому FastCGI-серверу. </para> </section> <section name="Пример конфигурации" id="example"> <para> <example> 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; } </example> </para> </section> <section name="Директивы" id="directives"> <directive name="fastcgi_buffer_size"> <syntax>fastcgi_buffer_size <value>размер</value></syntax> <default>fastcgi_buffer_size 4k/8k</default> <context>http, server, location</context> <para> Директива задаёт размер буфера, в который будет читаться первая часть ответа, получаемого от FastCGI-сервера. В этой части ответа находится, как правило, небольшой заголовок ответа. По умолчанию размер буфера равен размеру одного буфера в директиве <link id="fastcgi_buffers"/>, однако его можно сделать меньше. </para> </directive> <directive name="fastcgi_buffers"> <syntax>fastcgi_buffers <value>число размер</value></syntax> <default>fastcgi_buffers 8 4k/8k</default> <context>http, server, location</context> <para> Директива задаёт число и размер буферов для одного соединения, в которые будет читаться ответ, получаемый от FastCGI-сервера. По умолчанию размер одного буфера равен размеру страницы, в зависимости от платформы это или 4K, или 8K. </para> </directive> <directive name="fastcgi_cache"> <syntax>fastcgi_cache <value>[зона|off]</value></syntax> <default>off</default> <context>http, server, location</context> <para> Директива задаёт зону для кэширования. Одна и та же зона может использоваться в нескольких местах. Параметр "off" запрещает кэширование, унаследованное с предыдущего уровня конфигурации. </para> </directive> <directive name="fastcgi_cache_bypass"> <syntax>fastcgi_cache_bypass <value>строка [...]</value></syntax> <default>нет</default> <context>http, server, location</context> <para> Директива задаёт условия, при которых ответ не будет браться из кэша. Если значение хотя бы одной из строк переменных не пустое и не равно "0", то ответ не берётся из кэша: <example> fastcgi_cache_bypass $cookie_nocache $arg_nocache$arg_comment; fastcgi_cache_bypass $http_pragma $http_authorization; </example> Можно использовать совместно с директивой <link id="fastcgi_no_cache"/>. </para> </directive> <directive name="fastcgi_cache_key"> <syntax>fastcgi_cache_key <value>строка</value></syntax> <default>нет</default> <context>http, server, location</context> <para> Директива задаёт ключ для кэширования, например, <example> fastcgi_cache_key localhost:9000$request_uri; </example> </para> </directive> <directive name="fastcgi_cache_path"> <syntax>fastcgi_cache_path <value>путь [levels=уровни] keys_zone=название:размер [inactive=время] [max_size=размер]</value></syntax> <default>нет</default> <context>http</context> <para> Директива задаёт путь и другие параметры кэша. Данные кэша хранятся в файлах. Ключом и именем файла в кэше является результат функции md5 от проксированного URL. Параметр levels задаёт уровни иерархии кэша, например, при использовании <example> fastcgi_cache_path /data/nginx/cache levels=1:2 keys_zone=one:10m; </example> имена файлов в кэше будут такого вида: <example> /data/nginx/cache/<emphasis>c/29</emphasis>/b7f54b2df7773722d382f4809d650<emphasis>29c</emphasis> </example> </para> <para> Кэшируемый ответ записывается во временный файл, а потом этот файл переименовывается. Начиная с версии 0.8.9, временные файлы и кэш могут располагаться на разных файловых системах, но нужно учитывать, что в этом случае вместо дешёвой операции переименовывания в пределах одной файловой системы файл копируется с одной файловой системы на другую. Поэтому лучше, если кэш будет находиться на той же файловой системе, что и каталог с временными файлами, задаваемый директивой <link id="fastcgi_temp_path"/> для данного location. </para> <para> Кроме того, все активные ключи и информация о данных хранятся в разделяемой памяти — зоне, имя и размер которой задаётся параметром keys_zone. Если к данным кэша не обращются в течение времени, заданного параметром inactive, то данные удаляются, независимо от их свежести. По умолчанию inactive равен 10 минутам. </para> <para> Специальный процесс "cache manager" следит за максимальным размером кэша, заданным параметром max_size, и при превышении его размеров удаляет самые невостребованные данные. </para> </directive> <directive name="fastcgi_cache_min_uses"> <syntax>fastcgi_cache_min_uses <value>число</value></syntax> <default>fastcgi_cache_min_uses 1</default> <context>http, server, location</context> <para> Директива задаёт число запросов, после которого ответ будет закэширован. </para> </directive> <directive name="fastcgi_cache_valid"> <syntax>fastcgi_cache_valid <value>ответ [ответ ...] время</value> </syntax> <default>нет</default> <context>http, server, location</context> <para> Директива задаёт время кэширования для разных ответов. Например, директивы <example> fastcgi_cache_valid 200 302 10m; fastcgi_cache_valid 404 1m; </example> задают время кэширования 10 минут для ответов 200 и 302, и 1 минуту для ответов 404. </para> <para> Если указано только время кэширования, <example> fastcgi_cache_valid 5m; </example> то кэшируются только ответы 200, 301 и 302. </para> <para> Кроме того, может кэшировать любые ответы с помощью параметра "any": <example> fastcgi_cache_valid 200 302 10m; fastcgi_cache_valid 301 1h; fastcgi_cache_valid any 1m; </example> </para> </directive> <directive name="fastcgi_cache_use_stale"> <syntax>fastcgi_cache_use_stale <value>[error | timeout | invalid_header | updating | http_500 | http_503 | http_404 | off] [...]</value></syntax> <default>fastcgi_cache_use_stale off</default> <context>http, server, location</context> <para> Директива определяет, в каких случаях можно использовать устаревший закэшированный ответ, если при работе с проксированным сервером возникла ошибка. Параметры директивы совпадают с параметрами директивы <link id="fastcgi_next_upstream"/>. И, кроме того, есть параметр updating, которой разрешает использовать устаревший закэшированный ответ, если на данный момент он уже обновляется. </para> </directive> <directive name="fastcgi_connect_timeout"> <syntax>fastcgi_connect_timeout <value>время</value></syntax> <default>fastcgi_connect_timeout 60</default> <context>http, server, location</context> <para> Директива задаёт таймаут для соединения с FastCGI-сервером. Необходимо иметь в виду, что этот таймаут не может быть больше 75 секунд. </para> </directive> <directive name="fastcgi_index"> <syntax>fastcgi_index <value>имя</value></syntax> <default>нет</default> <context>http, server, location</context> <para> Директива задаёт имя файла, который при создании переменной $fastcgi_script_name будет добавляться после URI, если URI заканчивается слэшом. Например, при таких настройках <example> fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME /home/www/scripts/php$fastcgi_script_name; </example> и запросе "/page.php" параметр SCRIPT_FILENAME будет равен "/home/www/scripts/php/page.php", а при запросе "/" — "/home/www/scripts/php/index.php". </para> </directive> <directive name="fastcgi_hide_header"> <syntax>fastcgi_hide_header <value>имя</value></syntax> <context>http, server, location</context> <para> nginx не передаёт клиенту строки заголовка "Status" и "X-Accel-..." из ответа FastCGI-сервера. Директива fastcgi_hide_header задаёт дополнительные строки. Если же строки нужно наоброт разрешить, то нужно воспользоваться директивой <link id="fastcgi_pass_header"/>. </para> </directive> <directive name="fastcgi_ignore_client_abort"> <syntax>fastcgi_ignore_client_abort <value>[on|off]</value></syntax> <default>fastcgi_ignore_client_abort off</default> <context>http, server, location</context> <para> Директива определяет, закрывать ли соединение с FastCGI-сервером в случае, если клиент закрыл соединение, не дождавшись ответа. </para> </directive> <directive name="fastcgi_ignore_headers"> <syntax>fastcgi_ignore_headers <value>имя [имя ...]</value></syntax> <context>http, server, location</context> <para> Директива fastcgi_ignore_headers запрещает обработку некоторых строк заголовка из ответа FastCGI-сервера. В директиве можно указать строки "X-Accel-Redirect", "X-Accel-Expires", "Expires" и "Cache-Control". </para> </directive> <directive name="fastcgi_intercept_errors"> <syntax>fastcgi_intercept_errors <value>on|off</value></syntax> <default>fastcgi_intercept_errors off</default> <context>http, server, location</context> <para> Директива определяет, передавать ли клиенту ответы FastCGI-сервера с кодом больше или равные 400 или же перенаправлять их на обработку nginx'у с помощью директивы error_page. </para> </directive> <directive name="fastcgi_no_cache"> <syntax>fastcgi_no_cache <value>строка [...]</value></syntax> <default>нет</default> <context>http, server, location</context> <para> Директива задаёт условия, при которых ответ не будет сохраняться в кэш. Если значение хотя бы одной из строк переменных не пустое и не равно "0", то ответ не будет сохранён: <example> fastcgi_no_cache $cookie_nocache $arg_nocache$arg_comment; fastcgi_no_cache $http_pragma $http_authorization; </example> Можно использовать совместно с директивой <link id="fastcgi_cache_bypass"/>. </para> </directive> <directive name="fastcgi_next_upstream"> <syntax>fastcgi_next_upstream <value>[error|timeout|invalid_header|http_500|http_503|http_404|off]</value> </syntax> <default>fastcgi_next_upstream error timeout</default> <context>http, server, location</context> <para> Директива определяет, в каких случаях запрос будет передан следующему серверу: <list type="bullet"> <listitem> error — произшла ошибка соединения с сервером, передачи ему запроса или чтения заголовка ответа сервера; </listitem> <listitem> timeout — произошёл таймаут во время соединения с сервером, передачи ему запроса или чтения заголовка ответа сервера; </listitem> <listitem> invalid_header — сервер вернул пустой или неверный ответ; </listitem> <listitem> http_500 — сервер вернул ответ с кодом 500; </listitem> <listitem> http_503 — сервер вернул ответ с кодом 503; </listitem> <listitem> http_404 — сервер вернул ответ с кодом 404; </listitem> <listitem> off — запрещает передачу запроса следующему серверу; </listitem> </list> </para> <para> Необходимо понимать, что передача запроса следующему серверу возможна только при условии, что клиенту ещё ничего не передавалось. То есть, если ошибка или таймаут возникли в середине передачи ответа, то исправить это уже невозможно. </para> </directive> <directive name="fastcgi_param"> <syntax>fastcgi_param <value>параметр значение</value></syntax> <default>нет</default> <context>http, server, location</context> <para> Директива задаёт параметр, который будут передаваться FastCGI-серверу. В качестве значения можно использовать текст, переменные и их комбинации. Директивы наследуются с предыдущего уровня при условии, что на данном уровне не описаны свои директивы fastcgi_param. </para> <para> Ниже приведён пример минимально необходимых параметров для PHP: <example> fastcgi_param SCRIPT_FILENAME /home/www/scripts/php$fastcgi_script_name; fastcgi_param QUERY_STRING $query_string; </example> </para> <para> Параметр SCRIPT_FILENAME используется в PHP для определения имени скрипта, а в параметре QUERY_STRING передаются параметры запроса. </para> <para> Если скрипты обрабатывают запросы POST, то нужны ещё три параметра: <example> fastcgi_param REQUEST_METHOD $request_method; fastcgi_param CONTENT_TYPE $content_type; fastcgi_param CONTENT_LENGTH $content_length; </example> </para> <para> Если PHP был собран с параметром конфигурации <command>--enable-force-cgi-redirect</command>, то нужно передавать параметр REDIRECT_STATUS со значением "200": <example> fastcgi_param REDIRECT_STATUS 200; </example> </para> </directive> <directive name="fastcgi_pass"> <syntax>fastcgi_pass <value>fastcgi-server</value></syntax> <default>нет</default> <context>location, if в location</context> <para> Директива задаёт адрес FastCGI-сервера. Адрес может быть указан в виде доменного имени или адреса и порта, например, <example> fastcgi_pass localhost:9000; </example> или в виде пути unix сокета: <example> fastcgi_pass unix:/tmp/fastcgi.socket; </example> </para> <para> Если доменное имя резолвится в несколько адресов, то все они будут использоваться в режиме round-robin. И кроме того, адрес может быть <link doc="ngx_http_upstream.xml">группой серверов</link>. </para> </directive> <directive name="fastcgi_pass_header"> <syntax>fastcgi_pass_header <value>имя</value></syntax> <context>http, server, location</context> <para> Директива разрешает передавать клиенту запрещённые для передачи строки. </para> </directive> <directive name="fastcgi_read_timeout"> <syntax>fastcgi_read_timeout <value>время</value></syntax> <default>fastcgi_read_timeout 60</default> <context>http, server, location</context> <para> Директива задаёт таймаут при чтении ответа FastCGI-сервера. Таймаут устанавливается не на всю передачу ответа, а только между двумя операциями чтения. Если по истечении этого времени FastCGI-сервер ничего не передаст, то nginx закрывает соединение. </para> </directive> <directive name="fastcgi_redirect_errors"> <syntax>fastcgi_redirect_errors <value>on|off</value></syntax> <para> Директива переименована в <link id="fastcgi_intercept_errors"/>. </para> </directive> <directive name="fastcgi_send_timeout"> <syntax>fastcgi_send_timeout <value>время</value></syntax> <default>fastcgi_send_timeout 60</default> <context>http, server, location</context> <para> Директива задаёт таймаут при передаче запроса FastCGI-серверу. Таймаут устанавливается не на всю передачу запроса, а только между двумя операциями записи. Если по истечении этого времени FastCGI-сервер не примет новых данных, то nginx закрывает соединение. </para> </directive> <directive name="fastcgi_split_path_info"> <syntax>fastcgi_split_path_info <value>regex</value></syntax> <default>нет</default> <context>location</context> <para> Директива задаёт регулярное выражение, выделяющее значение для переменной $fastcgi_path_info. Регулярное выражение должно иметь два выделения, из которых первое становиться значением переменной $fastcgi_script_name, а второе — значением переменной $fastcgi_path_info. Например, при таких настройках <example> location ~ ^(.+\.php)(.*)$ { fastcgi_split_path_info ^(.+\.php)(.*)$; fastcgi_param SCRIPT_FILENAME /path/to/php$fastcgi_script_name; fastcgi_param PATH_INFO $fastcgi_path_info; </example> и запросе "/show.php/article/0001" параметр SCRIPT_FILENAME будет равен "/path/to/php/show.php", а параметр PATH_INFO — "/article/0001". </para> </directive> <directive name="fastcgi_store"> <syntax>fastcgi_store <value>on | off | строка </value></syntax> <default>fastcgi_store off</default> <context>http, server, location</context> <para> Директива разрешает сохранение на диск файлов. Параметр "on" сохраняет файлы в соответствии с путями, указаными в директивах <link doc="ngx_http_core_module.xml" id="alias">alias</link> или <link doc="ngx_http_core_module.xml" id="root">root</link>. Параметр "off" запрещает сохранение файлов. Кроме того, имя файла можно явно задать с помощью строки с переменными: <example> fastcgi_store /data/www$original_uri; </example> </para> <para> Время модификации файлов выставляется согласно полученной строке "Last-Modified" в заголовке ответа. Ответ записывается во временный файл, а потом этот файл переименовывается. Начиная с версии 0.8.9, временный файл и постоянное место хранения ответа могут располагаться на разных файловых системах, но нужно учитывать, что в этом случае вместо дешёвой операции переименовывания в пределах одной файловой системы файл копируется с одной файловой системы на другую. Поэтому лучше, если сохраняемые файлы будут находиться на той же файловой системе, что и каталог с временными файлами, задаваемый директивой <link id="fastcgi_temp_path"/> для данного location. </para> <para> Директиву можно использовать для создания локальных копий статических неизменяемых файлов, например: <example> location /images/ { root /data/www; open_file_cache_errors off; 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/; } </example> </para> </directive> <directive name="fastcgi_store_access"> <syntax>fastcgi_store_access <value>пользователи:права [пользователи:права] ...</value></syntax> <default>fastcgi_store_access user:rw</default> <context>http, server, location</context> <para> Директива задаёт права доступа для создаваемых файлов и каталогов, например, <example> fastcgi_store_access user:rw group:rw all:r; </example> </para> <para> Если заданы какие-либо права для groups или all, то права для user указывать необязательно: <example> fastcgi_store_access group:rw all:r; </example> </para> </directive> <directive name="fastcgi_temp_path"> <syntax>fastcgi_temp_path <value>путь [ уровень1 [ уровень2 [ уровень3 ] ] ] </value></syntax> <default>fastcgi_temp_path fastcgi_temp</default> <context>http, server, location</context> <para> Директива задаёт имя каталога для хранения временных файлов полученных от другого сервера. В каталоге может использоваться иерархия подкаталогов до трёх уровней. Например, при такой конфигурации <example> fastcgi_temp_path /spool/nginx/fastcgi_temp 1 2; </example> имя временного будет такого вида: <example> /spool/nginx/fastcgi_temp/7/45/00000123457 </example> </para> </directive> </section> <section name="Параметры, передаваемые FastCGI-серверу" id="parameters"> <para> Строки заголовка HTTP запроса передаются FastCGI-серверу в виде параметров. В приложениях и скриптах, запущенных в виде FastCGI-сервера, эти параметры обычно доступны в виде переменных среды. Например, строка заголовка "User-Agent" передаётся как параметр HTTP_USER_AGENT. Кроме строк заголовка HTTP запроса, можно передавать произвольные параметры с помощью директивы <link id="fastcgi_param"/>. </para> </section> <section name="Встроенные переменные" id="variables"> <para> В модуле ngx_http_fastcgi_module есть встроенные переменные, которые можно использовать для формирования параметров с помощью директивы <link id="fastcgi_param"/>: <list type="bullet"> <listitem> <para> $fastcgi_script_name, эта переменная равна URI запроса или же, если URI заканчивается слэшом, то — URI запроса плюс имя индексного файла, задаваемого директивой <link id="fastcgi_index"/>. Эту переменную можно использовать для задания параметра SCRIPT_FILENAME и PATH_TRANSLATED, используемых, в частности, для определения имени скрипта в PHP. Например, для запроса "/info/" и при использовании директив <example> fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME /home/www/scripts/php$fastcgi_script_name; </example> параметр SCRIPT_FILENAME будут равен "/home/www/scripts/php/info/index.php". </para> <para> При использовании директивы <link id="fastcgi_split_path_info"/> переменная $fastcgi_script_name равна значению первого выделения, задаваемого этой директивой. </para> </listitem> <listitem> $fastcgi_path_info, эта переменная равна значению второго выделения, задаваемого директивой <link id="fastcgi_split_path_info"/>. Эту переменную можно использовать для задания параметра PATH_INFO. </listitem> </list> </para> </section> </module>