Настройка сервера · 3 min read · Dec 03, 2025

Как настроить Apache2 с mod_fcgid и PHP5 на Mandriva 2009.1

Как настроить Apache2 с mod_fcgid и PHP5 на Mandriva 2009.1

Версия 1.0
Автор: Фалко Тимме
Следите за мной в Twitter

Этот учебник описывает, как вы можете установить Apache2 с mod_fcgid и PHP5 на Mandriva 2009.1. mod_fcgid является совместимой альтернативой более старому mod_fastcgi. Он позволяет вам выполнять PHP-скрипты с правами их владельцев, а не пользователя Apache.

Я не даю никаких гарантий, что это сработает для вас!

1 Предварительная заметка

Я использую сервер Mandriva 2009.1 в этом учебнике с именем хоста server1.example.com и IP-адресом 192.168.0.100.

Я создам два виртуальных хоста Apache в этом учебнике, www.example1.com и www.example2.com, чтобы продемонстрировать использование mod_fcgid.

2 Установка Apache2/mod_fcgi/PHP5

Сначала обновим нашу базу данных пакетов:

urpmi.update -a

Мы можем установить Apache2, mod_fcgid и PHP5 следующим образом (mod_fcgid требует apache-mpm-worker вместо apache-mpm-prefork, поэтому, если apache-mpm-prefork в настоящее время установлен, модули Apache, которые на него полагаются, будут удалены, такие как apache-mod_php):

urpmi apache-mpm-worker apache-mod_fcgid php-fcgi

[root@server1 ~]# urpmi apache-mpm-worker apache-mod_fcgid php-fcgi
Следующие пакеты должны быть удалены, чтобы другие могли быть обновлены:
apache-mod_perl-2.0.4-5mdv2009.1.x86_64
(из-за конфликтов с apache-mpm-worker-2.2.11-10.5mdv2009.1.x86_64)
apache-mod_php-5.2.9-1mdv2009.1.x86_64
(из-за конфликтов с apache-mpm-worker[>= 2.2.8]) (y/N) <– y
Чтобы удовлетворить зависимости, будут установлены следующие пакеты:
Пакет Версия Выпуск Архитектура
(среда “Основные обновления”)
apache-base 2.2.11 10.5mdv2009.1 x86_64
apache-mod_ssl 2.2.11 10.5mdv2009.1 x86_64
apache-modules 2.2.11 10.5mdv2009.1 x86_64
apache-mpm-prefork 2.2.11 10.5mdv2009.1 x86_64
apache-mpm-worker 2.2.11 10.5mdv2009.1 x86_64
php-fcgi 5.2.9 6.2mdv2009.1 x86_64
(среда “Содействие”)
apache-mod_fcgid 2.2 6mdv2009.1 x86_64
6MB дискового пространства будет освобождено.
977KB пакетов будет загружено.
Продолжить установку 7 пакетов? (Y/n) <– Y

Далее откроем /etc/php.ini…

vi /etc/php.ini

… и добавим строку cgi.fix_pathinfo = 1 в самом конце файла:

| [...] cgi.fix_pathinfo = 1 |

Затем перезапустим Apache:

/etc/init.d/httpd restart

3 Создание виртуальных хостов для www.example1.com и www.example2.com

Теперь я создам два виртуальных хоста, www.example1.com (с корнем документа /var/www/web1/web) и www.example2.com (с корнем документа /var/www/web2/web). www.example1.com будет принадлежать пользователю и группе web1, а www.example2.com - пользователю и группе web2.

Сначала создадим пользователей и группы:

groupadd web1  
groupadd web2  
useradd -s /bin/false -d /var/www/web1 -m -g web1 web1  
useradd -s /bin/false -d /var/www/web2 -m -g web2 web2  
chmod 755 /var/www/web1  
chmod 755 /var/www/web2

Затем создадим корни документов и сделаем их принадлежащими пользователям/группам web1 и web2 соответственно:

mkdir -p /var/www/web1/web  
chown web1:web1 /var/www/web1/web  
mkdir -p /var/www/web2/web  
chown web2:web2 /var/www/web2/web

Мы будем запускать PHP с помощью suExec; корень документа suExec - это /var/www, как показывает следующая команда:

