Apache. Документация на русском


Разделы:   1    2    3    4    5    6    7    8    9      10      11    12    13    14    15    16  

Раздел 10. Модули Апача

Пункты:   85    86    88    89    90    91    92    93    94    95    96    97    98    99    100    101    102    103    104    105    106    107    108    109    110    111    112    113    114    115    116    117    118    119    120    121    122    123    124    125    126    127    128    129    130    131    132    133    134    135    136    137    138    139    140    141    142    143    144    145    146    147    148    149    150    151    152    153    154    155    156    157    158    159    160    161    163    164    165    166    167    168    170    171    172    173      174      175    176    177    178    179    180    181    182    183    184    185    186    187    188    189    190    191    192    193    194    195    196    197    198    199    200    201    203    204    205    206    207    208    209    210    211    212    213  

 <         > 
  RU            EN  

Пункт 174. Модуль Apache mod_proxy_fcgi

Этот модуль требует обслуживания mod_proxy . Он обеспечивает поддержку протокола FastCGI.

Таким образом, для того, чтобы получить возможность обработки протокола FastCGI , mod_proxy он mod_proxy_fcgi должен присутствовать и на сервере.

В отличие от mod_fcgid и mod_fastcgi, mod_proxy_fcgi не имеет возможности запуска процесса приложения; fcgistarter предоставляется (на некоторых платформах) для этой цели. В качестве альтернативы внешний запуск или управление процессами могут быть доступны в используемой среде приложения FastCGI.

Предупреждение

Не включайте прокси, пока не защитите свой сервер. Открытые прокси-серверы опасны как для вашей сети, так и для Интернета в целом.

Примеры

Помните, чтобы следующие примеры работали, вы должны включить mod_proxy и mod_proxy_fcgi .

Один экземпляр приложения

 ProxyPass "/myapp/" "fcgi://localhost:4000/" 

mod_proxy_fcgi по умолчанию отключает повторное использование соединения, поэтому после завершения запроса соединение НЕ будет удерживаться открытым дочерним процессом httpd и не будет использоваться повторно. Если приложение FastCGI может обрабатывать одновременные соединения с httpd, вы можете согласиться на повторное использование соединения, как показано в следующем примере:

Один экземпляр приложения, повторное использование соединения (2.4.11 и более поздние версии)

 ProxyPass "/myapp/" "fcgi://localhost:4000/" enablereuse=on 

В следующем примере URI запроса передается в качестве пути к файловой системе для запуска демона PHP-FPM. URL-адрес запроса неявно добавляется ко второму параметру. Имя хоста и порт после fcgi:// — это место, где PHP-FPM прослушивает. Объединение/повторное использование соединений включено.

PHP-FPM

 ProxyPassMatch "^/myapp/.*\.php(/.*)?$" "fcgi://localhost:9000/var/www/" enablereuse=on 

В следующем примере URI запроса передается в качестве пути к файловой системе для запуска демона PHP-FPM. В этом случае PHP-FPM прослушивает сокет домена unix (UDS). Требуется 2.4.9 или более поздняя версия. При таком синтаксисе имя хоста и необязательный порт после fcgi:// игнорируются.

PHP-FPM с UDS

 ProxyPassMatch "^/(.*\.php(/.*)?)$" "unix:/var/run/php5-fpm.sock|fcgi://localhost/var/www/" 

Для сбалансированного шлюза требуется mod_proxy_balancer по крайней мере один модуль алгоритма балансировки нагрузки, например mod_lbmethod_byrequests , в дополнение к модулям прокси, перечисленным выше. mod_lbmethod_byrequests является значением по умолчанию и будет использоваться для этого примера конфигурации.

Сбалансированный шлюз для нескольких экземпляров приложений

 ProxyPass "/myapp/" "балансировщик://myappcluster/"
<Прокси "balancer://myappcluster/">
 BalancerMember "fcgi://localhost:4000"
 BalancerMember "fcgi://localhost:4001"
</прокси> 

