Наши партнеры

UnixForum





Библиотека сайта rus-linux.net

Серверы Linux. Часть I. Серверы Apache и Squid

Оригинал: Apache web server
Автор: Paul Cobbaut
Дата публикации: 24 мая 2015 г.
Перевод: А.Панин
Дата перевода: 10 июля 2015 г.

Глава 1. Веб-сервер Apache

1.5. Виртуальные серверы для заданных номеров портов в дистрибутиве CentOS

1.5.1. Параметры конфигурации основного веб-сайта

В отличие от дистрибутива Debian, в дистрибутиве CentOS файл конфигурации виртуального сервера не используется для хранения параметров конфигурации основного веб-сайта. Вместо этого по умолчанию веб-сервер передает стандартную страницу с сообщением об ошибке в случае отсутствия файла индексной страницы в соответствующей директории (/var/www/html).

1.5.2. Три дополнительных виртуальных сервера

В данном примере также будут создаваться три дополнительных веб-сайта для потенциальных клиентов, которые желают воспользоваться вашими услугами для создания веб-сайтов своих клубов. Как и прежде, этим клубами являются клуб моделистов поездов под названием "Choo Choo", шахматный клуб под названием "Chess Club 42" и хакспейс под названием "hunter2".

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

[root@CentOS65 ~]# vi /etc/httpd/conf.d/choochoo.conf
[root@CentOS65 ~]# cat /etc/httpd/conf.d/choochoo.conf
<VirtualHost *:7000>
        ServerAdmin webmaster@localhost
        DocumentRoot /var/www/html/choochoo
</VirtualHost>
[root@CentOS65 ~]# vi /etc/httpd/conf.d/chessclub42.conf
[root@CentOS65 ~]# cat /etc/httpd/conf.d/chessclub42.conf
<VirtualHost *:8000>
        ServerAdmin webmaster@localhost
        DocumentRoot /var/www/html/chessclub42
</VirtualHost>
[root@CentOS65 ~]# vi /etc/httpd/conf.d/hunter2.conf
[root@CentOS65 ~]# cat /etc/httpd/conf.d/hunter2.conf
<VirtualHost *:9000>
        ServerAdmin webmaster@localhost
        DocumentRoot /var/www/html/hunter2
</VirtualHost>

Обратите внимание на отличные номера портов 7000, 8000 и 9000. Также обратите внимание на то, что мы использовали уникальные пути к директориям данных веб-сайтов в рамках директив DocumentRoot.

1.5.3. Три дополнительных порта

Нам придется активировать три указанных порта в рамках файла конфигурации веб-сервера Apache с именем httpd.conf.

[root@CentOS65 ~]# vi /etc/httpd/conf/httpd.conf
[root@CentOS65 ~]# grep ^Listen /etc/httpd/conf/httpd.conf
Listen 80
Listen 7000
Listen 8000
Listen 9000

1.5.4. Система контроля доступа SELinux защищает наши порты

Если мы попробуем перезапустить наш веб-сервер, то обнаружим следующее сообщение об ошибке:

[root@CentOS65 ~]# service httpd restart
Stopping httpd:                                            [  OK  ]
Starting httpd: 
       (13)Permission denied: make_sock: could not bind to address 0.0.0.0:7000
no listening sockets available, shutting down

Оно выводится из-за того, что в рамках системы контроля доступа SELinux порты 7000 и 8000 зарезервированы для других целей. Нам придется сообщить системе SELinux о том, что мы хотим использовать эти порты для передачи трафика HTTP.

[root@CentOS65 ~]# semanage port -m -t http_port_t -p tcp 7000
[root@CentOS65 ~]# semanage port -m -t http_port_t -p tcp 8000
[root@CentOS65 ~]# service httpd restart
Stopping httpd:                                            [  OK  ]
Starting httpd:

1.5.5. Три дополнительных веб-сайта

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

