Перейти до змісту

Налаштування кількох сайтів веб-сервера Apache

Що тобі потрібно

  • Сервер під керуванням Rocky Linux
  • Знання командного рядка та текстових редакторів. У цьому прикладі використовується vi, але сміливо використовуйте свій улюблений редактор.

    Підказка

    Якщо ви хочете дізнатися про текстовий редактор vi, ось зручний підручник.

  • Базові знання встановлення та запуску веб-служб

Вступ

У Rocky Linux є багато способів створити веб-сайт. Це лише один метод із використанням Apache на одному сервері. Розробка цього методу призначена для кількох серверів на одному апаратному забезпеченні, але він також може діяти як базова конфігурація для одного сервера сайту.

Історичний факт: це налаштування сервера, здається, було розпочато з систем на базі Debian, але його можна ідеально адаптувати до будь-якої операційної системи Linux, на якій працює Apache.

Для тих, хто шукає подібне налаштування для Nginx, перегляньте цей посібник.

Встановіть Apache

Ймовірно, вам знадобляться інші пакети для вашого веб-сайту, такі як PHP, бази даних або інші пакети. Встановивши PHP разом із http, ви отримаєте останню версію зі сховищ Rocky Linux.

Просто пам’ятайте, що вам можуть знадобитися такі модулі, як php-bcmath або php-mysqlind. Специфікації вашої веб-програми визначатимуть, що вам потрібно. Ви можете встановити їх за потреби. Наразі ви встановите http і PHP, оскільки вони майже вирішені:

З командного рядка запустіть:

dnf install httpd php

Додайте додаткові каталоги

Цей метод використовує пару додаткових каталогів, які наразі не існують у системі. Вам потрібно додати два каталоги в /etc/httpd/ під назвою "sites-available" і "sites-enabled".

З командного рядка введіть:

mkdir -p /etc/httpd/sites-available /etc/httpd/sites-enabled

Це створить обидва необхідні каталоги.

Вам також потрібен каталог, де будуть розміщені наші сайти. Це може бути де завгодно, але гарним способом упорядкувати все є створити каталог «піддоменів». Помістіть це в /var/www: mkdir /var/www/sub-domains/, щоб зменшити складність.

Конфігурація

Вам також потрібно додати рядок у нижню частину файлу httpd.conf. Для цього введіть:

vi /etc/httpd/conf/httpd.conf

і перейдіть у нижню частину файлу та додайте:

Include /etc/httpd/sites-enabled

Наші фактичні конфігураційні файли будуть у /etc/httpd/sites-available, і ви створите символічне посилання на них у /etc/httpd /sites-enabled.

Навіщо ти це робиш?

Скажімо, у вас є 10 веб-сайтів, які працюють на одному сервері з різними IP-адресами. Скажімо, на сайті B є кілька основних оновлень, і вам потрібно внести зміни в конфігурацію цього сайту. Скажімо також, що щось пішло не так із внесеними змінами, і коли ви перезапускаєте httpd, щоб прочитати зміни, httpd не запускається. Не запуститься не тільки сайт, над яким ви працювали, але й інші. За допомогою цього методу ви можете видалити символічне посилання на сайт, який спричинив проблему, і перезапустити httpd. Він знову почне працювати, і ви зможете виправити несправну конфігурацію сайту.

Це знімає напругу, знаючи, що телефон не дзвонить із засмученим клієнтом або босом, оскільки послуга офлайн.

Конфігурація сайту

Ще одна перевага цього методу полягає в тому, що він дозволяє нам вказувати все, що знаходиться поза типовим файлом httpd fully.conf. Файл httpd.conf за замовчуванням завантажує стандартні параметри, а конфігурації вашого сайту виконують усе інше. Чудово, правда? Крім того, знову ж таки, це робить усунення несправностей несправної конфігурації сайту менш складним.

Скажімо, у вас є веб-сайт, який завантажує вікі. Вам знадобиться файл конфігурації, який робить сайт доступним на порту 80.

Якщо ви хочете обслуговувати веб-сайт за допомогою SSL/TLS (і погодьтеся, у більшості випадків ви це робите), додайте ще один (майже ідентичний) розділ до цього файлу, щоб увімкнути порт 443.

Ви можете перевірити це нижче в розділі Конфігурація https за допомогою сертифіката SSL/TLS.

Спочатку вам потрібно створити цей файл конфігурації в sites-available:

vi /etc/httpd/sites-available/com.wiki.www

Вміст файлу конфігурації виглядатиме приблизно так:

