Установка Apache на CentOS 7 и настройка PHP, Ruby, Virtual Hosts, SSL и WebDAV

Материал из Викиадмин
Перейти к навигации Перейти к поиску

Apache - один из самых известных веб-серверов и, если вы здесь, значит уже понимаете, зачем он нужен. Итак, дело за установкой и настройкой: Установка

Эта часть инструкции достаточно проста. Достаточно использовать штатный менеджер пакетов yum

yum -y install httpd

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

Я не просто так оговорился, “дошлифовка” apache - достаточно интересное дело. Тем не менее:

удаляем тестовую страницу. Нет, серьёзно, зачем она вам?

rm -f /etc/httpd/conf.d/welcome.conf

Конфигурируем httpd Для этого открываем основной файл конфигурации httpd.conf


vim /etc/httpd/conf/httpd.conf


Итак

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

ServerAdmin wikiadmin@wikiadmin.net

на строке 95 меняем имя сервера.

ServerName wikiadmin.net

на строке 151 None меняем на All, при неработающем mod_rewrite вспомните эту опцию

AllowOverride All

на строке 164 добавляем файл, который будет отображаться Apache по-умолчанию. В наше время часто это index.php, что и добавим:

DirectoryIndex index.html index.cgi index.php

и добавим немного в конце файла:

ServerTokens Prod
KeepAlive On

Выходим из редактора, перезапускаем веб-сервер и ставим его на автозапуск

systemctl start httpd
systemctl enable httpd

Для теста можем создать файл и проверить, будет ли он отображаться по имени сервера (надеюсь, DNS уже настроен) и по IP

echo test > /var/www/html/index.html

В браузере видем test

Что ещё следовало бы сделать…

Разумеется, отключить ненужные модули. Apache классный веб-сервер с множеством возможностей, но нужны ли вам сразу авторизация по LDAP, обратный прокси и тому подобные вкусности… А меньше модулей - быстрее работа.

Подключаем PHP

Как я уже говорил, скорее всего у вас сначала будет стоять что-то на PHP. Почему нет, добавим поддержку

Установка PHP

yum -y install php php-mbstring php-pear

И сразу - поправьте часовой пояс. Забывает каждый второй, чесслово :)

mcedit /etc/php.ini

И на строке 878 (да, долго жмём PageDown) нужно чтобы было это:

date.timezone = "Europe/Moscow"

Перегружаем веб-сервер и поддержка PHP работает

systemctl restart httpd

Проверяем, создав страницу

mcedit /var/www/html/index.php

с текстом

<html>
 <body>
 <div style="width: 100%; font-size: 40px; font-weight: bold; text-align: center;">
 <?php
    print Date("Y/m/d");
 ?>
 </div>
 </body>
 </html>

Подключаем Ruby

Сейчас уже немало попадается и проектов на этом языке. На мой взгляд тяжеловат, да и редактирование ошибок не самое простое, но раз это есть, значит кто-то готов за это платить. Итак:

Установка Ruby

yum -y install ruby

На всякий случай: по-умолчанию, CGI разрешено на использование только из директории /var/www/cgi-bin. Если захотите поправить, это возможно на 247 строке httpd.conf

ScriptAlias /cgi-bin/ "/var/www/cgi-bin/"

Нам ничего не мешает это немного дополнить, создав файл /etc/httpd/conf.d/cgi-enabled.conf со следующим текстом:

<Directory "/var/www/html/cgi-enabled">
    Options +ExecCGI
    AddHandler cgi-script .rb
</Directory>

Конечно, не забываем:

systemctl restart httpd

Делаем тестовую страницу ruby

mcedit /var/www/html/cgi-enabled/index.rb

С текстом

#!/usr/bin/ruby
 print "Content-type: text/html\n\n"
 print "<html>\n<body>\n"
 print "<div style=\"width: 100%; font-size: 40px; font-weight: bold; text-align: center;\">\n"
 print "Ruby Script Test Page"
 print "\n</div>\n"
 print "</body>\n</html>\n" 

Поправим немного права:

chmod 705 /var/www/html/cgi-enabled/index.rb 

И смотрим в браузере…

Виртуальные хосты (Virtual Hosts)

Разумеется, на одном сервере может находится не один сайт. Я лично встречал сервера, где располагались более 3000 сайтов-визиток. Итак:

Создаём директорию для второго сайта (который в дальнейшем назовём site2):

mkdir -p /var/www/site2

Создаём файл конфигурации для этого сайта

mcedit /etc/httpd/conf.d/site2.conf

следующего содержания:

<VirtualHost *:80>
    DocumentRoot /var/www/site2
    ServerName site2
    ServerAdmin webmaster@site2
    ErrorLog logs/site2.host-error_log
    CustomLog logs/site2.host-access_log combined
</VirtualHost>

Добавляем страницу на новый сайт:

cat test > /var/www/site2/index.html

Теперь перегружаем сервер httpd

systemctl restart httpd

И проверяем в браузере по новому URL. Если что не так, смотрим логи.

Конфигурируем сайт, который будет использовать зашифрованное соединение (Configure SSL to use secure encrypt connection.)

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

Создаём сертификат и ключ с помощью SSL

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

Ставим модуль для SSL

yum -y install mod_ssl

Редактируем конфигурацию для безопасного сайта:

mcedit /etc/httpd/conf.d/ssl.conf

На строке 59 раскоментируем

DocumentRoot "/var/www/html"

На строке 60

ServerName wikiadmin.net:443

На строке 100 указываем сертификат

SSLCertificateFile /etc/pki/tls/certs/server.crt

На строке 107 прописываем ключ

SSLCertificateKeyFile /etc/pki/tls/certs/server.key

И перегружаем сервер

systemctl restart httpd

Включаем доступ по авторизации (Enable Basic Authentication)

Предположим, на сайте есть админка или раздел (для примера auth-basic), куда посторонним вход запрещён. Самый простой способ - закрыть это авторизацией. Итак, добавляем в конфигурацию сайта ещё несколько строк (до )

<Directory /var/www/html/auth-basic>
    AuthType Basic
    AuthName "Basic Authentication"
    AuthUserFile /etc/httpd/conf/.htpasswd
    require valid-user
</Directory>

Добавляем туда тестовую страницу

echo "test auth" > /var/www/html/auth-basic/index.html

Теперь добавляем логин для входа

htpasswd -c /etc/httpd/conf/.htpasswd admin

Попутно будет запрошен дважды пароль для нашего пользователя admin. И незабываем перезапустить веб-сервер

systemctl restart httpd

Используем WebDAV как сетевой диск (Use WebDAV)

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

mkdir /home/webdav

Даём права веб-серверу на эту директорию

chown apache. /home/webdav

Меняем права для папки

chmod 770 /home/webdav

И добавляем в конфиг сайта

DavLockDB "/tmp/DavLock"
Alias /webdav /home/webdav
<Location /webdav>
    DAV On
    Options None
    AuthType Basic
    AuthName WebDAV
    AuthUserFile /etc/httpd/conf/.htpasswd
    <RequireAny>
        Require method GET POST OPTIONS
        Require valid-user
    </RequireAny>
</Location>

Создаём пользователя для доступа


htpasswd -c /etc/httpd/conf/.htpasswd admin

И перегружаем веб-сервер

systemctl restart httpd

А теперь проверяем. В Windows можно этот URL подключить как сетевой диск.