Самым популярным веб-сервером сейчас является веб-сервер 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?