Самым популярным веб-сервером сейчас является веб-сервер Apache, на котором работает большинство хостиногвых серверов. Однако несмотря на огромное количество преимуществ он имеет и ряд недостатков.
Основным недостатком является достаточно высокая требовательность к ресурсам, которая создаёт большие трудности при эксплуатации веб-сервера на хостинговых серверах с большой нагрузкой. Однако в этом случае проблему поможет решить веб-сервер nginx, разработанный нашим земляком Игорем Сысоевым.
Далее будет показано как разгрузить хостинговый сервер под управлением Debian Lenny, с работающим на нём apache2 с помощью nginx.
Начальные условия:
- ОС: Debian Lenny.
- Установленный и настроенный apache2
Если всё делать правильно, то время простоя не превысит пяти минут. Всё описанное далее проделано автором лично и проблем не возникло.
Для начала "перевесим" apache на localhost на порт 8080. Для этого нужно поправить строку Listen в файле /etc/apache2/ports.conf:
#Listen 80 Listen 127.0.0.1:8080
И перезапустить apache:
invoke-rc.d apache2 restart
Далее устанавливаем nginx:
apt-get install nginx
И создаём файл /etc/nginx/conf.d/proxy.conf, следующего содержания:
proxy_cache_path /usr/home/nginx/proxy_cache levels=1:2 keys_zone=one:30m max_size=1g;
server {
server_name _;
server_name_in_redirect off;
location / {
proxy_pass http://127.0.0.1:8080/;
proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
client_max_body_size 10m;
client_body_buffer_size 128k;
proxy_connect_timeout 90;
proxy_send_timeout 90;
proxy_read_timeout 90;
proxy_buffer_size 4k;
proxy_buffers 4 32k;
proxy_busy_buffers_size 64k;
proxy_temp_file_write_size 10m;
}
# Запросы к статике
location ~* ^.+.(jpg|jpeg|gif|css|png|js|ico)$ {
# Принудительно указываем заголовок Expire
expires 30d;
# Запросы по прежнему пересылаем к apache
proxy_pass http://127.0.0.1:8080/;
# Однако здесь мы их кэшируем на один час
# Это позволяет немного разгрузить apache
proxy_cache_valid 60m;
proxy_redirect off;
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_cache_key $scheme$proxy_host$request_uri$host;
proxy_cache one;
}
}
И перезапускаем nginx:
invoke-rc.d nginx restart
На этом почти всё, кроме одной неприятной мелочи: в логи apache теперь вместо реальных IP-адресов падает всегда один и тот же адрес - 127.0.0.1. Однако эта проблема решается легко и непринуждённо установкой модуля rpaf, который будет складывать в лог IP-адреса, переданные через заголовки X-*.
Установим модуль:
apt-get install libapache2-mod-rpaf
Включаем модуль:
a2enmod rpaf
И перезапускаем apache:
invoke-rc.d apache2 restart
Конфигурация модуля находится в файле /etc/apache2/mods-available/rpaf.conf, однако в данном случае её можно оставить по умолчанию.
На этом действительно всё. Приятной работы!

Igron 2009-07-08 14:58:27 (#)
> на порт 8080.
Ну, во-первых, опечатка, а во-вторых, не лучше ли для этого использовать xinetd?