Настройка поддержки VirtualHost в CentOS

Что такое виртуальный хостинг и зачем он нужен.

Виртуальный хостинг — вид хостинга, при котором множество веб-сайтов расположено на одном веб-сервере. Это самый экономичный вид хостинга, подходящий для небольших проектов.

 

Предположим вы хотите разместить в пределах одного сервера несколько сайтов. При этом для пользователей из внутренней сети необходима поддержка таких сервисов как 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

По умолчанию у вас прописано 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

VirtualHost CentOS

Вновь откроем 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>

VirtualHost 80

 

Виртуальный хост будет использовать внешний IP-адрес и слушать 80 порт. Изменим параметр NameVirtualHost на NameVirtualHost EXTERNAL IP:80. Тем самым мы укажем apache что виртуальный хостинг будет использовать внешний адрес. Больше ничего в httpd.conf менять не нужно.

VirtualHost external IP

 

В CentOS настройки виртуальных хостов берутся из конфигурационных файлов, расположенных в каталоге /etc/httpd/conf.d. Перейдем туда и создадим файлы для наших будущих сайтов.

daizy.ru.conf
blog.eaglenn.ru.conf

VirtualHost.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.

На этом настройка закончена.

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

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