Apache настройка виртуальных хостов: Как настроить виртуальные хосты в Apache на Ubuntu 14.04 LTS – Виртуальные хосты Apache — Apache для Windows

Быстрое создание виртуальных хостов Apache при помощи bash скрипта / Habr

Не так давно переехал с VPS на выделенные сервер и передо мной остро встал вопрос по переносу сайтов со старого сервера на новый, а именно по быстрому созданию виртуальных хостов и баз данных. Конечно же в довесок к серверу шла панель управления ISPmanager, но в этом случае мне не нравилось две вещи:
  • Панель делает все за тебя, а мне хочется прокачать скил в области адмиистрирования.
  • Не нравится способ создания сайтов через панель, а именно создаваемые пути до папки с сайтом (/var/www/user_name/data/www/site.ru)

В силу этого решил все настраивать ручками. Про установку Apache и php, писать не буду, так как и на Хабре и в интернете очень много материалов по данной теме. Нас же больше интересует быстрое создание пользователя, виртуального хоста, и базы данных. Кому интересно прошу в подкат.

Логику решил разделить на два скрипта.
  • Создает пользователя и в его папке добавляет сайты. Если пользователя нет, то он создается, если есть, то создается только сайт.
  • Второй скрипт создает базу данных и пользователя для базы, присваивая ему привилегии на данную базу.

Немного условий для скриптов.
  • Оба скрипта генерируют пароли по умолчанию.
  • Конфиги виртуальных хостов должны лежать в /etc/apache2/vhosts.
  • Все действия должны производиться только из под суперпользователя

Скрипт для создания нового виртуального хоста (/home/addsite)
#!/bin/bash
IP_ADDRESS="1.2.3.4"

APACHE2_DIR="/etc/apache2"

UID_ROOT=0

if [ "$UID" -ne "$UID_ROOT" ]; then
  echo "$0 - Requires root privileges"
  exit 1
fi

function is_user(){
    local check_user="$1";
    grep "$check_user:" /etc/passwd >/dev/null
    if [ $? -ne 0 ]; then
 #echo "NOT HAVE USER"
 return 0
    else
 #echo "HAVE USER"
 return 1
    fi
}
 
function generate_pass(){
    CHARS="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz!@#$%^&*()-_=+\\|/"
    LENGTH="8"
    while [ "${n:=1}" -le "$LENGTH" ] ; do
	PASSWORD="$PASSWORD${CHARS:$(($RANDOM%${#CHARS})):1}"
        let n+=1
    done
    echo $PASSWORD
}
 
function is_yes(){
#TODO - add check 3-rd parameter for set default ansver (if press enter)
    while true
    do
 echo -n "Yes or No[Y/n]:"
 read  x
 if [ -z "$x" ]
 then
     return 0; #defaul answer: Yes
 fi
 case "$x" in
 y |Y |yes |Д |д |да ) return 0;;
 n |N |no |Н |н |нет ) return 1;;
# * ) ; # asc again
 esac
    done
}

function create_user(){
    local login="$1"
    local password="$2"
    `useradd -m -s /bin/bash $login`
    #set password
    echo -e "$password\n$password\n" | passwd $login >> /dev/null
}

USER_NAME=$1

echo -n "Check user name $USER_NAME: "
if( is_user "$USER_NAME" )then
    USER_PASSWORD="$(generate_pass)"
    echo "-----------------------------------"
    echo "User name    : $USER_NAME"
    echo "User password: $USER_PASSWORD"
    echo "-----------------------------------"
    echo -n "Continue? "
    if(! is_yes) then
        exit;
    fi
    echo "--- create user ---"
    create_user "$USER_NAME" "$USER_PASSWORD"
fi