[root@CentOS65 ~]# mkdir /var/www/html/choochoo
[root@CentOS65 ~]# mkdir /var/www/html/chessclub42
[root@CentOS65 ~]# mkdir /var/www/html/hunter2

А также нам придется разместить простейшие индексные страницы веб-сайтов в данных директориях.

[root@CentOS65 ~]# echo 'Choo Choo клуб моделистов поездов Choo Choo' > /var/www/html/choochoo/index.html
[root@CentOS65 ~]# echo 'Добро пожаловать в шахматный клуб Chess club 42' > /var/www/html/chessclub42/index.html
[root@CentOS65 ~]# echo 'ВсЕ о ХакИнгЕ в ХаКсПеЙсЕ HuNtEr2' > /var/www/html/hunter2/index.html

1.5.6. Активация дополнительных веб-сайтов

Единственный способ активации или деактивации веб-сайтов в дистрибутиве RHEL/CentOS заключается в переименовании или перемещении соответствующих файлов конфигурации. Любой файл с расширением .conf в директории /etc/httpd/conf.d будет загружаться веб-сервером Apache. Для деактивации веб-сайта мы можем либо переименовать соответствующий файл конфигурации, либо переместить его в другую директорию.

Файлы конфигурации созданы, поэтому мы можем сообщить веб-серверу Apache о необходимости повторной загрузки данных конфигурации.

[root@CentOS65 ~]# ls /etc/httpd/conf.d/
chessclub42.conf  choochoo.conf  hunter2.conf  README  welcome.conf
[root@CentOS65 ~]# service httpd reload
Reloading httpd:

1.5.7. Тестирование трех веб-сайтов

Протестируем работоспособность веб-сайта клуба моделистов поездов "Choo Choo", использующего порт 7000 сервера.

[root@CentOS65 ~]# wget 127.0.0.1:7000
--2014-05-11 11:59:36--  http://127.0.0.1:7000/
Подключение к 127.0.0.1:7000... соединение установлено.
HTTP-запрос отправлен. Ожидание ответа... 200 OK
Длина: 65 [text/html]
Сохранение в: `index.html'

100%[===========================================>] 65          --.-K/s   за 0s

2014-05-11 11:59:36 (4.47 MB/s) - `index.html' saved [65/65]

[root@CentOS65 ~]# cat index.html 
Choo Choo клуб моделистов поездов Choo Choo

А также работоспособность сайта шахматного клуба "Chess Club 42", использующего порт 8000 сервера.

[root@CentOS65 ~]# wget 127.0.0.1:8000
--2014-05-11 12:01:30--  http://127.0.0.1:8000/
Подключение к 127.0.0.1:8000... соединение установлено.
HTTP-запрос отправлен. Ожидание ответа... 200 OK
Длина: 77 [text/html]
Сохранение в: `index.html.1'

100%[===========================================>] 77          --.-K/s   за 0s

2014-05-11 12:01:30 (4.25 MB/s) - `index.html.1' saved [75/75]

[root@CentOS65 ~]# cat index.html.1 
Добро пожаловать в шахматный клуб Chess club 42

И работоспособность сайта хакспейса "hunter2", использующего порт 9000 сервера.

[root@CentOS65 ~]# wget 127.0.0.1:9000 
--2014-05-11 12:02:37--  http://127.0.0.1:9000/
Подключение к 127.0.0.1:9000... соединение установлено.
HTTP-запрос отправлен. Ожидание ответа... 200 OK
Длина: 55 [text/html]
Сохранение в: `index.html.2'

100%[===========================================>] 55          --.-K/s   за 0s

2014-05-11 12:02:37 (4.49 MB/s) - `index.html.2' saved [55/55]

[root@CentOS65 ~]# cat index.html.2 
ВсЕ о ХакИнгЕ в ХаКсПеЙсЕ HuNtEr2

После завершения тестирования работоспособности виртуальных серверов следует удалить временные файлы.

[root@CentOS65 ~]# rm index.html index.html.1 index.html.2 

1.5.8. Правила межсетевого экрана

