В этой статье описана процедура установки высокопроизводительной связки nginx + php-fpm + eaccelerator
для операционной системы FreeBSD.
Важно отметить, что используемая связка весьма экономно нагружает память, и позволяет более эффективно использовать ресурсы вашего VDS.
Содержание |
Используемое ПО
- nginx (engine x) — это свободный Веб-сервер и почтовый прокси-сервер, работающий на Unix-подобных операционных системах (тестировалась сборка и работа на FreeBSD, GNU/Linux, Solaris, Mac OS X). Разрабатывается Игорем Сысоевым с 2002-го года для компании Rambler и постоянно модернизируется. Осенью 2004 года вышел первый публично доступный релиз.
- php-fpm — это патч для PHP, для использования PHP как FastCGI процесса в высоконагруженных системах. Устраняет ряд проблем мешающих использовать PHP в режиме FastCGI.
- eAccelerator является PHP-акселератором, основное назначение которого состоит в кэшировании бинарного представления кода. Он увеличивает производительность PHP скриптов за счет их кеширования в скомпилированном состоянии, тем самым предотвращая их постоянную перекомпиляцию. В результате происходит увеличение скорости их выполнения. eAccelerator обычно уменьшает нагрузку на сервер и увеличивает скорость исполнения PHP кода на величину от 1 до 10 раз.
Исходные настройки
Предполагается что домен, на котором будет работать данная связка имеет адрес mydomain.com, а корневым www каталогом является /home/www. Также использована возможность php-fpm изолировать (chroot) свои процессы в домашнем каталоге, для дополнительной безопасности (при взломе через уязвимые скрипты потери будут минимальны).
Установка
Nginx
cd /usr/ports/www/nginx-devel make install clean
В большинстве конфигураций необходимо отметить следующие пункты:
- [X] HTTP_MODULE
- [X] HTTP_PERL_MODULE
- [X] HTTP_REWRITE_MODULE
а если нужна поддержка SSL, то и
- [X] HTTP_SSL_MODULE
php-fpm
cd /usr/ports/lang fetch https://php-fpm.org/downloads/freebsd-port/php-5.2.10-fpm-0.5.13.tar.gz tar -zxf php-5.2.10-fpm-0.5.13.tar.gz cd php5-fpm make install clean
Отмечаем следующие пункты:
- [X] SUHOSIN
- [X] MULTIBYTE
- [X] MAILHEAD
- [X] PATHINFO
Под версию PHP 5.2.12 —
cd /usr/ports/lang fetch https://rit-kpi.org/php-fpm/php-5.2.12-fpm-0.6.tar.gz tar -zxf php-5.2.12-fpm-0.6.tar.gz cd php5-fpm make install clean
eAccelerator
cd /usr/ports/www/eaccelerator make install clean mkdir /tmp/eaccelerator chown www /tmp/eaccelerator chmod 0700 /tmp/eaccelerator
если в /etc/rc.conf установлено clear_tmp_enable=»YES»
то лучше
mkdir /var/tmp/eaccelerator chown www /var/tmp/eaccelerator chmod 0700 /var/tmp/eaccelerator
иначе при перезагрузке папка «eaccelerator» удалится
Редактируем /usr/local/etc/php.ini:
; eAccelerator ; Подключаем расширение zend_extension="eaccelerator.so" ; Включаем eAccelerator eaccelerator.enable="1" ; Максимальный размер кеша в мегабайтах eaccelerator.shm_size="64" ; Корневой каталог для хранения кеша eaccelerator.cache_dir="/tmp/eaccelerator" ; Встроенный оптимизатор кода eaccelerator.optimizer="1" ; Включаем проверку модификации PHP файлов. eaccelerator.check_mtime="1" ; Режим отладки eaccelerator.debug="0" ; Фильтр файлов, которые должны быть закэшированы eaccelerator.filter="" ; Максимально допустимое значение которое может быть ; отправлено в разделяемую память. По-умолчанию - без ограничений. eaccelerator.shm_max="0" ; Когда акселлератору потребуется отправить в разделяемую ; память какой-то объект и при этом в памяти для этого ; не окажется места, он попытается удалить файлы, которые ; не были запрошены в течении последних "shm_ttl" секунд. ; По-умолчанию, это значение равно "0" - не удалять ничего. eaccelerator.shm_ttl="3600" ; Когда акселлератору потребуется отправить в разделяемую ; память какой-то объект и при этом в памяти для этого ; не окажется места, он попытается удалить старые скрипты, ; если предыдущие такие попытки были не больше, чем ; "shm_prune_period" секунд назад.По-умолчанию, это значение ; равно "0" - не удалять ничего. eaccelerator.shm_prune_period="0" ; Включить или отключить кеширование скомпиленных скриптов ; _только_ на диск. Этот параметр не влияет на данные сессий ; и кеширование контента. По-умолчанию, значение 0, что означает ; что данные будут кешироваться и в памяти и на диске. eaccelerator.shm_only="0" ; Включить или отключить сжатие закешированного контента. ; По-умолчанию, "1" - сжимать. eaccelerator.compress="1" ; Уровень сжатия. По-умолчанию, "9" - максимум. eaccelerator.compress_level="9"
Настройка конфигурации
Настройка конфигурации php-fpm
Редактируем файл /usr/local/etc/php-fpm.conf:
<?xml version="1.0" ?> <configuration> <section name="global_options"> <value name="pid_file">/var/run/php-fpm.pid</value> <value name="error_log">/var/log/php-fpm.log</value> <value name="log_level">notice</value> <value name="emergency_restart_threshold">10</value> <value name="emergency_restart_interval">1m</value> Time limit on waiting child's reaction on signals from master <value name="process_control_timeout">5s</value> <value name="daemonize">yes</value> </section> <workers> Main pool <section name="pool"> <value name="name">main</value> <value name="listen_address">127.0.0.1:3000</value> <value name="listen_options"> <value name="backlog">-1</value> <value name="owner"></value> <value name="group"></value> <value name="mode">0666</value> </value> <value name="php_defines"> </value> <value name="user">www</value> <value name="group">www</value> <value name="pm"> <value name="style">static</value> <value name="max_children">1</value> <value name="apache_like"> <value name="StartServers">20</value> <value name="MinSpareServers">5</value> <value name="MaxSpareServers">35</value> </value> </value> <value name="request_execution_timeout">31s</value> <value name="rlimit_files">1024</value> <value name="rlimit_core">unlimited</value> chroot в домашнюю директорию <value name="chroot">/home/www</value> <value name="chdir"></value> <value name="catch_workers_output">yes</value> <value name="max_requests">500</value> <value name="allowed_clients">127.0.0.1</value> <value name="environment"> <value name="HOSTNAME">$HOSTNAME</value> <value name="PATH">/usr/local/bin:/usr/bin:/bin</value> <value name="TMP">/tmp</value> <value name="TMPDIR">/tmp</value> <value name="TEMP">/tmp</value> <value name="OSTYPE">$OSTYPE</value> <value name="MACHTYPE">$MACHTYPE</value> <value name="MALLOC_CHECK_">2</value> </value> </section> </workers> </configuration>
Позднее, могут быть добавлены дополнительные секции pool для виртуальных доменов, причем благодаря гибкости php-fpm, каждый из пулов может быть изолирован при помощи chroot. Это обеспечивает дополнительную безопасность (при взломе через уязвимые php скрипты потери будут минимальны).
Стартуем php:
/usr/local/etc/rc.d/php-fpm start
Добавляем запуск в /etc/rc.conf:
php_fpm_enable="YES"
Настройка конфигурации nginx
Редактируем файл /usr/local/etc/nginx/nginx.conf:
user www; worker_processes 2; pid /var/run/nginx.pid; error_log /var/log/nginx-error.log warn; events { worker_connections 1024; use kqueue; } http { include mime.types; default_type application/octet-stream; # log options log_format main '$remote_addr - $remote_user [$time_local] ' '"$request" $status $bytes_sent ' '"$http_referer" "$http_user_agent" ' '"$gzip_ratio"'; # nginx options sendfile on; tcp_nopush on; tcp_nodelay on; keepalive_timeout 65; server_tokens off; # fastcgi fastcgi_intercept_errors on; server { listen 80; server_name mydomain.com; access_log /var/log/nginx.mydomain.log main; location ~ \.php$ { fastcgi_pass 127.0.0.1:3000; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $fastcgi_script_name; include fastcgi_params; } location / { root /home/www/; index index.php index.html index.htm; } } }
Стартуем nginx:
/usr/local/etc/rc.d/nginx start
Добавляем запуск в /etc/rc.conf:
nginx_enable="YES"
Сервер готов к работе!
Просмотров: 991