nginx →
Заставляем nginx работать с Virtualmin
Совсем недавно я познакомился с прекрасной (и, главное, бесплатной) панелью управления хостингом Virtualmin, которая является надстройкой над небезызвстным Webmin'ом. Virtualmin я ставил с целью поднять небольшой веб-хостинг «для друзей». Однако, некоторые сайты имеют немаленькую (по меркам моего очень старого сервера, собранного из найденных запчастей) посещаемость, состоя, в основном, из статического контента. Решение напрашивается само собой — поставить nginx, однако, virtualmin по умолчанию поддерживает только Apache, и не рассчитан на использование кэширующего веб-сервера. В этой статье я хотел бы рассказать о том, как же подружить Virtualmin с nginx.
Установка webmin и virtualmin
В этой статье все операции проводятся на сервере с Debian 6 «Squeeze», но для других дистрибутивов они практически аналогичны. Мой IP-адрес — 94.198.110.11, Вам нужно заменить его на свой.
Сначала нужно установить Webmin. Конечно же, самым правильным методом будет установка через apt, поэтому добавим следующие строки в /etc/apt/sources.list:
deb download.webmin.com/download/repository sarge contrib
deb webmin.mirror.somersettechsolutions.co.uk/repository sarge contrib
Далее, импортируем GPG ключ:
cd /root
wget www.webmin.com/jcameron-key.asc
sudo apt-key add jcameron-key.asc
Дальнейший шаг очевиден: sudo apt-get update && sudo apt-get install webmin.
Чтобы установить virtualmin, нужно скачать с официального сайта и выполнить скрипт установки:
wget software.virtualmin.com/gpl/scripts/install.sh
sudo chmod +x install.sh
sudo ./install.sh
Скрипт самостоятельно установит все требуемые пакеты через apt.
Настройка веб-сервера
Вот мы и добрались до настройки веб-сервера. В качестве фронт-энда решено использовать nginx, в качестве бэк-энда — Apache. Апач нужно «перевесить» на порт, отличный от 80. Для этого заходим в веб-интерфейс Virtualmin, Открываем System settings -> Server templates -> Default Settings, выбираем Apache website и устанавливаем нужное значение Port number for virtual hosts (у меня это 82).
Так же понадобится модуль mod-rpaf для Apache. После установки нужно добавить 2 строки в /etc/apache2/apache2.conf, чтобы модуль заработал:
RPAFsethostname On
RPAFproxy_ips 127.0.0.1 94.198.110.11
- В этом же файле нужно удалить директиву NameVirtualHost 94.198.110.11:80.
- В файле ports.conf удаляем строку 94.198.110.11:80, в файле /etc/sites-available/default заменяем порт на 82.
- Перезапускаем apache.
Как установить nginx, я надеюсь, пояснять не надо.
Остается настроить nginx так, чтоб он корректно работал с виртуальными хостами.
Открываем файл /etc/nginx/sites-available/default, после настройки он должен выглядеть примерно следующим образом:
server {
listen 80 default;
server_name _;
server_name_in_redirect off;
resolver 127.0.0.1;
# Redirect all www.domain.com to domain.com
if ($host ~* ^(www\.)(.+)) {
set $rawdomain $2;
rewrite ^/(.*)$ http://$rawdomain/$1 permanent;
}
access_log /var/log/virtualmin/$host/access_log;
location ~* ^.+.(jpg|jpeg|gif|png|ico|css|zip|tgz|gz|rar|bz2|doc|xls|exe|pdf|ppt|txt|tar|mid|midi|wav|bmp|rtf|js|swf|flv|html|htm|mp3)$ {
root /home/$host/public_html;
access_log off;
expires 30d;
}
location / {
root /home/$host/public_html;
index index.php index.html index.htm;
access_log off;
proxy_pass http://$host:82;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
Запускаем nginx, открываем в браузере любой из хостов — и видим чудесную надпись:
В статье использовались следующие материалы:
29.05.2011 20:10+0400