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

UnixForum





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

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

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

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

1.8. Диагностика веб-сервера Apache

После перезапуска службы веб-сервера будет осуществлена проверка синтаксиса файлов конфигурации из директории /etc/apache2 в дистрибутиве Debian или /etc/httpd в дистрибутиве CentOS с последующим выводом имени конфигурационного файла, в котором была обнаружена ошибка, номера строки данного файла с ошибкой и описания ошибки.

root@debian7:~# service apache2 restart
apache2: Syntax error on line 268 of /etc/apache2/apache2.conf: Syntax error o\
n line 1 of /etc/apache2/sites-enabled/chessclub42: /etc/apache2/sites-enabled\
/chessclub42:4: <VirtualHost> was not closed.\n/etc/apache2/sites-enabled/ches\
sclub42:1: <VirtualHost> was not closed.
Action 'configtest' failed.
The Apache error log may have more information.
 failed!

В примере файла конфигурации ниже можно обнаружить описанную ошибку... отсутствующий символ закрытия секции VirtualHost (/) в строке 4.

root@debian7:~# cat /etc/apache2/sites-available/chessclub42
<VirtualHost *:8000>
        ServerAdmin webmaster@localhost
        DocumentRoot /var/www/chessclub42
<VirtualHost>

Давайте вызовем генерацию еще одного сообщения об ошибке, переименовав директорию с файлами одного из наших веб-сайтов.

root@debian7:~# mv /var/www/choochoo/ /var/www/chooshoo
root@debian7:~# !ser
service apache2 restart
Restarting web server: apache2Warning: DocumentRoot [/var/www/choochoo] does n\
ot exist
Warning: DocumentRoot [/var/www/choochoo] does not exist
 ... waiting Warning: DocumentRoot [/var/www/choochoo] does not exist
Warning: DocumentRoot [/var/www/choochoo] does not exist
.

Как видите, веб-сервер Apache совершенно точно сообщил о проблеме.

Также вы можете производить диагностику веб-сервера, соединяясь с веб-сайтом с помощью браузера и проверяя наличие новых сообщений в файлах журнала веб-сервера Apache из директории /var/log/apache.

1.9. Пример конфигурации виртуального сервера

Ниже приведен пример конфигурации виртуального сервера. Данная конфигурация виртуального сервера имеет приоритет перед стандартной директивой ErrorDocument веб-сервера Apache.

<VirtualHost 83.217.76.245:80>
ServerName cobbaut.be
ServerAlias www.cobbaut.be
DocumentRoot /home/paul/public_html
ErrorLog /home/paul/logs/error_log
CustomLog /home/paul/logs/access_log common
ScriptAlias /cgi-bin/ /home/paul/cgi-bin/
<Directory /home/paul/public_html>
        Options Indexes IncludesNOEXEC FollowSymLinks
        allow from all
</Directory>
ErrorDocument 404 http://www.cobbaut.be/cobbaut.php
</VirtualHost>

1.10. Псевдонимы и переадресации

Веб-сервер Apache предоставляет возможность установки псевдонимов для директорий, которая используется таким образом, как показано в примере ниже.

Alias /paul/ "/home/paul/public_html/"

Аналогично при посещении веб-сайта может осуществляться переадресация на другой веб-сайт или веб-сервер.

Redirect permanent /foo http://www.foo.com/bar

1.11. Дополнительная информация о файлах контроля доступа .htaccess

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

paul@lounge:~/cobbaut.be$ cat .htaccess 
# Options +FollowSymlinks
RewriteEngine On
RewriteCond %{HTTP_REFERER} ^http://(www\.)?buy-adipex.fw.nu.*$ [OR]
RewriteCond %{HTTP_REFERER} ^http://(www\.)?buy-levitra.asso.ws.*$ [NC,OR]
RewriteCond %{HTTP_REFERER} ^http://(www\.)?buy-tramadol.fw.nu.*$ [NC,OR]
RewriteCond %{HTTP_REFERER} ^http://(www\.)?buy-viagra.lookin.at.*$ [NC,OR]
...
RewriteCond %{HTTP_REFERER} ^http://(www\.)?www.healthinsurancehelp.net.*$ [NC]
RewriteRule .* - [F,L]
paul@lounge:~/cobbaut.be$