<VirtualHost *:80>
        ServerName your-server-hostname
        ServerAdmin username@rockylinux.org
        DocumentRoot /var/www/sub-domains/your-server-hostname/html
        DirectoryIndex index.php index.htm index.html
        Alias /icons/ /var/www/icons/
        # ScriptAlias /cgi-bin/ /var/www/sub-domains/your-server-hostname/cgi-bin/

    CustomLog "/var/log/httpd/your-server-hostname-access_log" combined
    ErrorLog  "/var/log/httpd/your-server-hostname-error_log"

        <Directory /var/www/sub-domains/your-server-hostname/html>
                Options -ExecCGI -Indexes
                AllowOverride None

                Order deny,allow
                Deny from all
                Allow from all

                Satisfy all
        </Directory>
</VirtualHost>

Після створення вам потрібно записати (зберегти) його за допомогою Shift+:+W+Q.

У цьому прикладі завантаження вікі-сайту відбувається з підкаталогу «html» your-server-hostname, що означає, що шлях, який ви створили в /var/www (вище) знадобиться кілька додаткових каталогів, щоб задовольнити це:

mkdir -p /var/www/sub-domains/your-server-hostname/html

Це створить весь шлях за допомогою однієї команди. Далі ви хочете встановити свої файли в цей каталог, у якому буде працювати веб-сайт. Це може бути те, що ви зробили самі, або веб-програма, яку можна встановити (у цьому випадку вікі), яку ви завантажили.

Скопіюйте ваші файли на створений шлях:

