Персональный
сайт
Игоря
Сысоева


 
english
 
sysoev.ru
 
nginx
 поехали!    
 документация    
 поддержка    
 изменения    
 скачать    
 ссылки    
 
mod_accel
mod_realip
mod_deflate
программирование
всякая всячина
windows
freebsd
apache
pppd
unix
web
 
обо мне
для писем
для денег
 

Директивы модуля ngx_http_fastcgi_module

 

22.05.2008

Модуль ngx_http_fastcgi_module позволяет передавать запросы удалённому FastCGI-серверу.

Содержание

Пример конфигурации
Директивы
fastcgi_buffer_size
fastcgi_buffers
fastcgi_connect_timeout
fastcgi_index
fastcgi_hide_header
fastcgi_ignore_client_abort
fastcgi_intercept_errors
fastcgi_next_upstream
fastcgi_param
fastcgi_pass
fastcgi_pass_header
fastcgi_read_timeout
fastcgi_redirect_errors
fastcgi_send_timeout
fastcgi_store
fastcgi_store_access
fastcgi_temp_path
Параметры, передаваемые 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;
}

Директивы


syntax: fastcgi_buffer_size размер
default: fastcgi_buffer_size 4k/8k
context: http, server, location

Директива задаёт размер буфера, в который будет читаться первая часть ответа, получаемого от FastCGI-сервера. В этой части ответа находится, как правило, небольшой заголовок ответа. По умолчанию размер буфера равен размеру одного буфера в директиве fastcgi_buffers, однако его можно сделать меньше.


syntax: fastcgi_buffers число размер
default: fastcgi_buffers 8 4k/8k
context: http, server, location

Директива задаёт число и размер буферов для одного соединения, в которые будет читаться ответ, получаемый от FastCGI-сервера. По умолчанию размер одного буфера равен размеру страницы, в зависимости от платформы это или 4K, или 8K.


syntax: fastcgi_connect_timeout время
default: fastcgi_connect_timeout 60
context: http, server, location

Директива задаёт таймаут для соединения с FastCGI-сервером. Необходимо иметь в виду, что этот таймаут не может быть больше 75 секунд.


syntax: fastcgi_index имя
default: нет
context: http, server, location

Директива задаёт имя файла, который при создании переменной $fastcgi_script_name будет добавляться после URI, если URI заканчивается слэшом.


syntax: fastcgi_hide_header имя
context: http, server, location

nginx не передаёт клиенту строки заголовка "Status" и "X-Accel-..." из ответа FastCGI-сервера. Директива fastcgi_hide_header задаёт дополнительные строки. Если же строки нужно наоброт разрешить, то нужно воспользоваться директивой fastcgi_pass_header.


syntax: fastcgi_ignore_client_abort [on|off]
default: fastcgi_ignore_client_abort off
context: http, server, location

Директива определяет, закрывать ли соединение с FastCGI-сервером в случае, если клиент закрыл соединение, не дождавшись ответа.


syntax: fastcgi_intercept_errors on|off
default: fastcgi_intercept_errors off
context: http, server, location

Директива определяет, передавать ли клиенту ответы FastCGI-сервера с кодом больше или равные 400 или же перенаправлять их на обработку nginx'у с помощью директивы error_page.


syntax: fastcgi_next_upstream [error|timeout|invalid_header|http_500|http_503|http_404|off]
default: fastcgi_next_upstream error timeout
context: http, server, location

Директива определяет, в каких случаях запрос будет передан следующему серверу:

  • error — произшла ошибка соединения с сервером, передачи ему запроса или чтения заголовка ответа сервера;
  • timeout — произошёл таймаут во время соединения с сервером, передачи ему запроса или чтения заголовка ответа сервера;
  • invalid_header — сервер вернул пустой или неверный ответ;
  • http_500 — сервер вернул ответ с кодом 500;
  • http_503 — сервер вернул ответ с кодом 503;
  • http_404 — сервер вернул ответ с кодом 404;
  • off — запрещает передачу запроса следующему серверу;

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


syntax: fastcgi_param параметр значение
default: нет
context: http, server, location

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


syntax: fastcgi_pass fastcgi-server
default: нет
context: location, if в location

Директива задаёт адрес FastCGI-сервера. Адрес может быть указан в виде доменного имени или адреса и порта, например,

    fastcgi_pass   localhost:9000;
или в виде пути unix сокета:
    fastcgi_pass   unix:/tmp/fastcgi.socket;

Если доменное имя резолвится в несколько адресов, то все они будут использоваться в режиме round-robin. И кроме того, адрес может быть группой серверов.


syntax: fastcgi_pass_header имя
context: http, server, location

Директива разрешает передавать клиенту запрещённые для передачи строки.


syntax: fastcgi_read_timeout время
default: fastcgi_read_timeout 60
context: http, server, location

Директива задаёт таймаут при чтении ответа FastCGI-сервера. Таймаут устанавливается не на всю передачу ответа, а только между двумя операциями чтения. Если по истечении этого времени FastCGI-сервер ничего не передаст, то nginx закрывает соединение.


syntax: fastcgi_redirect_errors on|off

Директива переименована в fastcgi_intercept_errors.


syntax: fastcgi_send_timeout время
default: fastcgi_send_timeout 60
context: http, server, location

Директива задаёт таймаут при передаче запроса FastCGI-серверу. Таймаут устанавливается не на всю передачу запроса, а только между двумя операциями записи. Если по истечении этого времени FastCGI-сервер не примет новых данных, то nginx закрывает соединение.


syntax: fastcgi_store on | off | строка
default: fastcgi_store off
context: http, server, location

Директива разрешает сохранение на диск файлов. Параметр "on" сохраняет файлы в соответствии с путями, указаными в директивах alias или root. Параметр "off" запрещает сохранение файлов. Кроме того, имя файла можно явно задать с помощью строки с переменными:

fastcgi_store   /data/www$original_uri;

Время модификации файлов выставляется согласно полученной строке "Last-Modified" в заголовке ответа. Для сохранения файлов необходимо, чтобы они находился на том же разделе, что и каталог с временными файлами, задаваемый директивой fastcgi_temp_path для данного location.

Директиву можно использовать для создания локальных копий статических неизменяемых файлов, например:

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/;
}


syntax: fastcgi_store_access пользователи:права [пользователи:права] ...
default: fastcgi_store_access user:rw
context: http, server, location

Директива задаёт права доступа для создаваемых файлов и каталогов, например,

fastcgi_store_access  user:rw  group:rw  all:r;

Если заданы какие-либо права для groups или all, то права для user указывать необязательно:

fastcgi_store_access  group:rw  all:r;


syntax: fastcgi_temp_path путь [ уровень1 [ уровень2 [ уровень3 ] ] ]
default: fastcgi_temp_path fastcgi_temp
context: http, server, location

Директива задаёт имя каталога для хранения временных файлов полученных от другого сервера. В каталоге может использоваться иерархия подкаталогов до трёх уровней. Например, при такой конфигурации

fastcgi_temp_path  /spool/nginx/fastcgi_temp 1 2;
имя временного будет такого вида:
 
/spool/nginx/fastcgi_temp/7/45/00000123457


Параметры, передаваемые 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".

(C) Игорь Сысоев
http://sysoev.ru