1.12. Контроль трафика

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

1.13. Самостоятельно подписанные сертификаты в дистрибутиве Debian

Ниже приведено краткое руководство по настройке веб-сервера Apache2 в дистрибутиве Debian 7 с использованием самостоятельно подписанного сертификата.

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

root@debian7:~# aptitude install apache2 openssl
No packages will be installed, upgraded, or removed.
обновлено 0, установлено 0 новых пакетов, для удаления отмечено 0 пакетов, и 0 пакетов не обновлено.
Необходимо скачать 0 B архивов.
После данной операции, объём занятого дискового пространства возрастёт на 0 B.

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

root@debian7:~# mkdir /etc/ssl/localcerts
root@debian7:~# openssl req -new -x509 -days 999 -nodes -out /etc/ssl/localcerts/apache.pem -keyout /etc/ssl/localcerts/apache.key
Generating a 2048 bit RSA private key
...
...
writing new private key to '/etc/ssl/localcerts/apache.key'
-----
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [AU]:BE
State or Province Name (full name) [Some-State]:Antwerp
Locality Name (eg, city) []:Antwerp
Organization Name (eg, company) [Internet Widgits Pty Ltd]:linux-training.be
Organizational Unit Name (eg, section) []:
Common Name (e.g. server FQDN or YOUR name) []:Paul
Email Address []:

Небольшие меры дополнительной безопасности никогда не помешают.

root@debian7:~# ls -l /etc/ssl/localcerts/
итого 8
-rw-r--r-- 1 root root 1704 сен 16 18:24 apache.key
-rw-r--r-- 1 root root 1302 сен 16 18:24 apache.pem
root@debian7:~# chmod 600 /etc/ssl/localcerts/*
root@debian7:~# ls -l /etc/ssl/localcerts/
итого 8
-rw------- 1 root root 1704 сен 16 18:24 apache.key
-rw------- 1 root root 1302 сен 16 18:24 apache.pem

В первую очередь следует активировать модуль ssl веб-сервера Apache.

root@debian7:~# a2enmod ssl
Enabling module ssl.
See /usr/share/doc/apache2.2-common/README.Debian.gz on how to configure SSL and create self-signed certificates.
To activate the new configuration, you need to run:
  service apache2 restart

После этого следует создать файл конфигурации веб-сайта.

root@debian7:~# vi /etc/apache2/sites-available/choochoos
root@debian7:~# cat /etc/apache2/sites-available/choochoos
<VirtualHost *:7000>
        ServerAdmin webmaster@localhost
        DocumentRoot /var/www/choochoos
        SSLEngine On
        SSLCertificateFile /etc/ssl/localcerts/apache.pem
        SSLCertificateKeyFile /etc/ssl/localcerts/apache.key
</VirtualHost>
root@debian7:~#

Кроме того, не нужно забывать о необходимости создания самого веб-сайта.

root@debian7:/var/www/choochoos# vi index.html
root@debian7:/var/www/choochoos# cat index.html
Choo Choo клуб моделистов поездов  с доступом по защищенному соединению HTTPS Choo Choo

Наконец, следует активировать веб-сайт и перезапустить службу веб-сервера Apache с именем apache2 (или сообщить службе о необходимости повторного чтения файлов конфигурации).

root@debian7:/var/www/choochoos# a2ensite choochoos
Enabling site choochoos.
To activate the new configuration, you need to run:
  service apache2 reload
root@debian7:/var/www/choochoos# service apache2 restart
Restarting web server: apache2 ... waiting .

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

Самостоятельно подписанные сертификаты в дистрибутиве Debian

1.14. Самостоятельно подписанные сертификаты в дистрибутиве RHEL/CentOS

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

[root@paulserver ~]# yum install httpd openssl mod_ssl
Загружены модули: fastestmirror
Loading mirror speeds from cached hostfile
 * base: ftp.belnet.be
 * extras: ftp.belnet.be
 * updates: mirrors.vooservers.com