if [ $# -eq 2 ]; then
    if [ "$2" != "delete" ]; then
        SITE_NAME=$2
        
        mkdir /home/$USER_NAME/$SITE_NAME
        mkdir /home/$USER_NAME/$SITE_NAME/www
        mkdir /home/$USER_NAME/$SITE_NAME/logs
        mkdir /home/$USER_NAME/$SITE_NAME/tmp
        mkdir /home/$USER_NAME/$SITE_NAME/cgi-bin
        
        hostConf="
<VirtualHost ${IP_ADDRESS}:80>
        ServerName $SITE_NAME
        ServerAlias www.$SITE_NAME
        ServerAdmin webmaster@$SITE_NAME

        AddDefaultCharset utf-8
        AssignUserID ${USER_NAME} ${USER_NAME}

        DocumentRoot /home/$USER_NAME/$SITE_NAME/www
        CustomLog log combined
        ErrorLog /home/$USER_NAME/$SITE_NAME/logs/error.log
        DirectoryIndex index.php index.html

        ScriptAlias /cgi-bin/ /home/$USER_NAME/$SITE_NAME/cgi-bin
        <FilesMatch \"\\.ph(p[3-5]?|tml)$\">
                SetHandler application/x-httpd-php
        </FilesMatch>
        <FilesMatch \"\\.phps$\">
                SetHandler application/x-httpd-php-source
        </FilesMatch>
        php_admin_value upload_tmp_dir "/home/$USER_NAME/$SITE_NAME/tmp"
        php_admin_value session.save_path "/home/$USER_NAME/$SITE_NAME/tmp"
        php_admin_value open_basedir "/home/$USER_NAME/$SITE_NAME/www:."
</VirtualHost>
<Directory /home/$USER_NAME/$SITE_NAME/www>
        Options +Includes +ExecCGI
        php_admin_flag engine on
</Directory>
        "

        touch ${APACHE2_DIR}/vhosts/${SITE_NAME}.conf
        echo "$hostConf" >> ${APACHE2_DIR}/vhosts/${SITE_NAME}.conf
        touch //home/$USER_NAME/$SITE_NAME/www/index.php
        echo "<?php phpinfo() ?>" >> /home/$USER_NAME/$SITE_NAME/www/index.php
        
        chown $USER_NAME:$USER_NAME /home/$USER_NAME/$SITE_NAME/*
        
        service apache2 restart
    fi
fi;

#display information
echo "*****************************************"
echo "* Profit!"
echo "*****************************************"

В общем ни чего сложного, в самом начале задаем ip адрес сервера и папку где у нас лежат настройки апача. Не забываем добавить права на исполнения файла
chmod -x /home/addsite

Для того чтобы апач мог подцепить наши конфиги в конец главного конфигурационого файла добавляем
Include vhosts/

Запускаем скрипт просто
/home/addsite user_name site.ru

Скрипт создаст пользователя, виртуальный хост и перезапустит апач. И конечно же не забудет показать пароль для вновь созданного пользователя.
Создание базы данных. Меня немного напрягало создание базы из phpMyAdmin, надо сначала создать базу, потом пользователя и еще не забыть добавить привелегии бд, новому пользователю, вот и упрощаем себе жизнь (/home/addbd).
#!/bin/bash

MYSQL_PASS="derev123blog"

UID_ROOT=0

if [ "$UID" -ne "$UID_ROOT" ]; then
  echo "$0 - Requires root privileges"
  exit 1
fi

function generate_pass(){
    CHARS="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz!@#$%^&*()-_=+\\|/"
    LENGTH="8"
    while [ "${n:=1}" -le "$LENGTH" ] ; do
 PASSWORD="$PASSWORD${CHARS:$(($RANDOM%${#CHARS})):1}"
        let n+=1
    done
    echo $PASSWORD
}

function is_running(){
    local result="$(ps -A|grep $1|wc -l)"
    if [[ $result -eq 0 ]]; then
 return 1
    else
 return 0
    fi
}

if [ $# -eq 1 ]; then
    echo -n "Check MySQL status: "
    if(is_running mysqld)then
        echo "OK [Running]";
        DB_NAME=$1
        DB_PASSWORD="$(generate_pass)"
        mysql -uroot -p${MYSQL_PASS} --execute="create database ${DB_NAME};"
        mysql -uroot -p${MYSQL_PASS} --execute="GRANT ALL PRIVILEGES ON ${DB_NAME}.* TO '${DB_NAME}'@'localhost' IDENTIFIED by '${DB_PASSWORD}'  WITH GRANT OPTION;"
    else
        echo "Error: need start mysql daemon!"
        exit
    fi
fi;

#display information
echo "*****************************************"
echo "* Data base name: ${DB_NAME}"
echo "* Data base user: ${DB_NAME}"
echo "* User password: ${DB_PASSWORD}"
echo "* Profit!"
echo "*****************************************"

В самом начале скрипта задаем пароль для пользователя root из MySQL. Запускаем командой
/home/addsite bd_name

Создастся база данных и пользователь и вывидутся данные для подключения.
Так же можно добавить оба файлв в дирректорию /bin для быстрого вызова данных комманд
cp /home/addsite /bin/addsite
cp /home/addbd /bin/addbd

Вроде как все. Надеюсь данный способ создания виртуальных хостов упростит жизнь пользователям так же как и мне.

Настройка виртуальных хостов в Apache под Mac OS X 

По умолчанию настройки виртуальных хостов Apache на Mac OS X находятся в файле /etc/apache2/extra/httpd-vhosts.conf

Для начала открываем терминал и переходим в root режим:

Далее редактируем файл конфигураций Apache:

vi /etc/apache2/httpd.conf

Найдите в нем следующую строчку:

#Include /private/etc/apache2/extra/httpd-vhosts.conf

И замените ее на:

Include /private/etc/apache2/vhosts/*.conf

Теперь нам необходимо создать эту папку:

mkdir /etc/apache2/vhosts
cd /etc/apache2/vhosts

Создайте конфигурационный файл виртуального хоста по умолчанию:

И добавляем в него:

<VirtualHost *:80>
     DocumentRoot "/Library/WebServer/Documents"
</VirtualHost>

Этот файл служит в качестве виртуального хоста по умолчанию. Когда Apache не может найти соответствующий виртуальный хост, он будет использовать первую конфигурацию. Технически этот файл не нужен, поскольку он просто повторяет конфигурации из http.conf. Тем не менее, он обеспечивает локальную настройку сервера.

Создайте файл конфигурации виртуального хоста:

И добавьте в него следующее:

<VirtualHost *:80>
        DocumentRoot "/your/path/"
        ServerName site.loc
        ErrorLog "/your/path/local-error_log"
        CustomLog "/your/path/local-access_log" common

        <Directory "/your/path/">
            AllowOverride All
            Require all granted
        </Directory>
</VirtualHost>

Перезагрузим веб — сервер Apache:

Если у вас возникли какие-нибудь проблемы, попробуйте выполнить команду, которая проверит настройки:

Настройка виртуальных хостов

Для того, чтобы у вас заработал сайт в браузере, по пути site.loc необходимо отредактировать файл hosts:

Добавьте строчку в конце файла. Имя хоста должно соответствовать ServerName в настройках Apache: 

Чтобы очистить локальный кеш DNS, выполните следующую команду:

Теперь можно запрашивать наш сайт по http://site.loc

Проверить ошибки в настройках сервера можно с помощью команды:

И немного о правах

При запросе вашего сайта, вы можете получить в ответ 403 Forbidden, вероятно, это проблема с правами на чтение. Проще говоря, пользователь Apache не имеет на это прав.

Выполните следующую команду, чтобы это исправить:

#MacOS

Настройка виртуальных хостов Apache в macOS

В данной статье я расскажу, как добавить виртуальные хосты в Apache.

Виртуальные хосты предназначены для того, чтобы создавать несколько сайтов на одном сервере. Фактически каждый виртуальный хост представляет собой отдельный сайт, со своим адресом и директорией, где размещаются его файлы.

После установки Apache создается один виртуальный хост с именем localhost. Вы можете открыть его в браузере по адресу http://localhost. Директория, в которой размещаются файлы данного сайта /Library/WebServer/Documents.

Есть несколько способов для добавления своих хостов в Apache. Можно прописать информацию о них в одном файле, а можно создать для каждого хоста свой отдельный конфигурационный файл с соответсвующим именем. Я буду использовать второй способ.

Файлы с настройками хостов мы будем размещать в одной директории /private/etc/apache2/vhosts. Файлы будут иметь имена вида mysite.local.conf.

Подключаем vhosts

Сначала нам нужно отредактировать конфигурационный файл Apache. Необходимо добавить в него директиву, которая будет подключать директорию, в которой мы будем создавать конфигурационные файлы хостов.

Откройте файл для редактирования, для этого выполните в терминале команду:

sudo nano /etc/apache2/httpd.conf

Найдите в файле строку #Include /private/etc/apache2/extra/httpd-vhosts.conf.

Под этой строкой добавьте новую строку:

Include /private/etc/apache2/vhosts/*.conf

Сохраните изменения и закройте файл. Чтобы закрыть файл и сохранить изменения, нажмите Ctrl+X, затем введите Y и нажмите Enter.

Мы добавили директиву, которая говорит о том, что Apache должен подключать все файлы с расширением .conf из директории /private/etc/apache2/vhosts.

Настраиваем виртуальные хосты

Создадим директорию /private/etc/apache2/vhosts, которую мы добавили в кофигурацию Apache на предыдущем шаге. Чтобы создать директорию выполните в терминале команду:

sudo mkdir /private/etc/apache2/vhosts

Перейдем в эту директорию:

cd /private/etc/apache2/vhosts

 

Создадим конфигурационный файл _default.conf. В нем мы пропишем конфигурацию виртуального сервера по умолчанию. Создайте новый файл, выполнив в терминале:

sudo nano _default.conf

Введите следующую конфигурацию:

<VirtualHost *:80>
   DocumentRoot "/Library/WebServer/Documents"
</VirtualHost>

Сохраните и закройте файл.

 

Теперь создадим конфигурацию для нашего виртуального хоста (сайта). Для примера мы будем создавать сайт с адресом mysite.local, а файлы сайта будем размещать в домашней директории в каталоге mysite (полный путь будет иметь вид /Users/Yury/mysite, вместо Yury должно быть ваше имя пользователя).

Выполните в терминале:

sudo nano mysite.local.conf

Введите:

<VirtualHost *:80>
   DocumentRoot "/Users/Yury/mysite"
   ServerName mysite.local
   ErrorLog "/private/var/log/apache2/mysite.local-error_log"
   CustomLog "/private/var/log/apache2/mysite.local-access_log" common
   <Directory "/Users/Yury/mysite">
      AllowOverride All
      Require all granted
   </Directory>
</VirtualHost>

В конфигурации мы указали директорию (/Users/Yury/mysite), в которой располагаются файлы нашего сайта. Задали адрес сайта mysite.local. Указали, где будут храниться лог файлы с ошибками и информацией о доступе к сайту.

Перезапустите Apache:

sudo apachectl restart

Прежде, чем наш сайт станет доступен по адресу http://mysite.local необходимо добавить информацию о нем в файл /etc/hosts.

Редактирование /etc/hosts

В файле /etc/hosts прописывается соответсвие IP адреса и текстовый адрес хоста (что-то вроде локального DNS).

Нам нужно добавить наш адрес mysite.local. Для этого откройте файл /etc/hosts:

sudo nano /etc/hosts

И добавьте в файл строку:

127.0.0.1  mysite.local

Настраиваем права доступа

Иногда требуется выставить правильные права доступа на директорию, в которой хранятся файлы сайта. Если этого не сделать, то при доступе к сайту мы получим ошибку 403 Forbidden. Такую же ошибку мы получим, если директории не существует.

В нашем случае нам нужно установить права доступа на директорию /Users/Yury/mysite. Для этого выполните в терминале команду:

chmod 755 /Users/Yury/mysite

Проверка работы

Теперь наберите в браузере адрес сайта: http://mysite.local

Если все пройдет успешно, то вы увидете ваш сайт.

В случае каких-либо ошибок можно просмотреть логи в файле /private/var/log/apache2/mysite.local-error_log

Настройка виртуальных хостов

Этой статьей я закрываю уроки о том как сделать домашний сайт при помощи веб сервера XAMPP. Принцип создания домашних сайтов одинаков для всех локальных серверов. Физически сайт в домашних условиях представляет собой отдельную папку среди папок серверной программы. Имя папки определяет название сайта. Теперь разберемся с устройством интернета внутри компьютера и создадим для нашего сайта на XAMPP виртуальные хосты.

Статья входит в цикл статей Локальный веб сервер для пояснения процесса создания сайта внутри домашнего компьютера.

Наверно, стоит напомнить читателям — как устроен Интернет. Сайты на жестких дисках у провайдера или на домашнем компьютере — это папки для размещения материала сайта и внутренних программ. Все сайты (как папки) Интернета, аналогично и внутри компьютера, связаны средствами связи, но для того, чтобы эти папки стали сайтами нужно, (1) чтобы в сети работала программа сервер (даже внутри компа она должна создать среду Интернета) и (2) у пользователя на компьютере должна быть включена программа браузер, которая позволяет «видеть» сайты — потому что браузер, если знает адрес сайта в сети или домашнем компьютере, умеет заходить внутрь его папки, брать текст и картинки и «рисовать» их на экране монитора у посетителя сайта.

Программа сервер — это вроде операционной системы для всего Интернета, а браузер — это аналог программы Word, но только браузер умеет читать не документы, а сайты — как документы, написанные на языках HTML, PHP, PERL …

Статья написана для пояснения статей в рубрике Программы для создания сайта и имеет постоянную ссылку: http://design-for.net/page/nastrojka-virtualnyh-hostov

Создание виртуальных хостов

1.1. Мы уже знаем, что нет никакой разницы между сайтом designfornet на компьютере дома или сайтом design-for.net на сервере у хостера. Однако, если для перехода к сайту design-for.net достаточно вставить его имя в строку адреса браузера, как мы сразу попадаем на первую страницу моего сайта:

http://design-for.net/

А вот по ссылке http://designfornet/ этого не произойдет, хотя сам сайт существует. Причина в том, что любой браузер будет искать его в большом интернете. Для перехода на сайт designfornet потребуется более сложная ссылка вида http://localhost/designfornet/www/

И это при условии запуска веб сервера XAMPP (ведь сервер для http://design-for.net/ где-то работает круглосуточно).

1.2. В тексте этой ссылки http://localhost/designfornet/www/ для браузера указан путь, какой ему надо преодолеть до папки www нашего сайта, где лежит страница index.html, из которой он вычитывает и рисует нам на экране приветствие «Это домашний сайт designfornet. Ура!».

1.3. Я вижу противоречие в написаниях ссылок:

длинной ссылки для сайта внутри компьютера с коротким путем

и

короткой ссылки для перехода на сайт, расположенный за тысячи миль от моего дома на чужом компьютере (сервере).

1.4. Весь секрет состоит в существовании специальных серверов DNS, в которых прописывают место расположения (IP) каждого сайта в сети, что позволяет для нас — людей – указывать только короткую ссылку с понятными для человека словами, тогда как в действительности ссылка для самой программы браузера остается в виде ряд чисел. Для людей же составляются ЧПУ – человеко-понятные урлы. В тексте человеко-понятной ссылки http://design-for.net/ весь длинный путь от моего компьютера до сервера хостера и через его папки к папке сайта был спрятан, а указана лишь эта конечная папка design-for.net на физическом сервере, адрес которого был подсказан браузеру на DNS сервере.

1.5. Если мы хотим сделать интернет внутри компьютера копией Большого, то нам надо прописать наш домашний сайт designfornet в особом файле, который является аналогом сервера DNS и научиться сокращать вид ссылки до общепринятого вида:

http://site.zona/

1.6. Тут настало время вспомнить, что основной программой в нашем компьютере является операционная система (у меня Windows 7). В ней уже предусмотрена возможность создания внутреннего сайта по имени localhost.

Для того чтобы в этом убедиться надо найти файл hosts (без расширения) по адресу: C:\Windows\System32\drivers\etc

1.7. Файл hosts — системный, поэтому при его открытии надо быть осторожным и лучше сразу для перестраховки сразу сохраним его копию в какой-нибудь папке.

Иногда система делает файл hosts невидимым. В этом случае вы должны иметь права администратора, чтобы в свойствах родительской папки etc убрать значение «скрытый» для всех внутренних файлов. Чтобы не искать каждый раз файл hosts заново создайте его ярлык на рабочем столе.

1.8. Если мы откроем файл hosts в текстовом редакторе (лучше в Notepad++, но сегодня можно и в Блокноте), то внизу увидим строки:

…
# localhost name resolution is handled within DNS itself.
#127.0.0.1       localhost
#::1             localhost
127.0.0.1 localhost
127.0.0.1 www.localhost

Предложение «localhost name resolution is handled within DNS itself» переводится следующим образом: «резолюция имени localhost обработана в пределах самого DNS.»

1.9. Выражение из четырех групп чисел — 127.0.0.1 – это IP адрес для всех сайтов внутри компьютера, первым из которых заранее прописан сайт localhost.

Такая запись позволяет браузеру находить сайт localhost по его адресу (IP=127.0.0.1) – то есть внутри компьютера.

Так как ниже есть строка:

127.0.0.1 www.localhost

то по аналогии мы предполагаем, что браузер будет искать www.localhost так же внутри компьютера. Для браузера сайты с именами localhost и www.localhost – это два разных сайта.

Нам еще предстоит сделать их зеркалами одного сайт, чтобы по обеим ссылкам браузер находил один сайт.

1.10. Наша задача повторить для своего сайта с именем designfornet всё, что сделано для сайта localhost, поэтому прописываем его в файле hosts, чтобы заставит браузеры так же искать его не в Большом Интернете, а внутри компьютера среди сайтов с IP=127.0.0.1.

1.11. Для этого копируем отсюда следующие строки:

127.0.0.1 designfornet
127.0.0.1 www.designfornet

И подставляем их в окне текстового редактора в текст файла hosts под самые нижние строчки, чтобы получилось нечто подобное:

…
# localhost name resolution is handled within DNS itself.
#127.0.0.1       localhost
#::1             localhost
127.0.0.1 localhost
127.0.0.1 www.localhost
127.0.0.1 designfornet
127.0.0.1 www.designfornet

1.12. Сохраняем изменения в файле hosts через редактор (там есть значок «Сохранить», как в Word), но сам файл hosts пока не закрываем, как и сам редактора.

Apache виртуальный хост

2.1. Следующим этапом настройки виртуальных хостов станет наладка взаимодействия сайта с модулем Apache, составляющим ядро вебсервера XAMPP.

Вначале надо внести поправки в главный конфигурационный файл сервера apache httpd conf, который находится по адресу C:\xampp\apache\conf.

2.2. Возьмем файл httpd.conf для редактирования в текстовый редактор и найдем в нем две строки:

#LoadModule vhost_alias_module modules/mod_vhost_alias.so
#Include «conf/extra/httpd-vhosts.conf» (намного ниже — и может быть уже без #)

Знаки # не позволяют выполняться этим инструкциям, поэтому раскомментируем их – т.е. уберем все решетки # перед этими фразами.

Первая запись позволяете обрабатывать ссылки в простом и в вебовском виде (слово alias переводится как «псевдоним» – этой строчкой мы разрешаем существования зеркал для сайта, начинающихся с www и без.

Вторая строка включает (запускает) файл httpd-vhosts.conf, который отвечает за виртуальные хосты.

В файле httpd.conf эти две строчки должны быть без решеток, поэтому их просто убираем:

LoadModule vhost_alias_module modules/mod_vhost_alias.so
Include «conf/extra/httpd-vhosts.conf»

Сохраняем изменения в файле httpd.conf.

2.3. Теперь перейдем к файлу httpd-vhosts.conf по адресу C:\xampp\apache\conf\extra

Возьмем файл httpd-vhosts.conf в текстовом редакторе. Понятно, что здесь находятся записи о виртуальных хостах.

Теперь нам надо дописать (вставить снизу) под имеющиеся строки скрипт, который мы скопируем из нижнего параграфа

NameVirtualHost *:80
<VirtualHost *:80>
    DocumentRoot "C:\xampp\htdocs"
    ServerName localhost
</VirtualHost>
<VirtualHost *:80>
    ServerAdmin webmaster@localhost
    DocumentRoot "C:\xampp\htdocs\designfornet\www"
    ServerName designfornet
    ServerAlias www.designfornet
    ErrorLog "C:\xampp\htdocs\designfornet\logs\error_log"
    CustomLog "C:\xampp\htdocs\designfornet\logs\access.log" combined
  <Directory "C:\xampp\htdocs\designfornet\www">
    AllowOverride All
    Order allow,deny
    Allow from all
  </Directory>
</VirtualHost>
Обратите внимание, что в некоторых версиях в коде могут использоваться одинарные английские кавычки (’), типа «DocumentRoot ‘C:\xampp\htdocs’», тогда вам самим придется исправлять наш скрипт под ваш httpd-vhosts.conf.

2.4. Для любознательных я расшифрую строки скрипта. Там речь идет типа этого:

— будет создан виртуальный сервер на порту 80, документы администратора root сервера будут располагаться в папке htdocs, создается почтовый ящик с именем webmaster@localhost;

— далее – создается виртуальный сайт с именем designfornet и с псевдонимом www.designfornet, указываются адреса журналов ошибок и запрет на допуск сторонним лицам.

2.5. Сохраняем изменения в файле httpd-vhosts.conf. Закрываем файлы httpd-vhosts.conf и httpd.conf.

Сервер Apache воспримет новые установки, только если мы его перезагрузим. Откроем Контрольную панель XAMPP и кнопкой Stop остановим работу Apache. Через некоторое время запустим его снова кнопкой Start.

2.6. Следующий шаг – проверяем, будут ли теперь работать короткие ссылки designfornet и www.designfornet в браузер. Копируем ссылки по очереди отсюда и вставляем в строку адреса браузера Mozilla Firefox.

Можно проверить и другие браузеры, однако Google Chrome может игнорировать локальные хосты.

Если мы сделали все аккуратно, то по любой ссылке http://designfornet/ или http://www.designfornet/ будет открываться один и тот же сайт designfornet на странице с приветствием «Это домашний сайт designfornet. Ура!».

2.7. Сделаем небольшие выводы из нашего урока по созданию виртуальных хостов.

В системе Windows имеется специальный файл hosts в котором можно записать в виде исключения домашние сайты, тогда браузеры не будет искать их в Большом Интернете. Такой файл выполняет роль DNS сервера, который знает картографию сайтов в Интернете.

В программе сервера Apache в главном конфигурационном файле httpd.conf требуется активировать возможность определения синонимов (псевдонимов) сайта (без и с www) в тексте ссылок, тогда по разным ссылкам:

http://designfornet/

http://www.designfornet/

будет открываться одна и та же страница.

Страницы designfornet и www.designfornet называются зеркалами.

Чтобы получить короткий вид ссылки надо активировать файл httpd-vhosts.conf и внести в него настройки нашего сайта.

Как создать виртуальный хост

3.1. Для закрепления урока попробуем быстро создать виртуальные хосты для сайта с произвольным именем. Придумаем сайту имя, по-русски означающее «мой_сайт-2_на_локальном_компе» — my_site-2.local, отвечающее всем требованиями: из букв латинского языка с разрешенными знаками и даже с несуществующей зоной local.

3.2. Создадим для этого сайта папку в папке htdocs (C:\xampp) внутри севера XAMPP и дадим ей имя my_site-2.local. Следом уже внутри папки my_site-2.local создаем две подпапки: logs с пустым текстовым документом error_log.txt и вторую подпапку — www с файлом index.html. В файл index.html запишем новое приветствие: «Это сайт my_site-2.local».

3.3. Настроим Windows, чтобы она заставляла браузер искать сайт внутрь компьютера, если ссылка будет иметь вид my_site-2.local (или www.my_site-2.local).

Для этого открываем системный файл hosts (C:\Windows\System32\drivers\etc) и подписываем имя нашего сайта и его зеркало (псевдоним с www) под самые нижние строки, как мы это делали для сайта designfornet:

127.0.0.1 designfornet
127.0.0.1 www.designfornet
127.0.0.1 my_site-2.local
127.0.0.1 www.my_site-2.local

3.4. Сохраняем изменения в файле hosts и переходим в папку XAMPP. Главный конфигурационный файл httpd.conf нам уже не нужен, поэтому открываем только файл httpd-vhosts.conf по адресу C:\xampp\apache\conf\extra. Копируем из окна редактора кусок скрипта, касающийся сайта designfornet и вставляем его в какой-нибудь документ – или Блокнот или даже Word:

<VirtualHost *:80>
    ServerAdmin webmaster@localhost
    DocumentRoot "C:\xampp\htdocs\designfornet\www"
    ServerName designfornet
    ServerAlias www.designfornet
    ErrorLog "C:\xampp\htdocs\designfornet\logs\error_log"
    CustomLog "C:\xampp\htdocs\designfornet\logs\access.log" combined
  <Directory "C:\xampp\htdocs\designfornet\www">
    AllowOverride All
    Order allow,deny
    Allow from all
  </Directory>
</VirtualHost>

3.5. Понятно, что это нам надо для того, чтобы заменить слово designfornet на имя нового сайта my_site-2.local. После смены имен мы должны получить следующий скрипт:

<VirtualHost *:80>
    ServerAdmin webmaster@localhost
    DocumentRoot "C:\xampp\htdocs\my_site-2.local\www"
    ServerName my_site-2.local
    ServerAlias www.my_site-2.local
    ErrorLog "C:\xampp\htdocs\my_site-2.local\logs\error_log"
    CustomLog "C:\xampp\htdocs\my_site-2.local\logs\access.log" combined
  <Directory "C:\xampp\htdocs\my_site-2.local\www">
    AllowOverride All
    Order allow,deny
    Allow from all
  </Directory>
</VirtualHost>

Следите, чтобы не образовались ненужные пробелы в тексте и отступы от косой черты.

3.6. Вернем (подставим) этот текст снизу в файл httpd.conf и сохраним изменения в текстовом редакторе. В результате получим для сайта my_site-2.local секцию в файле httpd.conf, аналогичную секции, посвященной сайту designfornet.

3.7. Останавливаем через Контрольную панель XAMPP модуль Apache и запускаем снова кнопкой «Start», чтобы наши изменения вступили в силу.

3.8. Вставляем поочередно ссылки my_site-2.local и www.my_site-2.local в браузер. Если все было сделано без ошибок, то ссылки http://my_site-2.local и http://www.my_site-2.local будут вести на одну и туже страницу с приветствием «Это сайт my_site-2.local».


Я надеюсь, что теперь ни у кого не будет трудностей с созданием сайта на вебсервере XAMPP и настройках виртуальных хостов.


Вы можете еще потренироваться в создании сайтов, например, с именем site3.home.

Я думаю что можно сделать даже небольшое обобщение по принципам устройства интернета.

Главной программой интернета является программа браузер, которую мы заставляем искать сайт, если укажем его в строке адреса. Сама она не знает, где лежит запрашиваемый сайт, поэтому вначале спрашивает у системы windows (в файле hosts) – нет ли внутренних сайтов, как наши. Если сайта нет в списке, то браузер обращается на DNS сервер в Интернете, которые знают картографию сайтов в сети. Получив от DNS серверa адрес сайта браузер переходит на тот физический сервер, где лежит папка сайта и активирует серверные программы. Они выдают ему одну и туже страницу, даже при наличии в ссылке псевдонимов (без и с www).

Настройка виртуальных хостов – это лишь создание коротких и понятных для людей ссылок.

Настройка виртуальных хостов на локальном сервере? — Хабр Q&A

Здравствуйте уважаемые сообщники. Вопрос по настройке виртуальных хостов на локальном сервере.

Дано.

Есть локальная машина МакБук с установленным на нее Веб-сервером MAMP. На этой же машине с эим же веб-сервером уже давно живут и прекрасно себя чувствуют штук 8 локальных сайтов (в основном все на вордпрессе). Все сайты на локальном сервере открываются по переходу типа: localhost:8888/site-name/ (насколько я понимаю локальный сервер Апач использует порт 8888).

Появилась необходимость установить на локальном сервере еще один сайт, но с ним есть определенные нюансы. Этот сайт совершенно самописный и достаточно сложный. Устанавливается и работает он исключительно путем установки виртуального хоста. Т.е. на машине на которой он уже установлен в браузере сайт доступен по адресу: business-catalog.net.www

Локальная машина на которой сайт уже работает и с которой его надо перенести на мой МакБук работает под операционной системой WinXP, с установленным и настроенным веб-сервером XAMPP.

Что я уже сделал на своем МакБуке:

В файле httpd.conf раскоментировал строчку: Include /Applications/MAMP/conf/apache/extra/httpd-vhosts.conf

В файле httpd-vhosts.conf добавил в конце текст вида:

В файле etc/hosts добавил строчку вида: 127.0.0.1 business-catalog.net.www

В результате, ничего не помогает. С запущенным или остановленным веб-севрером MAMP, по адресу business-catalog.net.www лицезрею душераздирающую надпись: «It Works!»

Вопрос
Что я делаю не так Как таки настроить виртуальный хост? Правильно ли я указал в httpd-vhosts.conf порт 8888 или нужно было оставить как было по умолчанию 80? Туда ли вообще нужно было вставлять этот текст или в httpd.conf?

Очень смущает информация которую выдает php.info:

Почему Virtual Directory Support стоит Disabled, как (и нужно ли?) его поменять на Enabled (на компе с Win Xp где сайт локально успешно работает эта функция в php.info отображается как Enabled)?

Заранее спасибо вам за помощь дорогие сообщники.

Настройка virtualhost в apache2 как сделать виртуальный хост

Для настройки виртуальных хостов на web сервере apache2 под ubuntu 7.10, 8.04, 8.10, 9.04, 9.10, Debian 5 необходимо в самое начало или конец (вне инструкций ) файла /etc/apache2/sites-available/default добавить директиву:

NameVirtualHost 192.168.0.1

Там необходимо указать IP адрес либо DNS имя компютера на котором размещён вебсервер, можно указать localhost или 127.0.0.1

Затем, учитывая организацию конфигов apache2 в Debian, необходимо создать файл виртуального хоста в директории: /etc/apache2/sites-available/
например ваш сайт называется supebreys.ru, значит логичнее создать чтото вроде /etc/apache2/sites-available/supebreys_ru.conf. В любом случае это название должно вам говорить для чего этот файл и будет лучше если вы будете придерживаться какого то одного правила создания таких файлов. Затем в этот файл добавляем такой текст:

<VirtualHost *:80>
        DocumentRoot "/home/httpd/breys.ru/www"
        ServerName    breys.xxx
        <Directory />
                allow from all
                Options +Indexes
       </Directory>
        ScriptAlias /cgi-bin/ "/home/httpd/breys.ru/cgi-bin/"
        CustomLog  /home/httpd/breys.ru/access.log common
        ErrorLog /home/httpd/breys.ru/error.log
</VirtualHost>

Здесь мы создали виртуальный хост которых будет обрабатывать запросы на 80 порту с любого доступного адреса

Также тут указана корневая директория сайта, директория с cgi скриптами и пути к файлам журналов работы вебсервера

Для корневой директори указаны дополнительные(необязательные) опции: разрешение доступа с любого адреса и включение модуля обработки индексного файла, в принципе эти опции не обязательны и нужны только если прихоится переопределять глобальные политики доступа и загрузки модулей вебсервером

После создания этого файла веб сервер ещё не видит его. Если внимательно посмотреть на файлы в директориях /etc/apache2/sites-enabled/ и /etc/apache2/sites-available/ то должно стать ясно, то что в директории /etc/apache2/sites-available лежат файлы описывающие виртуальные хосты, а в папке/etc/apache2/sites-enabled/ лежат симлинки на файлы в sites-available.  Исходя из названий становится ясно, что:
sites-available — все доступные виртуальных хосты
sites-enabled — включаемые вебсервером
то есть, чтобы добавить виртульный хост в apache2, необходимо либо создать файл нового виртуального хоста в sites-available либо дописать(не желательно) его в уже имеющийся там файл, а чтобы включить виртуальный хост, необходимо чтобы директории sites-enabled была ссылка на файл описывающий виртуальных хост

Это сделанно для того, чтобы разделить виртуальные домены на уровне хостинга. Например, хостер чтобы временно удалить какой то домен удаляет ссылку из папки sites-enabled и перезапускает вебсервер и так же быстро включает домен снова, без правки единого конфига, как это было реализованно ранее.

Итак, включаем наш, только что созданный, новых виртуальный хост:

ln -s /etc/apache2/sites-available/breys_ru.conf /etc/apache2/sites-enabled/breys_ru.conf

Этой командой мы создаём симлинк(символическую ссылку на один файл в другой директории) на рабочий файл виртуального хоста, который будет обработан при следующем перезапуске вебсервера

Возможно вам потребуется расширить поведение вашего виртуального хоста — может потребоваться чтобы он был доступен по нескольким адреса

Например, у меня имеются зеркала моих сайтов и я работаю с ними дома используя имена сайтов + моя домашняя зона .xxx, тоесть для сайта breys.ru у меня есть домашнее зеркало breys.xxx, но вполне вероятна ситуация когда нужно показать зеракло ещё кому то, тогда я могу использовать DNS зону зарегистрированную за мной на DYNDNS.COM, тоесть это зеркало имеет дополнительный адрес в виде:breys.ffsdmad.homelinux.org, ещё более частая ситуация когда нужно иметь имя www.breys.ru и соответственноwww.breys.ffsdmad.homelinux.org
Чтобы включить этого необходимо в файл виртального хоста, внутри инструкций .. добавить список необходимых алиасов:

<VirtualHost *:80>
....другие инструкции
 ServerName breys.xxx
 ....
 ServerAlias www.breys.xxx
 ServerAlias breys.ffsdmad.homelinux.org
 ServerAlias www.breys.ffsdmad.homelinux.org
 ....
</VirtualHost>

Вполне возможно придётся заниматься отладкой модуля mod_rewrite, для этого необходимо в файл виртуального хоста добавить строки:

<VirtualHost *:80>
....другие инструкции
RewriteLog /home/httpd/breys.ru/rewrite.log
RewriteLogLevel 9
</VirtualHost>

Начните с небольшого примера и постепенно расширяйте возможности своего виртуального хостинга различными возможностями вебсервера apache2 (а их у него предостаточно) и постепенно вы поймёте насколько проста и логична такая структура в условиях такого сложного сервиса как вебхостинг

Также следует заметить, что если вы поставили на локальную машину сервер apache2 и виртуальные хосты прописаны в /etc/hosts (соответствия имени ip адресу), то начинаются тормоза при обращении к вебсерверу. Дело в том, что браузер сначала пытается распознать ip адрсе у dns сервера, который у вас прописан в /etc/resov.conf, а не проверять файл /etc/hosts. Это можно исправить заменив в файле /etc/host.conf последовательность перебора сервисов разрешения имён, но лучше всего настроить bind и забыть про тормоза и проблемы с обратным разрешением имени по IP

Вот тут можно прочитать как настроить bind для домашней сети, а здесь можно взять скрипт автоматического создания виртуальных хостов в условиях домашнего хостинга

Эта заметка висит здесь уже второй год и на неё не прекращается поток запроса, а это наталкивает меня на мысль, что люди не могут разобраться с этой системой, а значит нужно объяснять ещё более доходчиво, в этоге эта заметка переписывалась уж три раза

Если у вас остались или возникли какие то вопросы или неясности, не стесьняйтесь, спрашивайте, система коментариев мгновенно оповещает меня через Jabber, таким образом я реагирую практически моментально

 

XAMPP — настройка виртуального сервера / Habr


→ Скачать XAMPP
XAMPP ver. 1.8.3-3 for Mac OS X ver. 10.9.2

Первоначальная настройка

Изначально XAMPP имеет один адрес это localhost
При загрузке — должна открыться страница с информацией о сервере, версии PHP ссылками на phpmyadmin и пр.

Для создания своего хоста Apache VirtualHosts

1. Открываем конфигурационный файл — /Applications/XAMPP/xamppfiles/etc/httpd.conf

1.1. Изменить User daemon на User username (стр. 173)

171      #running httpd, as with most system services. 
172      # 
173      User daemon 
174      Group daemon 
175  </IfModule> 

где username — имя вашего пользователя в системе Mac OS X
171      #running httpd, as with most system services. 
172      # 
173      User username
174      Group daemon 
175  </IfModule>  

1.2. Включаем VirtualHosts — раскомментировав (стр. 488)
  • Include etc/extra/httpd-vhosts.conf
487    #Virtual hosts
488    #Include etc/extra/httpd-vhosts.conf

убрать решетку перед Include
487    #Virtual hosts                  
488    Include etc/extra/httpd-vhosts.conf 


2. Добавление своих хостов — открываем файл — /Applications/XAMPP/etc/extra/httpd-vhosts.conf

2.1. Чтобы оставить локальный хост работающим без изменений

#localhost 
<VirtualHost *:80> 
    ServerName localhost 
    DocumentRoot "/Applications/XAMPP/xamppfiles/htdocs" 
    <Directory "/Applications/XAMPP/xamppfiles/htdocs"> 
        Options Indexes FollowSymLinks Includes execCGI 
        AllowOverride All 
        Allow From All 
        Order Allow,Deny 
    </Directory> 
</VirtualHost> 

2.2. Подключить свой сайт — cоздать папку сайта site.local (пример)
username — ваше имя пользователя в системе Mac OS X
folder — пусть к папке сайта
site.local — папка сайта
#My custom host 
<VirtualHost *:80> 
    ServerName site.local 
    DocumentRoot "/Users/username/folder/site.local" 
    <Directory "/Users/username/folder/site.local"> 
        Options Indexes FollowSymLinks Includes ExecCGI 
        AllowOverride All 
        Require all granted 
    </Directory> 
    ErrorLog "logs/site.local-error_log" 
</VirtualHost> 

Директиву AllowOverride None обязательно заменяем на AllowOverride All, иначе файл .htaccess не будет прочитан сервером Apache

3. Необходимо указать системе Mac OS X, где находятся виртуальные сайты.
В терминале вводим команду:

sudo /Applications/TextEdit.app/Contents/MacOS/TextEdit /etc/hosts

Добавляем в конец файла hosts строчку: 127.0.0.1 site.local

#XAMPP    VirtualHost  
127.0.0.1        site.local 

Перезапускаем XAMPP и виртуальные хосты добавлены.

по localhost — открывается XAMPP
по site.local — открывается уже наш сайт.

Готово!

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *