Краткая инструкция по быстрой установке и настройке веб-сервера в связке CentOS Stream 8.4, Apache HTTP Server, PHP и MariaDB (MySQL).
Установка сервера баз данных
Для начала необходимо установить MariaDB (MySQL) сервер. В подавляющем большинстве веб-сайтов это — один из главных шагов, без которого нет смысла запускать проект.
Ниже приведены несколько команд, которые помогут запустить сервер БД на начальном этапе:
# yum install mariadb mariadb-server # systemctl enable mariadb # systemctl start mariadb # /usr/bin/mysql_secure_installation
Более подробно об установке сервера БД MariaDB (MySQL) можно почитать здесь: https://dondub.com/2021/05/zapusk-subd-mariadb-v-centos-stream/
Установка веб-сервера
Теперь необходимо установить Apache HTTP Server и модуль SSL
# yum install httpd mod_ssl
Включаем службу httpd в автозагрузку и запускаем её
# systemctl enable httpd # systemctl start httpd
а также добавим правила для файрволла:
# firewall-cmd --add-service=http --zone=public --permanent # firewall-cmd --add-service=https --zone=public --permanent # firewall-cmd --reload
На другой машине в сети открываем браузер и в адресной строке впишем адрес сервера:
http://IP-адрес-сервера или https://IP-адрес-сервера
Должна отображаться страница по умолчанию
Установка PHP
Устанавливаем необходимые пакеты для работы интерпретатора PHP
# yum install php php-common php-gd php-xml php-mysqlnd php-mbstring php-pgsql
и перезапускаем службу httpd
# systemctl restart httpd
Затем создадим файл /var/www/html/info.php
# touch /var/www/html/info.php
откроем его
# vi /var/www/html/info.php
и впишем такие строчки:
<?php phpinfo(); ?>
На другой машине в сети открываем браузер и в адресной строке впишем адрес сервера:
http://IP-адрес-сервера/info.php
Появится такая страница:
Это значит, что PHP установлен корректно и работает.
Настройка виртуальных хостов
Перед созданием виртуальных хостов необходимо убедиться в наличии соответствующих A или AAAA записей на DNS-сервере. Эти записи создаются в личном кабинете в панели управления регистратора доменных имён, или на собственном DNS-сервере https://dondub.com/tag/nameserver/.
Создадим директории для хранения файлов сайтов
# mkdir /var/www/html/{ws35.local,test.ws35.local}
После этого создадим в них файл index.html
# touch /var/www/html/{ws35.local,test.ws35.local}/index.html
Теперь откроем файл для сайта ws35.local
# vi /var/www/html/ws35.local/index.html
и впишем в него:
<html> <body> <h1>ws35.local works!</h1> </body> </html>
также и для test.ws35.local
# vi /var/www/html/test.ws35.local/index.html
<html> <body> <h1>test.ws35.local works!</h1> </body> </html>
Затем создадим файлы конфигураций виртуальных хостов в директории /etc/httpd/conf.d/
# cd /etc/httpd/conf.d/ # touch ws35.local.conf ws35.local.ssl.conf test.ws35.local.conf test.ws35.local.ssl.conf
Теперь откроем файл для сайта ws35.local
# vi ws35.local.conf
и впишем в него:
<VirtualHost *:80> ServerAdmin webmaster@ws35.local DocumentRoot "/var/www/html/ws35.local/" ServerName www.ws35.local ServerAlias ws35.local ErrorLog "/var/log/httpd/ws35.local-error_log" CustomLog "/var/log/httpd/ws35.local-access_log" combined <Directory "/var/www/html/ws35.local/"> DirectoryIndex index.html index.php Options FollowSymLinks AllowOverride All Require all granted </Directory> </VirtualHost>
затем SSL для него же:
# vi ws35.local.ssl.conf
<VirtualHost *:443> DocumentRoot "/var/www/html/ws35.local/" ServerName www.ws35.local ServerAlias ws35.local ErrorLog logs/ssl_error_log TransferLog logs/ssl_access_log LogLevel warn SSLEngine on SSLHonorCipherOrder on SSLCipherSuite PROFILE=SYSTEM SSLProxyCipherSuite PROFILE=SYSTEM SSLCertificateFile /etc/pki/tls/certs/ws35.local.ssl.crt SSLCertificateKeyFile /etc/pki/tls/private/ws35.local.ssl.key <FilesMatch "\.(cgi|shtml|phtml|php)$"> SSLOptions +StdEnvVars </FilesMatch> <Directory "/var/www/cgi-bin"> SSLOptions +StdEnvVars </Directory> BrowserMatch "MSIE [2-5]" \ nokeepalive ssl-unclean-shutdown \ downgrade-1.0 force-response-1.0 CustomLog logs/ssl_request_log \ "%t %h %{SSL_PROTOCOL}x %{SSL_CIPHER}x \"%r\" %b" </VirtualHost>
а также для test.ws35.local
# vi test.ws35.local.conf
<VirtualHost *:80> ServerAdmin webmaster@test.ws35.local DocumentRoot "/var/www/html/test.ws35.local/" ServerName test.ws35.local ServerAlias test.ws35.local ErrorLog "/var/log/httpd/test.ws35.local-error_log" CustomLog "/var/log/httpd/test.ws35.local-access_log" combined <Directory "/var/www/html/test.ws35.local/"> DirectoryIndex index.html index.php Options FollowSymLinks AllowOverride All Require all granted </Directory> </VirtualHost>
# vi test.ws35.local.ssl.conf
<VirtualHost *:443> DocumentRoot "/var/www/html/test.ws35.local/" ServerName test.ws35.local ServerAlias test.ws35.local ErrorLog logs/ssl_error_log TransferLog logs/ssl_access_log LogLevel warn SSLEngine on SSLHonorCipherOrder on SSLCipherSuite PROFILE=SYSTEM SSLProxyCipherSuite PROFILE=SYSTEM SSLCertificateFile /etc/pki/tls/certs/ws35.local.ssl.crt SSLCertificateKeyFile /etc/pki/tls/private/ws35.local.ssl.key <FilesMatch "\.(cgi|shtml|phtml|php)$"> SSLOptions +StdEnvVars </FilesMatch> <Directory "/var/www/cgi-bin"> SSLOptions +StdEnvVars </Directory> BrowserMatch "MSIE [2-5]" \ nokeepalive ssl-unclean-shutdown \ downgrade-1.0 force-response-1.0 CustomLog logs/ssl_request_log \ "%t %h %{SSL_PROTOCOL}x %{SSL_CIPHER}x \"%r\" %b" </VirtualHost>
После этого скопируем файлы для предварительных SSL-сертификатов, иначе служба httpd выдаст ошибку при следующем запуске
# cp /etc/pki/tls/certs/localhost.crt /etc/pki/tls/certs/ws35.local.ssl.crt # cp /etc/pki/tls/private/localhost.key /etc/pki/tls/private/ws35.local.ssl.key
и перезапускаем httpd
# systemctl restart httpd
Проверяем:
http://ws35.local
https://ws35.local
http://test.ws35.local
https://test.ws35.local
Подключение SSL сертификатов
Один из самых эффективных способов настройки SSL-сертификатов — это через специализированные сервисы. Например — Certbot.
Инструкция по установке и настройке сертификатов: https://certbot.eff.org/lets-encrypt/centosrhel8-apache.