base                                                         | 3.7 kB     00:00
Setting up Install Process
Пакет httpd-2.2.15-31.el6.centos.x86_64 уже установлен, и это последняя версия.
Пакет openssl-1.0.1e-16.el6_5.15.x86_64 уже установлен, и это последняя версия.
Пакет 1:mod_ssl-2.2.15-31.el6.centos.x86_64 уже установлен, и это последняя версия.
Выполнять нечего

Воспользуемся утилитой openssl для создания сертификата.

[root@paulserver ~]# mkdir certs
[root@paulserver ~]# cd certs
[root@paulserver certs]# openssl genrsa -out ca.key 2048
Generating RSA private key, 2048 bit long modulus
.........+++
.........................................................+++
e is 65537 (0x10001)
[root@paulserver certs]# openssl req -new -key ca.key -out ca.csr
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [XX]:BE
State or Province Name (full name) []:antwerp
Locality Name (eg, city) [Default City]:antwerp
Organization Name (eg, company) [Default Company Ltd]:antwerp
Organizational Unit Name (eg, section) []:
Common Name (eg, your name or your server's hostname) []:paulserver
Email Address []:

Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:
[root@paulserver certs]# openssl x509 -req -days 365 -in ca.csr -signkey ca.ke\
y -out ca.crt
Signature ok
subject=/C=BE/ST=antwerp/L=antwerp/O=antwerp/CN=paulserver
Getting Private key

Скопируем файлы сертификата в директории, в которых их будет искать веб-сервер (возможно, в данном случае будет отсутствовать информация, необходимая системе контроля доступа SELinux).

[root@paulserver certs]# cp ca.crt /etc/pki/tls/certs/
[root@paulserver certs]# cp ca.key ca.csr /etc/pki/tls/private/

После этого добавим пути к директориям с файлами сертификата, а также директиву NameVirtualHost *:443 в файл конфигурации веб-сервера.

[root@paulserver certs]# vi /etc/httpd/conf.d/ssl.conf
[root@paulserver certs]# grep ^SSLCerti /etc/httpd/conf.d/ssl.conf
SSLCertificateFile /etc/pki/tls/certs/ca.crt
SSLCertificateKeyFile /etc/pki/tls/private/ca.key

А также создадим файл конфигурации веб-сайта.

[root@paulserver certs]# vi /etc/httpd/conf.d/choochoos.conf
[root@paulserver certs]# cat /etc/httpd/conf.d/choochoos.conf
<VirtualHost *:443>
        SSLEngine on
        SSLCertificateFile /etc/pki/tls/certs/ca.crt
        SSLCertificateKeyFile /etc/pki/tls/private/ca.key
        DocumentRoot /var/www/choochoos
        ServerName paulserver
</VirtualHost>
[root@paulserver certs]#

Наконец, создадим простой веб-сайт и перезапустим службу веб-сервера Apache.

[root@paulserver certs]# mkdir /var/www/choochoos
[root@paulserver certs]# echo "Choo Choo клуб моделистов поездов с доступом по \
защищенному соединению HTTPS Choo Choo" > /var/www/choochoos/index.html
[root@paulserver httpd]# service httpd restart
Stopping httpd:                                            [  OK  ]
Starting httpd:

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

Самостоятельно подписанные сертификаты в дистрибутиве RHEL/CentOS

1.15. Практическое задание: веб-сервер Apache

1. Убедитесь в том, что веб-сервер Apache установлен и исполняется в вашей системе.

2. Изучите руководство пользователя веб-сервера Apache в формате HTML.

3. Создайте три виртуальных сервера, которые будут принимать соединения на портах 8472, 31337 и 1201. Проверьте их работоспособность.

4. Создайте три именованных виртуальных сервера с именами startrek.local, starwars.local и stargate.local. Проверьте их работоспособность.

5. Создайте виртуальный сервер, который будет принимать соединения на отличном IP-адресе.

6. Защитите данные одного из своих веб-сайтов с помощью комбинации имени пользователя и пароля.


Предыдущий раздел: Оглавление Следующий раздел:
Виртуальные серверы для заданных номеров портов в дистрибутиве CentOS   Знакомство с прокси-сервером Squid