Настраиваем fcgid под apache22 во FreeBSD | Apache, FreeBSD

Для увеличения производительности веб сервера сегодня ставим fcgid на апач (сервера у меня не настолько загружены чтобы переходить на nginix или lighttpd). Mod_fcgid написан специально для апача второй ветки и является продолжением разработки fastCGI.


Первое – апач должен быть собран с suexec. Делаем:

#cd /usr/ports/www/apache22
#make config

и смотрим отмечена ли опция отвечающая за suexec.

Далее – php должен быть собран с fastCGI.

Собрали поставили.

Далее ставим mod_fcgid

#cd /usr/ports/www/mod_fcgid
#make install clean

Начинаем конфигурировать.
Создаем враппер:

#cd /usr/local/bin/
#touch /usr/local/bin/php-wrapper

В файл вставляем:

#!/bin/sh
# Set desired PHP_FCGI_* environment variables.
# Example:
# PHP FastCGI processes exit after 500 requests by default.
PHP_FCGI_MAX_REQUESTS=10000
export PHP_FCGI_MAX_REQUESTS
# Replace with the path to your FastCGI-enabled PHP executable
exec /usr/local/bin/php-cgi

Выставляем права на запуск. Здесь есть подводный камень – можно получить в логах апача ошибку:

Software caused connection abort: mod_fcgid: error reading data from FastCGI server, referer: http://server.ru/index.php

После установки модуля я выставил права запуска только для рута и получил такую ошибку (Internal Server Error, строка из лога – выше). Расширил права на запуск для группы, группу выставил под которой работает апач (www) – всё нормально заработало.

Далее следуем инструкции. Добавляем в конфиг апача строку

LoadModule fcgid_module libexec/apache22/mod_fcgid.so

Далее конфигурируем рутовую директорию сервера добавляем секцию :

<Directory "/usr/local/www/apache22/data">
    AddHandler      fcgid-script .php
    Options +ExecCGI
    FcgidWrapper /usr/local/bin/php-wrapper .php
</Directory>

Важная вещь – директивы AddHandler и FcgidWrapper должны применяться к конкретной локации – это либо <Directory> либо <Location> и т.д. Если мы просто добавим приведенные выше директивы в конфиг апача (например в конец файла) – то вполне вероятно получим ошибку:

You don't have permission to access / on this server.

Можно конфигурировать отдельные виртуальные хосты.

Для проверки создаем файл типа phpinfo.php бросаем его в корень сервера и пишем в файл:

<?php
phpinfo();
?>

Заходим на сервер http://server.ru/phpinfo.php и смотрим что у нас в Server API. Должно быть CGI/FastCGI

 

Мануал по fcgid здесь – http://httpd.apache.org/mod_fcgid/mod/mod_fcgid.html