Налаштування кількох сайтів веб-сервера 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