Что такое виртуальный хостинг и зачем он нужен.
Виртуальный хостинг — вид хостинга, при котором множество веб-сайтов расположено на одном веб-сервере. Это самый экономичный вид хостинга, подходящий для небольших проектов.
Предположим вы хотите разместить в пределах одного сервера несколько сайтов. При этом для пользователей из внутренней сети необходима поддержка таких сервисов как wpad, внутренний веб сервер и прочее.
1. Настройка httpd.conf
Для поддержки работы apache с виртуальными хостами необходимо внести небольшие изменения в настройки сервера. В первую очередь вам необходимо внести изменения в файл /etc/httpd/conf/httpd.conf. Откроем httpd.conf и найдем секцию:
#
# Listen: Allows you to bind Apache to specific IP addresses and/or
# ports, in addition to the default. See also the <VirtualHost>
# directive.
#
# Change this to Listen on specific IP addresses as shown below to.
# prevent Apache from glomming onto all bound IP addresses (0.0.0.0)
#
По умолчанию у вас прописано Listen *:80, это значит что сервер apache висит на всех сетевых интерфейсах и слушает порт 80. Данная настройка подходит для поддержки одного сайта с доступом к нему как изнутри, так и снаружи.
Для поддержки виртуального хостинга лучше разнести работу веб сервера на разные адреса. Для этого пропишем следующие параметры в httpd.conf:
Listen LOCAL IP:80
Listen EXTERNAL IP:80
Данная настройка укажет серверу apache слушать 80 порт на внешнем и внутреннем IP-адресе. Если оставить только Listen LOCAL IP:80, то apache сервер будет слушать только внутренний интерфейс и ваши сайты не будут доступны из внешней сети. Я надеюсь вы используете правила FireWall которые ограничивают доступ к внутренней сети из глобального интернета.
2. Настройка виртуального хоста
Создадим на файловой системе необходимые папки для ваших виртуальных хостов. Как правило в CentOS директория расположения веб файлов находиться в каталоге /var/www. В каталоге www создадим папку blog.eaglenn.ru и daizy.ru. имена каталогам лучше давать из названий доменов которые будут ссылаться на эти папки. В моем случае это два домена:
- blog.eaglenn.ru
- daizy.ru
Вновь откроем https.conf, спустимся в самый низ к секции VirtualHost
#
# Use name-based virtual hosting.
#
NameVirtualHost *:80
#
# NOTE: NameVirtualHost cannot be used without a port specifier.
# (e.g. :80) if mod_ssl is being used, due to the nature of the
# SSL protocol.
##
# VirtualHost example:
# Almost any Apache directive may go into a VirtualHost container.
# The first VirtualHost section is used for requests without a known
# server name.
#
#<VirtualHost *:80>
# ServerAdmin webmaster@dummy-host.example.com
# DocumentRoot /www/docs/dummy-host.example.com
# ServerName dummy-host.example.com
# ErrorLog logs/dummy-host.example.com-error_log
# CustomLog logs/dummy-host.example.com-access_log common
#</VirtualHost>
Виртуальный хост будет использовать внешний IP-адрес и слушать 80 порт. Изменим параметр NameVirtualHost на NameVirtualHost EXTERNAL IP:80. Тем самым мы укажем apache что виртуальный хостинг будет использовать внешний адрес. Больше ничего в httpd.conf менять не нужно.
В CentOS настройки виртуальных хостов берутся из конфигурационных файлов, расположенных в каталоге /etc/httpd/conf.d. Перейдем туда и создадим файлы для наших будущих сайтов.
daizy.ru.conf
blog.eaglenn.ru.conf
Внесем настройки в наши файлы, для этого откроем например daizy.ru.conf и добавим следующие строки:
daizy.ru.conf
<VirtualHost EXTERNAL IP:80>
ServerName daizy.ru
DocumentRoot «/var/www/daizy.ru»
ServerAdmin admin@daizy.ru
ErrorLog /var/log/httpd/error_daizy.ru_log
CustomLog /var/log/httpd/access_daizy.ru_log common
<Directory «/var/www/daizy.ru»>
Options All
</Directory>
</VirtualHost>blog.eaglenn.ru.conf
<VirtualHost EXTERNAL IP:80>
ServerName blog.eaglenn.ru
DocumentRoot «/var/www/blog.eaglenn.ru»
ServerAdmin admin@blog.eaglenn.ru
ErrorLog /var/log/httpd/error_blog.eaglenn.ru_log
CustomLog /var/log/httpd/access_blog.eaglenn.ru_log common
<Directory «/var/www/blog.eaglenn.ru»>
Options All
</Directory>
</VirtualHost>
Аналогичную процедуру проделаем для нашего второго сайта. Обратите внимание на параметры:
- DocumentRoot
- Directory
- ServerName
Для каждого сайта они разные!
В настройках вашего DNS отвечающего за зоны сделаем соответствующие A записи с вашим EXTERNAL IP
3. Запуск apache
Запустим apache: /etc/init.d/httpd start или перезагрузим:/etc/init.d/httpd restart в зависимости от того в каком состоянии находился у вас сервер до внесения изменений.
Если нет ошибок, значит вы все сделали правильно и можете наслаждаться доступом к своим сайтам расположенным в виртуальных каталогах. Замечу что для внутренней сети веб каталогом будет папка которая используется веб сервером по умолчанию: /var/www/html
Если при запуске apache вы получили ошибку указанную ниже:
# /etc/init.d/httpd restart
Останавливается httpd: [ OK ]
Запускается httpd: Syntax error on line 11 of /etc/httpd/conf.d/blog.eaglenn.ru.conf:
ErrorLog not allowed here
[СБОЙ ]
Это значит что вы ошиблись и прописали параметры
ErrorLog /var/log/httpd/error_blog.eaglenn.ru_log
CustomLog /var/log/httpd/access_blog.eaglenn.ru_log common
в секцию Directory. Эти параметры относятся к настройкам VirtualHost перед секцией Directory.
На этом настройка закончена.