Модуль ngx_http_scgi_module |
Разделы
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Модуль Пример конфигурации
location / { include scgi_params; scgi_pass localhost:9000; }
Директивы
Задаёт локальный IP-
Задаёт
Разрешает или запрещает использовать буферизацию ответов SCGI-сервера. Если буферизация включена, то nginx принимает ответ SCGI-сервера как можно быстрее, сохраняя его в буферы, заданные директивами scgi_buffer_size и scgi_buffers. Если ответ не вмещается целиком в память, то его часть может быть записана на диск во временный файл. Запись во временные файлы контролируется директивами scgi_max_temp_file_size и scgi_temp_file_write_size. Если буферизация выключена, то ответ синхронно передаётся клиенту сразу же по мере его поступления. nginx не пытается считать весь ответ SCGI-сервера. Максимальный размер данных, который nginx может принять от сервера за один раз, задаётся директивой scgi_buffer_size.
Буферизация может быть также включена или выключена путём передачи
значения “
Задаёт
При включённой буферизации ответов
SCGI-сервера, ограничивает суммарный
Задаёт зону разделяемой памяти, используемой для кэширования.
Одна и та же зона может использоваться в нескольких местах.
Параметр
Задаёт условия, при которых ответ не будет браться из кэша. Если значение хотя бы одного из строковых параметров непустое и не равно “0”, то ответ не берётся из кэша: scgi_cache_bypass $cookie_nocache $arg_nocache$arg_comment; scgi_cache_bypass $http_pragma $http_authorization; Можно использовать совместно с директивой scgi_no_cache.
Задаёт ключ для кэширования, например, scgi_cache_key localhost:9000$request_uri;
Эта директива появилась в версии 1.1.12. Если включено, одновременно только одному запросу будет позволено заполнить новый элемент кэша, идентифицируемый согласно директиве scgi_cache_key, передав запрос на SCGI-сервер. Остальные запросы этого же элемента будут либо ожидать появления ответа в кэше, либо освобождения блокировки этого элемента, в течение времени, заданного директивой scgi_cache_lock_timeout.
Эта директива появилась в версии 1.1.12. Задаёт таймаут для scgi_cache_lock.
Если метод запроса клиента указан в этой директиве,
то ответ будет закэширован.
Методы “
Задаёт
Задаёт путь и другие параметры кэша.
Данные кэша хранятся в файлах.
Именем файла в кэше является результат функции MD5
от ключа кэширования.
Параметр scgi_cache_path /data/nginx/cache levels=1:2 keys_zone=one:10m; имена файлов в кэше будут такого вида: /data/nginx/cache/c/29/b7f54b2df7773722d382f4809d65029c
Кэшируемый ответ сначала записывается во временный файл, а потом этот файл переименовывается. Начиная с версии 0.8.9, временные файлы и кэш могут располагаться на разных файловых системах. Однако нужно учитывать, что в этом случае вместо дешёвой операции переименовывания в пределах одной файловой системы файл копируется с одной файловой системы на другую. Поэтому лучше, если кэш будет находиться на той же файловой системе, что и каталог с временными файлами, задаваемый директивой scgi_temp_path для данного location.
Кроме того, все активные ключи и информация о данных хранятся в зоне
разделяемой памяти,
Если к данным кэша не обращаются в течение времени, заданного параметром
Специальный процесс “cache manager” следит за максимальным размером кэша,
заданным параметром
Через минуту после старта активируется специальный процесс “cache loader”,
который загружает в зону кэша информацию о ранее закэшированных данных,
хранящихся на файловой системе.
Загрузка происходит итерациями.
За одну итерацию загружается не более
Эта директива появилась в версии 1.5.7. Задаёт условия, при которых запрос будет считаться запросом на очистку кэша. Если значение хотя бы одного из строковых параметров непустое и не равно “0”, то запись в кэше с соответствующим ключом кэширования удаляется. В результате успешной операции возвращается ответ с кодом 204 (No Content).
Если ключ кэширования
запроса на очистку заканчивается
звёздочкой (“ Пример конфигурации: scgi_cache_path /data/nginx/cache keys_zone=cache_zone:10m; map $request_method $purge_method { PURGE 1; default 0; } server { ... location / { scgi_pass http://backend; scgi_cache cache_zone; scgi_cache_key $uri; scgi_cache_purge $purge_method; } }
Эта директива появилась в версии 1.5.7. Разрешает ревалидацию просроченных элементов кэша при помощи условных запросов с полем заголовка “If-Modified-Since”.
Определяет, в каких случаях можно использовать устаревший закэшированный ответ, если при работе с SCGI-сервером возникла ошибка. Параметры директивы совпадают с параметрами директивы scgi_next_upstream.
Кроме того, дополнительный параметр Чтобы минимизировать число обращений к SCGI-серверам при заполнении нового элемента кэша, можно воспользоваться директивой scgi_cache_lock.
Задаёт время кэширования для разных кодов ответа. Например, директивы scgi_cache_valid 200 302 10m; scgi_cache_valid 404 1m; задают время кэширования 10 минут для ответов с кодами 200 и 302 и 1 минуту для ответов с кодом 404.
Если указано только scgi_cache_valid 5m; то кэшируются только ответы 200, 301 и 302.
Кроме того, можно кэшировать любые ответы с помощью параметра
scgi_cache_valid 200 302 10m; scgi_cache_valid 301 1h; scgi_cache_valid any 1m;
Параметры кэширования могут также быть заданы непосредственно
в заголовке ответа.
Такой способ приоритетнее, чем задание времени кэширования с помощью директивы.
Поле заголовка “X-Accel-Expires” задаёт время кэширования
ответа в секундах.
Значение 0 запрещает кэшировать ответ.
Если значение начинается с префикса
Задаёт таймаут для установления соединения с SCGI-сервером. Необходимо иметь в виду, что этот таймаут обычно не может превышать 75 секунд.
По умолчанию
nginx не передаёт клиенту поля заголовка “Status” и
“X-Accel-...” из ответа SCGI-сервера.
Директива
Определяет, закрывать ли соединение с SCGI-сервером в случае, если клиент закрыл соединение, не дождавшись ответа.
Запрещает обработку некоторых полей заголовка из ответа SCGI-сервера. В директиве можно указать поля “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). Если не запрещено, обработка этих полей заголовка заключается в следующем:
Определяет, передавать ли клиенту ответы SCGI-сервера с кодом больше либо равным 300, или же перенаправлять их на обработку nginx’у с помощью директивы error_page.
Если включена буферизация ответов
SCGI-сервера, и ответ не вмещается целиком в буферы,
заданные директивами scgi_buffer_size и
scgi_buffers, часть ответа может быть записана во временный файл.
Эта директива задаёт максимальный Значение 0 отключает возможность буферизации ответов во временные файлы.
Определяет, в каких случаях запрос будет передан следующему серверу:
Необходимо понимать, что передача запроса следующему серверу возможна только при условии, что клиенту ещё ничего не передавалось. То есть, если ошибка или таймаут возникли в середине передачи ответа, то исправить это уже невозможно.
Директива также определяет, что считается неудачной попыткой работы с
сервером.
Случаи
Задаёт условия, при которых ответ не будет сохраняться в кэш. Если значение хотя бы одного из строковых параметров непустое и не равно “0”, то ответ не будет сохранён: scgi_no_cache $cookie_nocache $arg_nocache$arg_comment; scgi_no_cache $http_pragma $http_authorization; Можно использовать совместно с директивой scgi_cache_bypass.
Задаёт
Стандартные
переменные
окружения CGI
должны передаваться как заголовки SCGI, см. файл location / { include scgi_params; ... }
Если директива указана с scgi_param HTTPS $https if_not_empty;
Задаёт адрес SCGI-сервера. Адрес может быть указан в виде доменного имени или адреса, и порта, например, scgi_pass localhost:9000; или в виде пути UNIX-сокета: scgi_pass unix:/tmp/scgi.socket;
Если доменному имени соответствует несколько адресов, то все они будут использоваться по очереди (round-robin). И, кроме того, адрес может быть группой серверов.
Разрешает передавать от SCGI-сервера клиенту запрещённые для передачи поля заголовка.
Задаёт таймаут при чтении ответа SCGI-сервера. Таймаут устанавливается не на всю передачу ответа, а только между двумя операциями чтения. Если по истечении этого времени SCGI-сервер ничего не передаст, соединение закрывается.
Позволяет запретить передачу исходного тела запроса на SCGI-сервер. См. также директиву scgi_pass_request_headers.
Позволяет запретить передачу полей заголовка исходного запроса на SCGI-сервер. См. также директивы scgi_pass_request_body.
Задаёт таймаут при передаче запроса SCGI-серверу. Таймаут устанавливается не на всю передачу запроса, а только между двумя операциями записи. Если по истечении этого времени SCGI-сервер не примет новых данных, соединение закрывается.
Разрешает сохранение на диск файлов.
Параметр scgi_store /data/www$original_uri;
Время изменения файлов выставляется согласно полученному полю “Last-Modified” в заголовке ответа. Ответ сначала записывается во временный файл, а потом этот файл переименовывается. Начиная с версии 0.8.9, временный файл и постоянное место хранения ответа могут располагаться на разных файловых системах. Однако нужно учитывать, что в этом случае вместо дешёвой операции переименовывания в пределах одной файловой системы файл копируется с одной файловой системы на другую. Поэтому лучше, если сохраняемые файлы будут находиться на той же файловой системе, что и каталог с временными файлами, задаваемый директивой scgi_temp_path для данного location. Директиву можно использовать для создания локальных копий статических неизменяемых файлов, например, так: location /images/ { root /data/www; error_page 404 = /fetch$uri; } location /fetch/ { internal; scgi_pass backend:9000; ... scgi_store on; scgi_store_access user:rw group:rw all:r; scgi_temp_path /data/temp; alias /data/www/; }
Задаёт права доступа для создаваемых файлов и каталогов, например, scgi_store_access user:rw group:rw all:r;
Если заданы какие-либо права для scgi_store_access group:rw all:r;
Ограничивает
Задаёт имя каталога для хранения временных файлов с данными, полученными от SCGI-серверов. В каталоге может использоваться иерархия подкаталогов до трёх уровней. Например, при такой конфигурации scgi_temp_path /spool/nginx/scgi_temp 1 2; временный файл будет следующего вида: /spool/nginx/scgi_temp/7/45/00000123457
|