Unix > FreeBsd 8, настройка nginx-apache-eaccelerator
08.02.2013 16:36:42
Наиболее часто встречающиеся слова в статье:
[eaccelerator] [/strong] [href="http] [//drupals] [blogsite] [виртуальному ] [серверу ] [скрипты] [install] [proxy_set_header]
Статья:
Снизим нагрузку на сервер и уменьшим время отклика, поставив между посетителем и Apache легкий nginx. Он будет часть запросов перенаправлять к Apache, а часть — обслуживать сам.
О веб-сервере Apache:
его модульная архитектура дает ему огромные возможности, которые, однако, большинство из нас никогда не будет использовать. Ценой за эту функциональность является большой расход системных ресурсов.
Обычный сайт, как правило, содержит больше статичных файлов (изображения, файлы стилей и JavaScript), чем скриптов. Для того, чтобы передать эти файлы посетителю, не требуется никакой специальный функционал, задача предельно проста. Следовательно и обрабатывать такие запросы нужно простым, легковесным веб-сервером. Таким, как nginx.
Nginx (engine x) — свободный Веб-сервер и почтовый прокси-сервер, работающий на Unix-подобных операционных системах (тестировалась сборка и работа на FreeBSD, GNU/Linux, Solaris, Mac OS X).
Заявленый функционал nginx, как HTTP-сервера:
- Обслуживание статических запросов, индексных файлов, автоматическое создание списка файлов, кэш дескрипторов открытых файлов;
- Акселерированное проксирование без кэширования, простое распределение нагрузки и отказоустойчивость;
- Акселерированная поддержка удалённых FastCGI серверов, простое распределение нагрузки и отказоустойчивость;
- Модульность, фильтры, в том числе сжатие (gzip), byte-ranges (докачка), chunked ответы, XSLT-фильтр, SSI-фильтр; несколько подзапросов на одной странице, обрабатываемые в SSI-фильтре через прокси или FastCGI, выполняются параллельно.
- Поддержка SSL и расширения TLS SNI;
Конфигурация HTTP-сервера nginx разделяется на виртуальные серверы (директива server). Виртуальные серверы разделаются на location’ы (location). Для виртуального сервера возможно задать адреса и порты, на которых будут приниматься соединения, а так же имена, которые могу включать * для обозначения произвольной последовательности в первой и последней части, либо задаваться регулярным выражением.
Как видим, у этого веб-сервера очень широкий спектр применения и неплохой функционал.
Ставим Apache:
cd /usr/ports/www/apache2
make config
make install clean
Ставим Nginx:
cd /usr/ports/www/nginx
make config
make install clean
После установки начинаем править конфиги:
Для APACHE, во первых вешаем его не на 80 порт на любой другой например 81 порт , в файле /usr/local/etc/apache22/httpd.conf вводим такую дирерективу Listen 127.0.0.1:81 , тем саммым заставлем слушать апач 81 порт на локальной петле, имеено сюда будет nginx передавать запросы и получать ответы. Далее редактируем /usr/local/etc/apache22/extra/httpd-vhosts.conf
NameVirtualHost *:81
<VirtualHost *:81>
#Путь к виртуальному серверу например /www/iocsha - он же будет прописываться в nginx
DocumentRoot "Путь к виртуальному серверу где скрипты и прочее"
ServerName Доменное имя виртуального сервера
ErrorLog "Путь к виртуальному серверу где скрипты и прочее/log/error_log"
CustomLog "Путь к виртуальному серверу где скрипты и прочее/log/access_log" common
<Directory Путь к виртуальному серверу где скрипты и прочее>
AllowOverride All
Allow from all
Options -MultiViews
</Directory>
</VirtualHost>
Вобщем виртуальные хосты также настраиваются на 81 порт , более детальную настройку виртуальных хостов найдёте в справочных данных по настройке апача
Теперь займёмся конфигурированием nginx
Виртуальный узел будет иметь такой вид:
server {
listen 80;
server_name Имя сервера в DNS;
#charset koi8-r;
#access_log logs/host.access.log main;
location / {
#Укажем nginx куда переводить запросы в нашем случае apache который висит на 81 порту
proxy_pass http://127.0.0.1:81/;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-for $proxy_add_x_forwarded_for;
proxy_connect_timeout 60;
proxy_send_timeout 90;
proxy_read_timeout 90;
proxy_redirect off;
proxy_set_header Connection close;
proxy_pass_header Content-Type;
proxy_pass_header Content-Disposition;
proxy_pass_header Content-Length;
}
location ~* \.(jpg|jpeg|gif|png|css|zip|tgz|gz|js|rar|bz2|doc|xls|exe|bmp|ico|swf|flv)$ {
#То что выполняет nginx т.е. путь к домашней директории где хранятся скрипты =DocumentRoot "Путь к виртуальному серверу где скрипты и прочее" из настроект Apache виртуального узла
root /www/iocsha/;
}
#error_page 404 /404.html;
}
Установим теперь eaccelerator:
cd /usr/ports/www/eaccelerator
make install
make clean
Устновка завершится выводом типа такого текста:
*************************************************************
You have installed the eaccelerator package.
Edit /usr/local/etc/php.ini and add: zend_extension="/usr/local/lib/php/20060613/eaccelerator.so"
Then create the cache directory: mkdir /tmp/eaccelerator
chown www /tmp/eaccelerator
chmod 0700 /tmp/eaccelerator
*************************************************************
Соответственно сами выберем куда поставить сам кэш - вобщем по умолчанию возможно куда надо ставить будет места маловато.Поэтому сами сделаем
Замечу кааталог www я например примонтировал к отдельному диску соосвественно вместо /www Вы можете укаазать любой каталог на Ваше усмотретние
root# mkdir /www/eaccelerator
root# chown www:www /www/eaccelerator
root# chmod 0700 /www/eaccelerator
Затем в /usr/local/etc/php.ini (где хранятся основные настройки php машины) пропишем в конце:
eaccelerator.enable="1"
eaccelerator.shm_size="64"
eaccelerator.cache_dir="/www/eaccelerator"
eaccelerator.debug="0"
eaccelerator.check_mtime="1"
eaccelerator.filter=""
eaccelerator.shm_max="0"
eaccelerator.shm_ttl="3600"
eaccelerator.shm_prune_period="0"
eaccelerator.shm_only="0"
eaccelerator.compress="1"
eaccelerator.compress_level="9"
Установка и настройка RPAF или даешь верный REMOTE_ADDR!
Так как у нас появился в цепи дополнительный элемент в виде фронтенд-сервера, то теперь в REMOTE_ADDR у нас не пользовательский IP, а IP-адрес фронтенд-сервера (на котором расположен Nginx). Поэтому на помощь приходит RPAF, он берет тело заголовка X-Forwarded-For, присланного от фронтенда и формирует на бекенде из него REMOTE_ADDR.
Устанавливаем модуль RPAF
cd /usr/ports/www/mod_rpaf2
make install clean
Настраиваем RPAF, редактируем httpd.conf, добавляем в конец файла:
RPAFenable On
RPAFsethostname on
RPAFproxy_ips 192.168.10.99 127.0.0.1
#RPAFheader X-Forwarded-For
Не забудем поменять IP
Не забудем прописать в /etc/rc.conf включение APache и Nginx:
nginx_enable="YES" apache22_enable="YES"
стартуем / рестартуем
/usr/local/etc/rc.d/nginx restart
/usr/local/etc/rc.d/apache22 restart
ну или start если ещё не запущены