После выполнения всех описанных действий попытка доступа к веб-сайту с другой машины не увенчается успехом. Межсетевой экран будет блокировать входящие соединения с веб-сервером. Нам придется разрешить входящие соединения с используемыми виртуальными серверами портами физического сервера.

[root@CentOS65 ~]# iptables -I INPUT -p tcp --dport 80 -j ACCEPT
[root@CentOS65 ~]# iptables -I INPUT -p tcp --dport 7000 -j ACCEPT
[root@CentOS65 ~]# iptables -I INPUT -p tcp --dport 8000 -j ACCEPT
[root@CentOS65 ~]# iptables -I INPUT -p tcp --dport 9000 -j ACCEPT

А если необходимо, чтобы эти правила межсетевого экрана были активны и после перезагрузки системы, нам придется сохранить их.

[root@CentOS65 ~]# service iptables save
iptables: Saving firewall rules to /etc/sysconfig/iptables:[  OK  ]

1.6. Именованные виртуальные серверы в дистрибутиве CentOS

1.6.1. Именованные виртуальные серверы

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

Мы продолжим работу с тем же сервером, который уже обслуживает три веб-сайта на трех портах. Но в данном случае нам придется сделать так, чтобы эти веб-сайты были доступны по именам choochoo.local, chessclub42.local и hunter2.local.

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

[root@CentOS65 ~]# vi /etc/httpd/conf/httpd.conf
[root@CentOS65 ~]# grep ^NameVirtualHost /etc/httpd/conf/httpd.conf
NameVirtualHost *:80
[root@CentOS65 ~]#

После этого мы должны будем создать файлы конфигурации для новых виртуальных серверов.

[root@CentOS65 ~]# vi /etc/httpd/conf.d/choochoo.local.conf
[root@CentOS65 ~]# vi /etc/httpd/conf.d/chessclub42.local.conf
[root@CentOS65 ~]# vi /etc/httpd/conf.d/hunter2.local.conf
[root@CentOS65 ~]# cat /etc/httpd/conf.d/choochoo.local.conf
<VirtualHost *:80>
        ServerAdmin webmaster@localhost
        ServerName choochoo.local
        DocumentRoot /var/www/html/choochoo
</VirtualHost>
[root@CentOS65 ~]# cat /etc/httpd/conf.d/chessclub42.local.conf
<VirtualHost *:80>
        ServerAdmin webmaster@localhost
        ServerName chessclub42.local
        DocumentRoot /var/www/html/chessclub42
</VirtualHost>
[root@CentOS65 ~]# cat /etc/httpd/conf.d/hunter2.local.conf
<VirtualHost *:80>
        ServerAdmin webmaster@localhost
        ServerName hunter2.local
        DocumentRoot /var/www/html/hunter2
</VirtualHost>
[root@CentOS65 ~]#

Обратите внимание на то, что все виртуальные серверы принимают соединения на порту 80, а их имена заданы с помощью директив ServerName.

1.6.2. Разрешение доменных имен

Мы должны каким-либо образом осуществлять разрешение установленных доменных имен. Данная операция может осуществляться средствами сервера DNS, который будет обсуждаться в другой главе. В данном же случае мы рассмотрим способ быстрого добавления трех доменных имен в файл /etc/hosts.

[root@CentOS65 ~]# grep ^192 /etc/hosts
192.168.1.225 choochoo.local
192.168.1.225 chessclub42.local
192.168.1.225 hunter2.local

Учтите, что в вашем случае может использоваться отличный IP-адрес.

1.6.3. Перезапуск и проверка работоспособности веб-сервера

После выполнения команды service httpd reload веб-сайты должны быть доступны по соответствующим доменным именам.

[root@CentOS65 ~]# service httpd reload
Reloading httpd: 
[root@CentOS65 ~]# wget chessclub42.local
--2014-05-25 16:59:14--  http://chessclub42.local/
Распознаётся chessclub42.local... 192.168.1.225
Подключение к chessclub42.local|192.168.1.225|:80... соединение установлено.
HTTP-запрос отправлен. Ожидание ответа... 200 OK
Длина: 77 [text/html]
Сохранение в:  index.html 