/usr/sbin/suexec -V
[root@server1 ~]# /usr/sbin/suexec -V  
 -D AP_DOC_ROOT="/var/www"  
 -D AP_GID_MIN=100  
 -D AP_HTTPD_USER="apache"  
 -D AP_LOG_EXEC="/var/log/httpd/suexec_log"  
 -D AP_SAFE_PATH="/usr/local/bin:/usr/bin:/bin"  
 -D AP_SUEXEC_UMASK=077  
 -D AP_UID_MIN=100  
 -D AP_USERDIR_SUFFIX="public_html"  
[root@server1 ~]#

Поэтому мы не можем вызывать бинарный файл PHP (/usr/bin/php-fcgi) напрямую, потому что он находится вне корня документа suExec. Поскольку suExec не позволяет создавать символические ссылки, единственный способ решить проблему - создать обертку для каждого веб-сайта в подкаталоге /var/www; обертка затем вызовет бинарный файл PHP /usr/bin/php-fcgi. Скрипт обертки должен принадлежать пользователю и группе каждого веб-сайта, поэтому нам нужен один скрипт обертки для каждого веб-сайта. Я собираюсь создать скрипты обертки в подкаталогах /var/www/php-fcgi-scripts, например, /var/www/php-fcgi-scripts/web1 и /var/www/php-fcgi-scripts/web2.

mkdir -p /var/www/php-fcgi-scripts/web1  
mkdir -p /var/www/php-fcgi-scripts/web2
vi /var/www/php-fcgi-scripts/web1/php-fcgi-starter

| #!/bin/sh PHPRC=/etc/ export PHPRC export PHP_FCGI_MAX_REQUESTS=5000 export PHP_FCGI_CHILDREN=8 exec /usr/bin/php-fcgi |

vi /var/www/php-fcgi-scripts/web2/php-fcgi-starter

| #!/bin/sh PHPRC=/etc/ export PHPRC export PHP_FCGI_MAX_REQUESTS=5000 export PHP_FCGI_CHILDREN=8 exec /usr/bin/php-fcgi |

Строка PHPRC содержит каталог, в котором находится файл php.ini (т.е. /etc/ переводится в /etc/php.ini). PHP_FCGI_MAX_REQUESTS - это максимальное количество запросов, прежде чем процесс fcgid будет остановлен и запущен новый. PHP_FCGI_CHILDREN определяет количество дочерних процессов PHP, которые будут запущены.

Скрипты php-fcgi-starter должны быть исполняемыми, и они (и каталоги, в которых они находятся) должны принадлежать пользователю и группе веб-сайта:

chmod 755 /var/www/php-fcgi-scripts/web1/php-fcgi-starter  
chmod 755 /var/www/php-fcgi-scripts/web2/php-fcgi-starter  
chown -R web1:web1 /var/www/php-fcgi-scripts/web1  
chown -R web2:web2 /var/www/php-fcgi-scripts/web2

Теперь мы создадим виртуальные хосты Apache для www.example1.com и www.example2.com. Добавьте следующие два виртуальных хоста в конец /etc/httpd/conf/httpd.conf:

vi /etc/httpd/conf/httpd.conf

| [...] NameVirtualHost *:80 ServerName www.example1.com ServerAlias example1.com ServerAdmin [email protected] DocumentRoot /var/www/web1/web/ SuexecUserGroup web1 web1 PHP_Fix_Pathinfo_Enable 1 Options +ExecCGI AllowOverride All AddHandler fcgid-script .php FCGIWrapper /var/www/php-fcgi-scripts/web1/php-fcgi-starter .php Order allow,deny Allow from all # ErrorLog /var/log/apache2/error.log # CustomLog /var/log/apache2/access.log combined ServerSignature Off ServerName www.example2.com ServerAlias example2.com ServerAdmin [email protected] DocumentRoot /var/www/web2/web/ SuexecUserGroup web2 web2 PHP_Fix_Pathinfo_Enable 1 Options +ExecCGI AllowOverride All AddHandler fcgid-script .php FCGIWrapper /var/www/php-fcgi-scripts/web2/php-fcgi-starter .php Order allow,deny Allow from all # ErrorLog /var/log/apache2/error.log # CustomLog /var/log/apache2/access.log combined ServerSignature Off |

Убедитесь, что вы заполнили правильные пути (и правильного пользователя и группу в строках SuexecUserGroup).

Перезагрузите Apache после этого:

/etc/init.d/httpd reload
Share: X/Twitter LinkedIn

Get new posts in your inbox

No spam. Unsubscribe anytime.