cp -Rf wiki_source/* /var/www/sub-domains/your-server-hostname/html/

Конфігурація https за допомогою сертифіката SSL/TLS

Як зазначалося раніше, кожен створений сьогодні веб-сервер має працювати з SSL/TLS (рівень захищених сокетів).

Цей процес починається зі створення закритого ключа та CSR (запиту на підписання сертифіката) і надсилання CSR до центру сертифікації для придбання сертифіката SSL/TLS. Процес генерації цих ключів є дещо розширеним.

Якщо ви не знайомі з генерацією ключів SSL/TLS, перегляньте: Генерація ключів SSL

Ви також можете скористатися цим альтернативним процесом, використовуючи сертифікат SSL від Let's Encrypt

Розміщення ключів і сертифікатів SSL/TLS

Оскільки у вас є ваші ключі та файли сертифікатів, ви повинні розмістити їх логічно у своїй файловій системі на веб-сервері. Як видно з прикладу файлу конфігурації, ви розміщуєте свої веб-файли в /var/www/sub-domains/your-server-hostname/html.

Ви бажаєте розмістити свій сертифікат і ключові файли в домені, але за межами кореня документа, яким у даному випадку є папка html.

Ви ніколи не захочете розкрити свої сертифікати та ключі в Інтернеті. Це було б погано!

Натомість ви створите структуру каталогів для наших файлів SSL/TLS поза коренем документа:

mkdir -p /var/www/sub-domains/your-server-hostname/ssl/{ssl.key,ssl.crt,ssl.csr}`

Якщо ви новачок у синтаксисі «дерева» для створення каталогів, то вище сказано:

«Створіть каталог під назвою «ssl» і три каталоги всередині під назвою ssl.key, ssl.crt і ssl.csr»

Попереднє зауваження: зберігати файл із запитом на підписання сертифіката (CSR) у дереві непотрібно, але це спрощує деякі речі. Якщо вам колись знадобиться повторно видати сертифікат від іншого постачальника, гарною ідеєю буде мати збережену копію файлу CSR. Виникає питання, де ви можете зберегти це, щоб запам’ятати, і логічно зберігати його в дереві вашого веб-сайту.

Якщо припустити, що ви назвали файли ключа, csr і crt (сертифікат) іменем свого сайту та зберегли їх у /root, ви скопіюєте їх до місця розташування:

cp /root/com.wiki.www.key /var/www/sub-domains/your-server-hostname/ssl/ssl.key/
cp /root/com.wiki.www.csr /var/www/sub-domains/your-server-hostname/ssl/ssl.csr/
cp /root/com.wiki.www.crt /var/www/sub-domains/your-server-hostname/ssl/ssl.crt/

Конфігурація сайту - https

Після того, як ви згенерували свої ключі та придбали сертифікат SSL/TLS, ви можете перейти до налаштування веб-сайту за допомогою своїх ключів.

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

Ви хочете, щоб вони переходили на порт 443 (або «захищений http», більш відомий як SSL/TLS або https). Наш розділ конфігурації порту 80 буде мінімальним:

<VirtualHost *:80>
        ServerName your-server-hostname
        ServerAdmin username@rockylinux.org
        Redirect / https://your-server-hostname/
</VirtualHost>

Натомість це означає надсилати будь-який звичайний веб-запит до конфігурації https. Відображена опція "Перенаправлення" apache є тимчасовою. Коли тестування буде завершено, і ви побачите, що сайт працює належним чином, ви можете змінити це на «Переадресувати постійно».

Постійне переспрямування навчить пошукові системи, і незабаром будь-який трафік на ваш сайт, який надходить із пошукових систем, спрямовуватиметься лише на порт 443 (https) без потрапляння на порт 80 (http) спочатку.

Далі вам потрібно визначити частину https файлу конфігурації:

<VirtualHost *:80>
        ServerName your-server-hostname
        ServerAdmin username@rockylinux.org
        Redirect / https://your-server-hostname/
</VirtualHost>
<Virtual Host *:443>
        ServerName your-server-hostname
        ServerAdmin username@rockylinux.org
        DocumentRoot /var/www/sub-domains/your-server-hostname/html
        DirectoryIndex index.php index.htm index.html
        Alias /icons/ /var/www/icons/
        # ScriptAlias /cgi-bin/ /var/www/sub-domains/your-server-hostname/cgi-bin/

    CustomLog "/var/log/`http`d/your-server-hostname-access_log" combined
    ErrorLog  "/var/log/`http`d/your-server-hostname-error_log"

        SSLEngine on
        SSLProtocol all -SSLv2 -SSLv3 -TLSv1
        SSLHonorCipherOrder on
        SSLCipherSuite EECDH+ECDSA+AESGCM:EECDH+aRSA+AESGCM:EECDH+ECDSA+SHA384:EECDH+ECDSA+SHA256:EECDH+aRSA+SHA384
:EECDH+aRSA+SHA256:EECDH+aRSA+RC4:EECDH:EDH+aRSA:RC4:!aNULL:!eNULL:!LOW:!3DES:!MD5:!EXP:!PSK:!SRP:!DSS

        SSLCertificateFile /var/www/sub-domains/your-server-hostname/ssl/ssl.crt/com.wiki.www.crt
        SSLCertificateKeyFile /var/www/sub-domains/your-server-hostname/ssl/ssl.key/com.wiki.www.key
        SSLCertificateChainFile /var/www/sub-domains/your-server-hostname/ssl/ssl.crt/your_providers_intermediate_certificate.crt

        <Directory /var/www/sub-domains/your-server-hostname/html>
                Options -ExecCGI -Indexes
                AllowOverride None

                Order deny,allow
                Deny from all
                Allow from all

                Satisfy all
        </Directory>
</VirtualHost>

Отже, розбиваючи цю конфігурацію далі, після звичайних частин конфігурації та вниз до розділу SSL/TLS:

  • SSLEngine on - каже використовувати SSL/TLS
  • SSLProtocol all -SSLv2 -SSLv3 -TLSv1 - каже використовувати всі доступні протоколи, окрім тих, що містять уразливості. Ви повинні періодично досліджувати протоколи, прийнятні для використання.
  • SSLHonorCipherOrder on -це стосується наступного рядка, що стосується наборів шифрів, і каже мати справу з ними у вказаному порядку. Це ще одна область, де періодично слід переглядати набори шифрів.
  • SSLCertificateFile - це саме те, що в ньому сказано: нещодавно придбаний і застосований файл сертифіката та його розташування
  • SSLCertificateKeyFile - ключ, який ви створили під час створення запиту на підписання сертифіката
  • SSLCertificateChainFile - сертифікат від постачальника сертифікатів, який часто називають проміжним сертифікатом

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

Оживіть його

Пам’ятайте, що наш файл httpd.conf містить /etc/httpd/sites-enabled у кінці файлу. Коли httpd перезапускається, він завантажує будь-які конфігураційні файли в каталозі sites-enabled. Справа в тому, що всі наші конфігураційні файли знаходяться в sites-available.

Це передбачено задумом, тож ви можете видалити речі, коли httpd не вдається перезапустити. Щоб увімкнути наш файл конфігурації, вам потрібно створити символічне посилання на цей файл у sites-enabled і запустити або перезапустити веб-службу. Для цього ви використовуєте цю команду:

ln -s /etc/httpd/sites-available/your-server-hostname /etc/httpd/sites-enabled/

Це створить посилання на файл конфігурації в sites-enabled, як ми хочемо.

Тепер просто запустіть httpd за допомогою systemctl start httpd. Або перезапустіть його, якщо він уже запущений: systemctl restart httpd, і припустімо, що веб-служба перезапуститься, тепер ви можете піти й провести тестування на своєму сайті.

Author: Steven Spencer

Contributors: Ezequiel Bruni, Ganna Zhyrnova