Настройка виртуальных хостов в Apache (AppServ/Denwer/...)

Ответить
Аватара пользователя
Distructor
Администратор
Сообщения: 1607
Зарегистрирован: 28.12.2009
Допустим, что стоит задача сделать поддержку двух разных сайтов host1.ru и host2.ru, причем чтобы при обращении к серверу по IP, открывался host1.ru. И поддержку псевдонима psevdo2.ru, при запросе к которому будет открываться host2.ru.

Начнем с создания папок под виртуальные хосты
  • Крайне желательно чтобы они лежали внутри корневой папки веб-сервера, на которую прописаны разрешающие права в httpd.conf, например

    Код: Выделить всё

    #
    # This should be changed to whatever you set DocumentRoot to.
    #
    <Directory "C:/AppServ/www">
        Options Indexes FollowSymLinks MultiViews ExecCGI
        AllowOverride All
        Order allow,deny
        Allow from all
    </Directory>
    Таким образом мы видим, что у нас домашней папкой является папка C:/AppServ/www, создадим в ней 2 папки
    C:/AppServ/www/host1.ru и C:/AppServ/www/host2.ru
Теперь переходим к настройке веб-сервера
  • Открываем httpd.conf и в самый конец добавляем строчки

    Код: Выделить всё

    NameVirtualHost *:80
    
    <VirtualHost *:80>  # сюда будет попадать если обратились по ip или по неописанному имени, в частности и по host1.ru
        ServerName default
        # корневая директория для host1.ru
        DocumentRoot ../www/host1.ru
        # файл для лога ошибок
        ErrorLog logs/host1.ru-error.log
        # файл для лога обращений
        CustomLog "logs/host1.ru-access.log" common
    </VirtualHost>
    
    <VirtualHost *:80>  # сюда будут попадать обращения к host2.ru и psevdo2.ru
        ServerName host2.ru
        # указание алиаса (добавочного имени) домена
        ServerAlias psevdo2.ru
        DocumentRoot ../www/host2.ru
        ErrorLog logs/host2.ru-error.log
        CustomLog "logs/host2.ru-access.log" common
    </VirtualHost>
    естественно, что если вы используете порт отличный от 80го, то именно его и следует указывать
На этом можно было бы и остановиться, но ведь мы хотим и со своей локальной машины иметь возможность обращаться к сайтам по доменному имени.

Поэтому переходим к настройке файла hosts
  • Открываем файл C:\WINDOWS\system32\drivers\etc\hosts и вписываем в него строки

    Код: Выделить всё

    127.0.0.1 host1.ru
    127.0.0.1 host2.ru
    127.0.0.1 psevdo2.ru
    Более подробно о настройке файла hosts можно почитать в теме Полная инструкция по hosts
После всех правок перезапустите Apache, чтобы он подхватил все изменения

Проверяем
  • Создадим файл C:/AppServ/www/host1.ru/index.html со следующим содержимым

    Код: Выделить всё

    <html>
      <head><title>HOST1.RU</title></head>
      <body style="padding:50px;font-size:18px;text-align:center;">It's Host<b>1</b>.ru</body>
    </html> 
    и файл C:/AppServ/www/host2.ru/index.html со следующим содержимым

    Код: Выделить всё

    <html>
      <head><title>HOST2.RU</title></head>
      <body style="padding:50px;font-size:18px;text-align:center;">It's Host<b>2</b>.ru</body>
    </html> 
    h1.PNG
    h2.PNG
    h3.PNG
Примечание. Повышаем защищенность phpMyAdmin.
  • Т.к. в последнее время почти у всех присутствует phpMyAdmin, нелишне будет ограничить доступ к нему, заодно вынеся на отдельный виртуальный хост.
    Добавим в конец httpd.conf

    Код: Выделить всё

    <VirtualHost *:80>
        <Directory "C:/AppServ/www/phpMyAdmin">
            Order deny,allow
            Allow from 127.0.0.1
            Allow from 192.168.1
            Deny from all
        </Directory>
        ServerName pma
        DocumentRoot ../www/phpMyAdmin
        ErrorLog logs/pma-error.log
        CustomLog "logs/pma-access.log" common
    </VirtualHost>
    также добавим в C:\WINDOWS\system32\drivers\etc\hosts строку

    Код: Выделить всё

    127.0.0.1 pma
    Таким образом мы сможем обратиться к phpMyAdmin с компьютера, на котором установлен веб-сервер (127.0.0.1) и с компьютеров локальной сети (192.168.1.ххх) по виртуальному доменному имени "http://pma" (причем чтобы обращаться с компьютеров локальной сети, надо в их файле hosts указать "192.168.1.2 pma" (если IP вашего сервера 192.168.1.2) ). При обращении с других машин будет выводиться ошибка
    h4.PNG
    Если вам все же необходим доступ к phpMyAdmin не только с локальной машины, но и удаленно, то можно убрать блок

    Код: Выделить всё

        <Directory "C:/AppServ/www/phpMyAdmin">
            Order deny,allow
            Allow from 127.0.0.1
            Allow from 192.168.1
            Deny from all
        </Directory>
    либо добавить в него строки разрешающие доступ с конкретного IP или подсети.
    В любом случае, даже без запретов по IP, вынесение phpMyAdmin на отдельный хост усложнит для хакера его поиск и как следствие взлом, особенно если имя хоста, а также имя и пароль пользователя будут сложны для подбора по словарям.
    Не забывайте перезапускать Apache, после изменения httpd.conf
Copyright © 2009 Creaternal (v-tanke.ru).
При копировании информации, ссылка на источник и указание автора обязательны.

Ответить