FreeBsd 8, настройка nginx-apache-eaccelerator

Unix > FreeBsd 8, настройка nginx-apache-eaccelerator
08.02.2013 16:36:42



Статья:

Снизим нагрузку на сервер и уменьшим время отклика, поставив между посетителем и 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 если ещё  не запущены