100%[=============================================>] 77          --.-K/s   за 0s      

2014-05-25 16:59:15 (1014 KB/s) - `index.html' сохранён [77/77]

[root@CentOS65 ~]# cat index.html
Добро пожаловать в шахматный клуб Chess club 42

1.7. Защита веб-сайта с помощью пароля в дистрибутиве CentOS

Вы можете защитить файлы и директории своего веб-сайта с помощью файла .htaccess, в котором находится ссылка на файл .htpasswd. Утилита htpasswd позволяет создать файл .htpasswd, который предназначен для хранения идентификатора пользователя и его пароля (в зашифрованном виде).

В примере ниже благодаря флагу -c создается новый файл .htpasswd с паролем для пользователя cliff.

[root@CentOS65 ~]# htpasswd -c /var/www/.htpasswd cliff
New password: 
Re-type new password: 
Adding password for user cliff
[root@CentOS65 ~]# cat /var/www/.htpasswd
cliff:QNwTrymMLBctU

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

[root@CentOS65 ~]# htpasswd /var/www/.htpasswd rob
New password: 
Re-type new password: 
Adding password for user rob
[root@CentOS65 ~]# cat /var/www/.htpasswd
cliff:QNwTrymMLBctU
rob:EC2vOCcrMXDoM
[root@CentOS65 ~]#

Пользователи Cliff и Rob используют один и тот же пароль (hunter2), но это не заметно при рассмотрении содержимого файла .htpasswd из-за отличающихся значений salt.

После этого нам придется создать файл .htaccess в объявленной в рамках директивы DocumentRoot корневой директории защищаемого с помощью пароля веб-сайта. В данном примере показана методика создания упомянутого файла.

[root@CentOS65 ~]# cat /var/www/html/hunter2/.htaccess 
AuthUserFile /var/www/.htpasswd
AuthName "Вход исключительно для участников!"
AuthType Basic
require valid-user

Учтите, что мы защищаем с помощью пароля веб-сайт, который был создан ранее для работы на порту 9000 сервера.

Ввиду того, что мы разместили рассматриваемый веб-сайт хакспейса "hunter2" в поддиректории основного вебсайта сервера, нам придется установить соответствующее значение параметра AllowOverride в файле конфигурации основного веб-сайта сервера, расположенном по пути /etc/apache2/sites-available/default, таким образом, как показано ниже.

[root@CentOS65 ~]# vi /etc/httpd/conf/httpd.conf
<Directory "/var/www/html">

# 
# Возможными значениями директивы Options являются значения "None", "All",
# или любая комбинация следующих значений:
#   Indexes Includes FollowSymLinks SymLinksifOwnerMatch ExecCGI MultiViews
# 
# Обратите внимание на то, что значение "MultiViews" должно быть указано *явно*  --- 
# значение "Options All" не подразумевает его автоматическое использование.
# 
# Директива Options является как сложной в использовании, так и важной. Пожалуйста,
# обратитесь к документации по адресу http://httpd.apache.org/docs/2.2/mod/core.html#options
# для получения дополнительной информации.
# 
    Options Indexes FollowSymLinks

# 
# Директива AllowOverride управляет директивами, которые могут использоваться в файлах
# контроля доступа .htaccess. Допустимыми значениями являются "All", "None" или любые 
# комбинации ключевых слов: Options FileInfo AuthConfig Limit
#  
    AllowOverride Authconfig

# 
# Перечисление клиентов, которые могут получать данные от этого веб-сервера.
# 
    Order allow,deny
    Allow from all

</Directory>

Теперь перезапустите службу веб-сервера Apache с именем httpd и протестируйте его работоспособность!


Предыдущий раздел: Оглавление Следующий раздел:
Именованные виртуальные серверы в дистрибутиве Debian   Диагностика веб-сервера Apache