Вы также можете заставить запрос обрабатываться как запрос обратного прокси-сервера, создав подходящий сквозной обработчик. В приведенном ниже примере конфигурации все запросы PHP-скриптов будут передаваться на указанный сервер FastCGI с использованием обратного прокси-сервера. Эта функция доступна в Apache HTTP Server 2.4.10 и более поздних версиях. Из соображений производительности вы захотите определить работника, представляющего тот же бэкэнд fcgi://. Преимущество этой формы заключается в том, что она позволяет нормальное сопоставление URI с именем файла на сервере, а результат локальной файловой системы передается на серверную часть. Когда FastCGI настроен таким образом, сервер может вычислить наиболее точную PATH_INFO.

Прокси через обработчик

 <Соответствие файлов "\.php$">
 # Примечание: меняется только часть /path/to/app.sock
 SetHandler "прокси:unix:/путь/к/app.sock|fcgi://localhost/"
</FilesMatch>
# Определить подходящего работника.
# Часть, совпадающая с SetHandler, это та часть, которая
# следует за трубой. Если вам нужно различать, "localhost; может
# быть уникальным.
<Прокси "fcgi://localhost/" enablereuse=on max=10>
</прокси>
<Соответствие файлов...>
 SetHandler "прокси:fcgi://localhost:9000"
</FilesMatch>
<Соответствие файлов...>
 SetHandler "прокси: балансировщик://myappcluster/"
</FilesMatch> 

Переменные среды

В дополнение к директивам конфигурации, которые управляют поведением mod_proxy , существует ряд переменных среды , которые управляют поставщиком протокола FCGI:

прокси-fcgi-pathinfo
При настройке с помощью или ProxyPass не будет устанавливать переменную среды PATH_INFO . Это позволяет внутреннему серверу FCGI правильно определять SCRIPT_NAME и Script-URI и соответствовать разделу 3.3 RFC 3875. Если вместо этого вам нужно сгенерировать «наилучшее предположение» для PATH_INFO , установите этот env-var. Это обходной путь для ошибки в некоторых реализациях FCGI. Для этой переменной можно задать несколько значений, чтобы настроить выбор наилучшего предположения (только в версии 2.4.11 и более поздних): ProxyPassMatch mod_proxy_fcgi mod_proxy_fcgi
первая точка
PATH_INFO отделен от косой черты после первого "." в URL.
последняя точка
PATH_INFO отделен от косой черты после последнего " ." в URL.
полный
PATH_INFO вычисляется при попытке сопоставить URL-адрес с локальной файловой системой.
не убежать
PATH_INFO — это компонент пути URL-адреса, неэкранированный/декодированный.
любое другое значение
PATH_INFO совпадает с компонентом пути URL-адреса. Изначально это была единственная опция proxy-fcgi-pathinfo.


Директива ProxyFCGIBackendType

Описание:Укажите тип серверного приложения FastCGI.
Синтаксис: ProxyFCGIBackendType FPM|GENERIC
По умолчанию: ProxyFCGIBackendType FPM
Контекст:конфигурация сервера, виртуальный хост, каталог, .htaccess
Положение дел:Расширение
Модуль:mod_proxy_fcgi
Совместимость:Доступно в версии 2.4.26 и выше

Эта директива позволяет указать тип серверного приложения FastCGI. Некоторые серверы FastCGI, такие как PHP-FPM, используют исторические особенности переменных среды для определения типа используемого прокси-сервера. Установите для этой директивы значение «GENERIC», если у вашего приложения, отличного от PHP-FPM, возникают проблемы с интерпретацией переменных среды, таких как SCRIPT_FILENAME или PATH_TRANSLATED, как установлено сервером.

