Яндекс.Метрика

    nginx

    Заставляем nginx работать с Virtualmin

    image

    Совсем недавно я познакомился с прекрасной (и, главное, бесплатной) панелью управления хостингом 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, открываем в браузере любой из хостов — и видим чудесную надпись:
    image

    В статье использовались следующие материалы: