nginx+apache+memcached+xcache: fast web-server
Со временем каждый интернет-проект ждет неизбежное: либо он остается в тени и неизвестности, либо становится популярным и посещаемым. Посещаемость это хорошо, но готов ли к этому ваш сервер? С повышением нагрузки на проект обычно используют модель back-end+front-end, а именно связка nginx+apache. Как это работает: все внешние соединения на себя принимает nginx, за отдачу статического содержимого (все изображения, стили, html, аудио и видео) отвечает так же он. Apache же в свое время отвечает только за статическое содержимое и во “внешку” не смотрит. Что бы их “связать” в nginx необходимо будет настроить проксирование.
Обновляем кеш репозитариев:
# aptutude update
Устанавливаем Apache, php, mysql и необходимые им модули:
# aptitude -y install apache2 php5 mysql-server libapache2-mod-auth-mysql php5-mysq mysql-admin libphp-jpgraph php5-imagick
Настраиваем Apache:
# nano /etc/apache2/ports.conf
По умолчанию Apache слушает внешние соединения на 80 порт. Исправим это, заменив Listen 80 на:
Listen localhost:8080
Далее отредактируем конфиг apache2.conf и вставим в самый низ строчку NameVirtualhost *:8080
# nano /etc/apache2/apache2.conf
Создадим новый VirtualHost в sites-available:
# nano /etc/apache2/sites-available/sitename.ru.conf
Вписываем туда:
<VirtualHost *:8080>
ServerName sitename.ru
ServerAlias www.sitename.ru
DocumentRoot /home/sitename.ru/public_html
</VirtualHost>
Подключим VirtualHost:
# ln -s /etc/apache2/sites-available/sitename.ru.conf /etc/apache2/sites-enabled/
На этом пока Apache оставим в покое. Установите nginx, используя эту статью.
nginx установлен, можно перейти к настройке:
# nano /usr/local/nginx/conf/nginx.conf
В секцию http добавим строчку:
http {
…
include /etc/nginx/sites-enabled/*;
…
}
Создадим папку с виртуальными хостами nginx:
# mkdir /etc/nginx/sites-enabled/
Создадим там файл sitename.ru:
# nano /etc/nginx/sites-enabled/sitename.ru
Отконфигурируем как в примере:
#Создайте свой VirtualHost и создайте файл, взяв за пример эти настройки
server {
# какой порт слушать
listen 80;
# доменное имя с www и без
server_name sitename.ru www.sitename.ru;
location / {
# адрес для перенаправления запроса. Т.е. наш Apache
proxy_pass http://localhost:8080/;
# передаём серверу Apache реальный IP юзера
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
# типы файлов, обрабатываемые Nginx’ом
location ~* \.(gif|jpg|jpeg|png|ico|css|swf|js|html|htm|xml|txt|gz|bmp|xls)$ {
# директория веб-сервера
root /home/sitename.ru/public_html;
#Включаем mod_rewrite для wordpress
if (!-e $request_filename) {
rewrite ^(.*)$ /index.php;
}
}
}
Устанавливаем memcached:
# aptitude install memcached
Устанавливаем xcache:
# aptitude install php5-xcache
Перезапускаем демоны:
/etc/init.d/apache2 restart
/etc/init.d/nginx restart
/etc/init.d/memcached restart
Готово! Теперь nginx принимает внешние соединение, рулит статикой и проксирует. Apache же занимается динамическим содержимым. Удачи!
Recent Comments