Одним из примеров значений, которые изменяются в зависимости от настройки этой директивы, является SCRIPT_FILENAME. Исторически при использовании перед mod_proxy_fcgi SCRIPT_FILENAME стояла строка «proxy:fcgi://». Эта переменная — это то, что некоторые универсальные приложения FastCGI будут читать как входные данные своего сценария, но PHP-FPM удалит префикс, а затем вспомнит, что он разговаривал с Apache. В версиях с 2.4.21 по 2.4.25 этот префикс автоматически удалялся сервером, что нарушало способность PHP-FPM обнаруживать Apache и взаимодействовать с ним в некоторых сценариях.



Директива ProxyFCGISetEnvIf

Описание:Разрешить исправление переменных, отправляемых на серверы FastCGI.
Синтаксис: ProxyFCGISetEnvIf conditional-expression [!]environment-variable-name [value-expression]
Контекст:конфигурация сервера, виртуальный хост, каталог, .htaccess
Положение дел:Расширение
Модуль:mod_proxy_fcgi
Совместимость:Доступно в версии 2.4.26 и выше

Непосредственно перед передачей запроса настроенному серверу FastCGI ядро веб-сервера устанавливает ряд переменных среды на основе сведений о текущем запросе. Программы FastCGI часто используют эти переменные среды в качестве входных данных, которые определяют, какие базовые сценарии они будут обрабатывать или какие выходные данные они непосредственно производят.

Примеры заслуживающих внимания переменных среды:

  • SCRIPT_NAME
  • SCRIPT_FILENAME
  • REQUEST_URI
  • PATH_INFO
  • PATH_TRANSLATED

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

Синтаксис параметра:

условное выражение
Задает выражение, которое определяет, будет ли изменена следующая за ним переменная среды. Для получения информации о синтаксисе выражения см. следующие примеры или полную спецификацию в документации ap_expr.
имя-переменной-среды
Указывает изменяемую переменную среды CGI, например PATH_INFO. Если перед ним стоит восклицательный знак, переменная не будет установлена.
выражение-значение
Указывает замещающее значение для предыдущей переменной среды. Обратные ссылки, такие как «$1», могут быть включены из захватов регулярных выражений в условное выражение . Если опущено, переменной присваивается (или переопределяется) пустая строка, но см. примечание ниже.
 # Базовое безусловное переопределение
ProxyFCGISetEnvIf "true" PATH_INFO "/example"
# Использовать переменную окружения в значении
ProxyFCGISetEnvIf "true" PATH_INFO "%{reqenv:SCRIPT_NAME}"
# Использовать захваты в условиях и обратные ссылки в замене
ProxyFCGISetEnvIf "reqenv('PATH_TRANSLATED') =~ m|(/.*prefix)(\d+)(.*)|" PATH_TRANSLATED "$1$3" 

Примечание. Не установлено или пусто.

Следующее будет отключено VARIABLE , что предотвратит его отправку на сервер FastCGI:
 ProxyFCGISetEnvIf true !ПЕРЕМЕННАЯ 
Принимая во внимание, что следующее удалит любое существующее значение ( VARIABLE установив его в пустую строку), но пустое VARIABLE все равно будет отправлено на сервер:
 ProxyFCGISetEnvIf true ПЕРЕМЕННАЯ 
Спецификация CGI/1.1 не различает переменную с пустым значением и несуществующую переменную. Однако многие реализации CGI и FastCGI различают (или позволяют сценариям различать) их. Выбор того, что использовать, зависит от вашей реализации и причины изменения переменной.

 <         > 

Пункты:   85    86    88    89    90    91    92    93    94    95    96    97    98    99    100    101    102    103    104    105    106    107    108    109    110    111    112    113    114    115    116    117    118    119    120    121    122    123    124    125    126    127    128    129    130    131    132    133    134    135    136    137    138    139    140    141    142    143    144    145    146    147    148    149    150    151    152    153    154    155    156    157    158    159    160    161    163    164    165    166    167    168    170    171    172    173      174      175    176    177    178    179    180    181    182    183    184    185    186    187    188    189    190    191    192    193    194    195    196    197    198    199    200    201    203    204    205    206    207    208    209    210    211    212    213  

Рейтинг@Mail.ru