Попросили тут намедни настроит кастом сервак без панели, решил под это дело настроить apache2-mpm-worker + php5-fcgi + suexec. Выбор поставил на mpm-worker так как до этого уже был один сервер на этой модели, и показал себя хорошо, причем кто бы мне что ни говорил – но под каждые задачи – свои рекомендации.
Первый мой опыт был – это основной и бекапный сервер для ТДС Sutra на который сливалось в сутки примерно 500к уников и порядка 3кк суммарного трафа. Это дело у меня работало на основном сервере с apache2-mpm-prefork, в целом все гуд, работает, не тупит, клиент рад. Но когда встал вопрос по настройке бекапного сервера, решил попробовать настроить на worker. После настройки бекапа + worker, для тестов какое то время гнал траф на бекапный сервак, по конфигу 1в1 как и основной, в итоге как по мне для Sutra – apache2-mpm-worker показал себя отлично, так и оставил работать, не стал что либо менять, основной в режиме prefork, запасной в режиме worker. Так что все любителям связи nginx+php-fpm не стоит списывать со счетов старый добрый apache. Вот и сейчас – сервер для тестов и настройки биржи трафика – пока что сделал по минимум, то что просили то и сделал, дальше будет видно.
Конфиг сервера минимальный. В общем и целом – шпаргалка для себя.
1 2 3 |
# apt-get install apache2-mpm-worker libapache2-mod-fcgid apache2-suexec-custom # a2enmod fcgid suexec actions # apt-get install php5-cgi php5-cli |
Далее погнали настраивать.
cat /etc/apache2/sites-available/traf.domain.com
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
<VirtualHost *:80> ServerAdmin admin@search.domain.com ServerName search.domain.com ServerAlias www.search.domain.com *.search.domain.com SuexecUserGroup search search DocumentRoot /home/search.domain.com/public_html ErrorLog /var/log/apache2/search.domain.com-error.log CustomLog /var/log/apache2/search.domain.com-access.log combined <Directory /home/search.domain.com/public_html> AddType application/x-httpd-php .php AddHandler fcgid-script .php AddHandler fcgid-script .php5 FCGIWrapper /home/search.domain.com/fcgi-bin/php .php FCGIWrapper /home/search.domain.com/fcgi-bin/php .php5 Options +ExecCGI AllowOverride All Order Allow,Deny allow from all </Directory> LogLevel warn ServerSignature On </VirtualHost> |
Далее настраиваем php5-fcgi и оболочку для выполнения php.
cat /home/search.domain.com/fcgi-bin/php
1 2 3 4 5 6 7 8 9 10 |
#!/bin/bash PHPRC=$PWD/../etc/php5 export PHPRC umask 022 export PHP_FCGI_CHILDREN PHP_FCGI_MAX_REQUESTS=99999 export PHP_FCGI_MAX_REQUESTS SCRIPT_FILENAME=$PATH_TRANSLATED export SCRIPT_FILENAME exec /usr/bin/php5-cgi |
Добавляем право на выполнение:
1 |
# chmod +x /home/search.domain.com/fcgi-bin/php |
Далее настраиваем fcgi модуль apache2*:
upd: тут параметры для apache2-worker нужно ставить по кол-ву ядре процессора, если ставить сильно высокие значения – у меня это привело к ошике “mod_fcgid: can’t apply process slot for” и наоборот низкие значения в режиме префорк привели к исчерпанию свободных процессов apache2 на нагруженном сервере:
1 |
FcgidMaxProcesses |
1 |
FcgidMaxProcessesPerClass |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
<IfModule mod_fcgid.c> AddHandler fcgid-script .fcgi FcgidConnectTimeout 400 PHP_Fix_Pathinfo_Enable 1 DefaultMaxClassProcessCount 2 FcgidMaxProcesses 5000 FcgidMaxProcessesPerClass 500 FcgidMinProcessesPerClass 3 FcgidMaxRequestsPerProcess 600 FcgidIOTimeout 900 FcgidProcessLifeTime 3600 FcgidIdleTimeout 300 FcgidIdleScanInterval 120 FcgidBusyTimeout 300 FcgidBusyScanInterval 115 FcgidErrorScanInterval 3 FcgidSpawnScore 1 FcgidTerminationScore 2 FcgidTimeScore 1 FcgidSpawnScoreUpLimit 10 IPCCommTimeout 300 </IfModule> |
Настраиваем suexec, там все просто:
/etc/apache2/suexec/www-data
1 2 |
/home public_html |
Добавляем пользователя от которого будут выполняться скрипты:
1 2 |
# useradd search # usermod -a -G search www-data |
После этого копируем php.ini
1 |
cp /etc/php/cgi/php.ini /home/search.domain.com/etc/php |
Запускаем apache2 и в принципе все.