Centos 7 настройка httpd: НАСТРОЙКА APACHE В CENTOS 7
Содержание
Настройка web сервера в CentOS 7
Мне часто приходится работать с проектами различных сайтов, обладая знаниями и опытом администрирования ОС Linux, было решено поднять собственный веб сервер на базе CentOS 7, для тестирования и отладки проектов. В данной статье помимо минимального набора команд для установки LAMP на CentOS 7, я расскажу о повышении безопасности Вашего сервера. Мы не будем отключать SELinux, вместо этого настроим его для использования на веб сервере, вдобавок выполним установку и базовую настройку Firewalld.
Подробно рассмотрим установку и настройку FTP сервера в CentOS 7 на базе ProFTPD. Как всегда для удобства восприятия материал разбит на смысловые блоки. В этой статье Вы найдете решения следующих задач:
- Установка LAMP в CentOS 7
- Настройка SELinux
- Установка и настройка phpMyAdmin в CentOS 7
- Создание и настройка виртуальных хостов
- Создание баз данных для сайтов
- Установка Joomla 3. 6 в CentOS 7
- Установка и настройка FTP сервера
- Установка и настройка Firewalld
Для установки потребуется подготовленный сервер, посмотрите, как установить и настроить CentOS 7, а также, как настроить сеть в CentOS.
- Подготовка системы
Подключение EPEL репозитория:
sudo yum -y install epel-release
Обновим систему:
sudo yum -y update
Установим файловый менеджер. Я привык работать с использованием Midnight Commander, меня вполне устраивает как удобство навигации по фаловой системе, так и встроенный редактор mcedit. Выполните в терминале:
sudo yum -y install mc
- Настройка SELinux
SELinux — система принудительного контроля доступа, призванная повысить уровень безопасности Вашего сервера. В некоторых случаях использование SELinux может вызвать проблемы во время установки и настройки компонентов системы. Есть два решения данной ситуации: правильно настроить SELinux или просто отключить его. В любом случае, необходимо взвесить риски. Если Вы поднимаете тестовый сервер в локальной сети для личных задач, то можно просто отключить SELinux, но вслучае боевого использования сервера в сети интернет — рекомендую Вам максимально использовать все доступные средства защиты. Каким путем пойти — остается Вашим решением. Я не отключаю SELinux.
Настройка разрешений в SELinux
Для работы с контекстом SELinux нам необходима утилита semanage входящая в состав пакета policycoreutils-python, давайте установим ее:
sudo yum -y install policycoreutils-python
Возможно установить как временные разрешения (будут работать до перезагрузки системы):
sudo chcon -R -t httpd_sys_content_t /path/to/www sudo chcon -R -t httpd_sys_rw_content_t /path/to/www
Так и постоянные разрешения:
sudo semanage fcontext -a -t httpd_sys_content_t "/path/to/www(/.*)?" sudo semanage fcontext -a -t httpd_sys_rw_content_t "/path/to/www(/. SELINUX=\).*/\SELINUX=disabled/' /etc/selinux/config
Для применения настроек необходимо перезагрузить систему:
sudo systemctl reboot
После перезагрузки проверьте статус командой:
sestatus
Вы должны увидеть следующую информацию:
SELinux status: disabled
- Установка и настройка MariaDB
Выполните для установки:
sudo yum -y install mariadb-server mariadb
Запустим сервис:
sudo systemctl start mariadb.service
Добавим в автозагрузку:
sudo systemctl enable mariadb.service
Выполните базовую настройку:
sudo mysql_secure_installation
Рассмотрим подробно параметры настройки:
Enter current password for root (enter for none) оставляем поле пустым нажимаем Enter Set root password Y New password: Задаем пароль Re-enter new password: Подтверждаем Remove anonymous users Y Disallow root login remotely Y Remove test database and access to it Y Reload privilege tables now? Y All done! If you've completed all of the above steps, your MariaDB installation should now be secure. Thanks for using MariaDB!
- Установка и настройка Apache
Для установки Apache выполните в терминале:
sudo yum -y install httpd
Настройка Apache осуществляется путем редактирования конфигурационного файла:
sudo mcedit /etc/httpd/conf/httpd.conf
Необходимо внести следующие изменения:
# Проверим, раскомментированна ли строчка в конце файла: IncludeOptional conf.d/*.conf # Также добавьте ниже следующую строку: ServerName 127.0.0.1
Запускаем Apache:
sudo systemctl start httpd.service
Добавим сервис в автозагрузку:
sudo systemctl enable httpd.service
Перейдя по адресу:
http://xxx.xxx.xxx.xxx
(где xxx.xxx.xxx.xxx Ip адрес Вашего сервера), Вы должны увидеть тестовую страницу Apache:
* Если у Вас не открывается тестовая страница Apache, отключите на время Firewalld, подробная настройка файрвола будет рассмотрена ниже:
sudo systemctl stop firewalld
Скроем информацию о версии Apache, модулях и операционной системе (по умолчанию эта информация доступна всем желающим из внешнего мира):
sudo mcedit /etc/httpd/conf/httpd. conf
Добавьте в конец файла:
ServerSignature Off ServerTokens Prod
Перезапустите сервис:
sudo systemctl restart httpd.service
- Установка и настройка PHP
Выполните установку PHP:
sudo yum -y install php php-mysql php-gd php-ldap php-odbc php-pear php-xml php-xmlrpc php-mbstring php-snmp php-soap curl curl-devel php-mcrypt php-pecl-apc
Отредактируйте конфигурационнный файл php:
sudo mcedit /etc/php.ini # раскомментируйте и внесите изменения realpath_cache_size = 1024k
Перезагрузите Apache:
sudo systemctl restart httpd.service
- Установка phpMyAdmin, ограничение доступа
Установка:
sudo yum -y install phpmyadmin
Отредактируйте конфигурационный файл:
sudo mcedit /etc/httpd/conf.d/phpMyAdmin.conf
Внесите следующие изменения, разрешив соединения от удаленных хостов::
# Страница авторизации phpMyAdmin
<Directory /usr/share/phpMyAdmin/>
AddDefaultCharset UTF-8<IfModule mod_authz_core. c>
# Apache 2.4
<RequireAny>
# Require ip 127.0.0.1
# Require ip ::1
# Разрешаем удаленное подключение с определенного IP
Require ip xxx.xxx.xxx.xxx (IP адрес клиентской машины)
# Разрешаем все удаленные подключения
Require all granted
</RequireAny>
</IfModule>
<IfModule !mod_authz_core.c>
# Apache 2.2
Order Deny,Allow
Deny from All
Allow from 127.0.0.1
Allow from ::1
</IfModule>
</Directory># Страница настройки phpMyAdmin
<Directory /usr/share/phpMyAdmin/setup/>
<IfModule mod_authz_core.c>
# Apache 2.4
<RequireAny>
# Require ip 127.0.0.1
# Require ip ::1
# Разрешаем удаленное подключение с определенного IP
Require ip xxx.xxx.xxx.xxx (IP адрес клиентской машины)
# Разрешаем все удаленные подключения
Require all granted
</RequireAny>
</IfModule>
<IfModule !mod_authz_core. c>
# Apache 2.2
Order Deny,Allow
Deny from All
Allow from 127.0.0.1
Allow from ::1
</IfModule>
</Directory>Внимание! С целью повышения безопасности сервера, я не рекомендую Вам использовать разрешения для всех удаленных хостов (т.е. Require all granted), в данной статье эти настройки приведены для ознакомления.
Ограничьте доступ к директории /usr/share/phpMyAdmin/ до конкретного IP адреса Require ip xxx.xxx.xxx.xxx (где xxx.xxx.xxx.xxx IP адрес клиентской машины), а также в случае необходимости тонкой настройки, ограничьте доступ к директории /usr/share/phpMyAdmin/setup/ до Require ip 127.0.0.1 по окончанию всех настроек.
Я не приветствую использование phpMyAdmin на боевых серверах. Однако новичку или для тестового сервера эта веб панель предоставляет определенный уровень удобства.
Перезагрузите Apache:
sudo systemctl restart httpd. service
Для доступа к веб интерфейсу phpMyAdmin наберите в адресной строке:
http://ip-адрес сервера/phpmyadmin
Пользователь: root
Пароль: Вы установили его на стадии настройки MariaDB
Для доступа к странице настроек phpMyAdmin наберите в адресной строке:
http://ip-адрес сервера/phpmyadmin/setup
Не забудьте ограничить доступ к странице настроек, по завершению всех установок.
- Создание базы данных для сайта
Создание базы данных в консоле
Подключаемся к MySQL серверу:
mysql -u root -p
Вводим пароль пользователя root (мы устанавливали его в начале статьи) нажимаем Enter.
Создание базы данных:
CREATE DATABASE `site` CHARACTER SET utf8 COLLATE utf8_general_ci;
Желательно сразу выбрать базу данных mysql, т.к. все дальнешие настройки будут вноситься в нее.
use mysql;
Создаем пользователя site с паролем Zaq12wsx для базы данных site:
Внимание! используйте сложные пароли.
GRANT ALL PRIVILEGES ON site.* TO 'site'@'localhost' IDENTIFIED BY 'Zaq12wsx' WITH GRANT OPTION;
Отключаемся от MySQL сервера:
quit;
Создание базы данных с помощью phpMyAdmin
Откройте в браузере
http://ip-адрес сервера/phpmyadmin
Перейдите в раздел «Базы данных»
Укажите имя базы данных, котировку и нажмите «Создать»
Перейдите в раздел «Пользователи», кликните «Добавить пользователя»
Укажите имя пользователя, ограничьте локальным доступом, задайте пароль и подтверждение. Отметьте чекбокс «Предоставить все привелегии на базу данных «base name» (в нашем случае site)». Нажмите «Вперед» для продолжения.
Внимание! Используйте сложные пароли.
Нажмите на значок «Выход» для завершения работы с phpMyAdmin.
Вы успешно создали базу данных и привелегированного пользователя для Вашего сайта.
- Создание домашнего каталога, установка разрешений, подготовка Joomla
Создаем домашний каталог для сайта:
sudo mkdir /var/www/html/site. ru
Создаем каталог для хранения логов:
sudo mkdir /var/www/html/site.ru/logs
Переходим в домашний каталог сайта:
cd /var/www/html/site.ru
Для установки Joomla 3.6 понадобится wget и unzip, выполните в терминале:
sudo yum -y install wget unzip
Скачаем с официального сайта последнюю версию Joomla, на момент написания статьи это версия 3.6.2:
sudo wget https://github.com/joomla/joomla-cms/releases/download/3.6.2/Joomla_3.6.2-Stable-Full_Package.zip
Распакуем:
sudo unzip Joomla_3.6.2-Stable-Full_Package.zip
Установим права на файлы:
sudo find . -type f -exec chmod 0644 {} \;
Установим права на каталоги:
sudo find . -type d -exec chmod 0755 {} \;
Изменим владельца на пользователя Apache:
sudo chown apache:apache -R /var/www/html/site.ru
Внимание! Если Вы не выключили SELinux, необходимо разрешить чтение и запись для Apache:
sudo yum -y install policycoreutils-python sudo semanage fcontext -a -t httpd_sys_content_t "/var/www/html/site. ru(/.*)?" sudo semanage fcontext -a -t httpd_sys_rw_content_t "/var/www/html/site.ru(/.*)?" sudo restorecon -R /var/www/html/site.ru
- Создание, настройка и проверка виртуальных хостов
Создаем виртуальный хост site.ru:
sudo mcedit /etc/httpd/conf.d/site.ru.conf
Укажите настройки виртуального хоста:
<VirtualHost *:80> ServerAdmin [email protected] ServerName site.ru ServerAlias www.site.ru DocumentRoot /var/www/html/site.ru <Directory /var/www/html/site.ru> Options FollowSymLinks AllowOverride All Require all granted </Directory> ErrorLog /var/www/html/site.ru/logs/error.log CustomLog /var/www/html/site.ru/logs/access.log common </VirtualHost>
Перезапустите Apache:
sudo systemctl restart httpd.service
Создание других виртуальных хостов выполняется аналогично, не забудьте о создании домашних каталогов для новых сайтов.
Для проверки правильности настройки виртуального хоста необходимо отредактировать файл hosts на клиентской машине.
Для Windows:
# Открываем текстовым редактором C:\Windows\System32\drivers\etc\hosts # Вносим следующие изменения xxx.xxx.xxx.xxx site.ru xxx.xxx.xxx.xxx www.site.ru
Для Linux:
# Открываем текстовым редактором sudo mcedit /etc/hosts # Вносим следующие изменения xxx.xxx.xxx.xxx www.site.ru site.ru
*Где xxx.xxx.xxx.xxx ip адрес Вашего сервера
Сохраните и перезагрузите Ваш браузер.
- Установка Joomla и запуск сайта
Откройте в браузере:
http://site.ru
или
http://www.site.ru
Вас встречает мастер установки Joomla:
Вам необходимо выбрать язык установки Joomla 3.6.2. укажите название сайта, Email администратора, логин, пароль адмнистратора и подтверждение пароля. Нажмите «Далее» для продолжения.
Конфигурация базы данных. Укажите тип базы данных, имя сервера оставьте по умолчанию «localhost». Укажите имя пользователя (в моем случае site), пароль (Zaq12wsx) и имя базы данных (site). Также можно указать вручную или автоматически «Префикс таблиц». Префикс можно использовать в случае хранения данных от нескольких сайтов в одной базе, в таком случае для каждого сайта необходимо указывать свой отличный от других префикс. Нажмите «Далее» для продолжения установки Joomla.
Завершение установки. На этой странице Вы можете увидеть сводку всех настроек сайта, а также произвести установку демо-данных. Нажмите на кнопку «Установка».
Ожидаем завершения процесса установки Joomla 3.6.2 на веб сервер CentOS 7.
Предлагаю Вам сразу русифицировать Joomla 3.6.2. Нажмите «Установка языковых пакетов».
Выберите требуемый язык из списка.
Нажмите «Далее».
На данный момент мы не будем использовать мультиязычность на нашем сайте. Укажите язык панели управления, а также язык сайта и нажмите «Далее».
Нажмите «Удалить директорию «installation»».
Установка Joomla 3. 6.2 на Ваш собственный веб сервер CentOS 7 успешно завершена.
- Установка и настройка ProFTPD
Для установки ProFTPD выполните:
sudo yum -y install proftpd proftpd-utils
Запустите службу:
sudo systemctl start proftpd
Включаем proftpd в автозагрузку:
sudo systemctl enable proftpd
Отредактируйте файл конфигурации сервера:
sudo mcedit /etc/proftpd.conf
Приведите параметр «DefaultRoot» к следующему виду:
DefaultRoot ~
Закоментируйте дефолтный параметр «AuthOrder»:
#AuthOrder mod_auth_pam.c* mod_auth_unix.c
Добавьте в конец файла следующие параметры:
AuthUserFile /etc/ftpd.passwd RequireValidShell off AuthPAM off RootLogin off PassivePorts 30000 35000 ListOptions -a LoadModule mod_auth_file.c AuthOrder mod_auth_file.c
Просмотрим список пользователей:
sudo cat /etc/passwd
Вывод комманды:
*** sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin mysql:x:27:27:MariaDB Server:/var/lib/mysql:/sbin/nologin apache:x:48:48:Apache:/usr/share/httpd:/sbin/nologin
В моем случае Apache имеет следующие идентификаторы пользователя и группы: UserId=48, GroupId=48.
Создаем виртуального ftp-пользователя с логином site, идентификатором пользователя 48, группы 48 и домашним каталогом /var/www/html/site.ru:
sudo ftpasswd --passwd --file=/etc/ftpd.passwd --name=site --uid=48 --gid=48 --home=/var/www/html/site.ru --shell=/bin/false
После выполнения команды система попросит ввести дважды пароль для создаваемого пользователя (настоятельно рекоммендую использовать сложные пароли). В результате выполнения комманды будет создан файл /etc/ftp.passwd с записью о пользователе.
Изменить пароль пользователя можно следующей командой:
sudo ftpasswd --file /etc/ftpd.passwd --passwd --name=site --change-password
Отредактируйте права доступа на файл с пользователями:
sudo chgrp nobody /etc/ftpd.passwd sudo chmod 640 /etc/ftpd.passwd
SELinux. Разрешите полный доступ к файлам для proftpd:
sudo setsebool -P allow_ftpd_full_access=1
Перезапустите службу proftpd:
sudo systemctl restart proftpd
- Firewalld — повышение уровня безопасности сервера
Firewalld — новый брандмауэр входящий в состав CentOS 7. Для установки Firewalld выполните:
sudo yum -y install firewalld
Запускаем:
sudo systemctl start firewalld
Включаем в автозагрузку:
sudo systemctl enable firewalld
Проверим:
sudo systemctl status firewalld
Если сейчас перейти на сайт, то у Вас ничего не откроется. Firewalld блокирует сетевые соединения. Посмотрим что разрешено по умолчанию:
sudo firewall-cmd --permanent --list-all
Вывод команды:
public (default) interfaces: sources: services: ssh dhcpv6-client masquerade: no forward-ports: icmp-blocks: rich rules:
На постоянной основе разрешен ssh, а также клиент dhcp v6. Я не использую на сервере ip v6, поэтому уберу соответствующее правило:
sudo firewall-cmd --permanent --zone=public --remove-service=dhcpv6-client
Для работы веб сервера необходимо разрешить сервис http (80 порт):
sudo firewall-cmd --permanent --zone=public --add-service=http
Если Вы планируете использовать https на Вашем сайте, необходимо разрешить https сервис (443 порт):
sudo firewall-cmd --permanent --zone=public --add-service=https
Для работы FTP сервера необходимо открыть 21 порт, а также порты 30000-35000 для использования пассивного режима в FTP клиентах:
sudo firewall-cmd --permanent --zone=public --add-port=21/tcp sudo firewall-cmd --permanent --zone=public --add-port=30000-35000/tcp
Перезагрузим правила:
sudo firewall-cmd --reload
На данном этапе настройки Firewalld Ваш сайт снова доступен. Но мне хочется предложить Вам выполнить еще несколько шагов по повышению уровня безопасности Вашего сервера. Есть довольно подробно написанный мануал по повышению уровня безопасности при использовании ssh. Одним из этапов настройки является изменение стандартного порта, рассмотрим более подробно настройки Firewalld при смене порта ssh.
Разрешим на постоянной основе (чтобы после перезагрузки не потерлось) соединение на порт 2220/tcp (на него повесим sshd):
sudo firewall-cmd --permanent --zone=public --add-port=2220/tcp
Перезагрузим правила:
sudo firewall-cmd --reload
Проверим:
sudo firewall-cmd --zone=public --list-ports
Вывод команды:
2220/tcp
Порт открыт. Редактируем конфиг sshd:
sudo mcedit /etc/ssh/sshd_config
Вносим изменения:
*** # If you want to change the port on a SELinux system, you have to tell # SELinux about this change. # semanage port -a -t ssh_port_t -p tcp #PORTNUMBER # В файле необходимо только указать порт Port 2220 #AddressFamily any #ListenAddress 0. 0.0.0 #ListenAddress :: ***
Перезапустим ssh:
sudo systemctl restart sshd.service
Также в случае использования SELinux (надеюсь, Вы его не отключили) необходимо выполнить дополнительные настройки. Это связано с тем, что SELinux не даст подключиться к ssh на нестандартном порте (2220):
sudo semanage port -a -t ssh_port_t -p tcp 2220
После проверки подключения к ssh на новом порте, закройте доступ к порту 22:
sudo firewall-cmd --permanent --zone=public --remove-service=ssh
Перезагрузите правила:
sudo firewall-cmd --reload
Проверим настройки Firewalld:
sudo firewall-cmd --list-all
Вывод команды:
public (default) interfaces: sources: services: http https ports: 2220/tcp 21/tcp 30000-35000/tcp masquerade: no forward-ports: icmp-blocks: rich rules:
Мы открыли доступ к серверу по протоколу http, https, ftp, а также порт 2220 на котором теперь работает ssh сервис.
Раздел:
Unix сервера
Теги:
CentOS
Top
Установка Apache в CentOS | Timeweb Cloud
Веб-сервер Apache является наиболее распространенной платформой для развертывания сервисов, работающих по протоколу HTTP. Популярность объяснима – программное обеспечение включает динамически подгружаемые модули, поддержку множества форматов файлов, взаимодействие с другим профильным софтом.
Необходимые условия
Работа с HTTP-сервером Apache требует предварительно настроенной операционной системы, в этой статье за основу возьмем CentOS 8, но инструкция подойдет и для других версий. Будет достаточно создать пользователя с привилегиями sudo и разрешить соединение во встроенном брандмауэре. Разворачивать систему можно на локальном ПК или виртуальной машине, арендованной у провайдера cloud.timeweb.com.
Шаг 1. Инсталляция Apache
Пакет с инструментом Apache есть в официальном репозитории CentOS, поэтому он доступен для установки при помощи dnf. Выполним команду:
sudo dnf install httpd
После подтверждения диспетчер пакетов выполняет установку веб-сервера Apache в CentOS и всех необходимых для его функционирования зависимостей. Важно, чтобы фаервол уже был настроен для ответа на запросы по протоколу HTTP. Например, понадобится открытый порт 443 вместе со включенной службой http.
sudo firewall-cmd --permanent --add-service=https
После применения команды обязательна перезагрузка брандмауэра, иначе новые правила не начнут действовать:
sudo firewall-cmd –reload
Установка Apache завершена, пора запускать его и проверять работоспособность.
Шаг 2. Проверка HTTP-сервера
Поначалу веб-сервер требует ручного запуска, поэтому введем команду:
sudo systemctl start httpd
Проверить, запустилась ли служба, можно при помощи команды:
sudo systemctl status httpd
Если веб-сервер работает штатно, пользователь увидит сообщение, в котором должен отразиться статус active (running)
:
httpd.service - The Apache HTTP Server
Loaded: loaded (/usr/lib/systemd/system/httpd.service; disabled; vendor preset: disa>
Active: active (running) since Thu 2020-04-23 22:25:33 UTC; 11s ago
Второй способ проверки – открыть хост через браузер по IP-адресу сервера:
http://your_server_ip
Найти IP сервера можно в панели управления или в письме, которое пришло на почту после установки сервера.
Шаг 3. Управление процессом Apache
Теперь можно опробовать некоторые команды systemctl, используемой при взаимодействии со службой. Например, остановка HTTP-сервера будет после ввода:
sudo systemctl stop httpd
Повторный запуск происходит по команде:
sudo systemctl start httpd
Перезапуск, например, для принятия изменений в настройках:
sudo systemctl restart httpd
Возможен рестарт без прерывания текущего соединения:
sudo systemctl reload httpd
По умолчанию процессы Apache запускаются при загрузке сервера. Если это нежелательно, то отключите автозапуск:
sudo systemctl disable httpd
Первоначальные настройки HTTP-сервера предполагают развертывание всего одного сайта. Но есть возможность создать виртуальные хосты, на каждом из которых создают отдельные ресурсы.
Шаг 4. Настройка виртуальных хостов
В системе Apache они схожи с построением в Nginx. Их также используют, чтобы обеспечить разделение конфигурации и развертывание на одной виртуальной машине или физическом сервере двух и более доменов. В этой статье везде будем указывать условный сайт под названием example.com. При работе его заменяют реальным доменом.
Теперь приступим к настройке. Создайте папку html в каталоге example.com (var/www/):
sudo mkdir -p /var/www/example.com/html
В дополнение желательно создать отдельную папку, где будут храниться файлы журнала:
sudo mkdir -p /var/www/example.com/log
Переменной среды $USER назначают права владельца:
sudo chown -R $USER:$USER /var/www/example.com/html
Перед продолжением желательно проверить, что у корневой папки установлены стандартные разрешения:
sudo chmod -R 755 /var/www
Теперь можно в любом редакторе кода сформировать index.html. Например, запустим vi:
sudo vi /var/www/example.com/html/index.html
Внесем простейшее содержимое:
<html>
<head>
<title>Welcome to Example. com!</title>
</head>
<body>
<h2>Success! The example.com virtual host is working!</h2>
</body>
</html>
После сохранения изменений в index.html у нас почти все готово для генерации файлов. Они задают настройки каждого отдельно взятого домена и транслируют их Apache, чтобы HTTP-сервер понимал, как обрабатывать запросы. Хранить их будем в каталоге sites-available, к нему создается папка sites-enabled, указывающая на готовность хоста принимать трафик из сети:
sudo mkdir /etc/httpd/sites-available /etc/httpd/sites-enabled
Остается дать команду HTTP-серверу найти виртуальные хосты в папке sites-enabled. Чтобы процесс прошел как надо, нужно предварительно изменить основной конфигурационный файл Apache командой:
sudo vi /etc/httpd/conf/httpd.conf
Затем переместить курсор в самый конец файла и внести там строчку:
...
# Supplemental configuration
#
# Load config files in the "/etc/httpd/conf. d" directory, if any.
IncludeOptional conf.d/*.conf
IncludeOptional sites-enabled/*.conf
Теперь настало время для формирования непосредственно файла виртуального хоста:
sudo vi /etc/httpd/sites-available/example.com.conf
В него вносится следующая информация:
<VirtualHost *:80>
ServerName www.example.com
ServerAlias example.com
DocumentRoot /var/www/example.com/html
ErrorLog /var/www/example.com/log/error.log
CustomLog /var/www/example.com/log/requests.log combined
</VirtualHost>
Вместо example.com нужно везде проставить реальный домен. Тогда файл укажет веб-серверу, где найти корневой каталог сайта, где сохранять журналы ошибок и обращений к сайту. После закрытия файла с сохранением изменений останется активировать виртуальные хосты – сформировать символьную ссылку для доменов в каталоге sites-enabled:
sudo ln -s /etc/httpd/sites-available/example.com.conf /etc/httpd/sites-enabled/example. com.conf
Теперь настройка завершена, и хост готов к функционированию. Но перед перезапуском веб-сервера желательно проверить, что модуль SELinux правильно обрабатывает запросы.
Шаг 5. Настройка разрешений в SELinux
Модуль безопасности Linux SELinux повышает безопасность операционной системы. В CentOS встроен пакет, уже настроенный для взаимодействия с Apache. Но в данном примере мы изменили ее, поэтому при старте служб веб-сервера пользователь получит ошибку. Чтобы решить такую проблему, нужно изменение политик SELinux в отношении Apache. Всего применяют два способа корректировки – универсальный и для конкретной папки.
Вариант №1. Универсальный
Процедура позволяет модулю безопасности использовать любые процессы Apache через булеву переменную httpd_unified. Такой подход удобен, но не рассматривает раздельную политику папок и файлов. Запуск универсальной политики:
sudo setsebool -P httpd_unified 1
Команда setsebool нужна для замены булевых значений, флаг -P – для обновления времени запуска при старте, при каждой перезагрузке оно сохраняется. В данном примере булево значение httpd_unified было активировано со значением 1.
Вариант №2. Корректировка политик Apache для каталога
Отдельная настройка требует дополнительных действий, зато позволяет задавать разрешения для каждого каталога или файла. При выборе этой методики придется вручную задавать тип контекста для каждой новой папки. Например, проверим параметры /var/www/example.com/log командой:
sudo ls -dlZ /var/www/example.com/log/
В результате пользователь увидит сообщение:
drwxr-xr-x. 2 root root unconfined_u:object_r:httpd_sys_content_t:s0 6 Apr 23 23:51 /var/www/example.com/log/
Судя по нему, сейчас используется контекст httpd_sys_content_t
, т.е. служба Apache будет читать только те файлы, которые размещены в указанной папке. Если изменить его на httpd_log_t
, веб-сервер будет генерировать данные для файла журнала:
sudo semanage fcontext -a -t httpd_log_t "/var/www/example.com/log(/.*)?"
Применить внесенные изменения можно командой:
sudo restorecon -R -v /var/www/example. com/log
Флаг -R позволяет запускать ее рекурсивно с обновлением существующих файлов. Символ -V распечатывает вносимые изменения. Это выглядит так:
Relabeled /var/www/example.com/log from unconfined_u:object_r:httpd_sys_content_t:s0 to unconfined_u:object_r:httpd_log_t:s0
Если хочется убедиться в изменении типа контекста, просмотрите еще раз текущее состояние:
sudo ls -dlZ /var/www/example.com/log/
Вывод на экран:
drwxr-xr-x. 2 root root unconfined_u:object_r:httpd_log_t:s0 6 Apr 23 23:51 /var/www/example.com/log/
Шаг 6. Тестирование виртуального хоста
После перенастройки разрешений в SELinux HTTP-сервер будет без проблем записывать данные в каталог /var/www/example.com/log. Перезапустим процесс Apache:
sudo systemctl restart httpd
Сформируем перечень содержимого каталога /var/www/example.com/log, это позволит убедиться в том, что система создала журнал:
ls -lZ /var/www/example.com/log
Результат выглядит так:
-rw-r--r--. 1 root root system_u:object_r:httpd_log_t:s0 0 Apr 24 00:06 error.log
-rw-r--r--. 1 root root system_u:object_r:httpd_log_t:s0 0 Apr 24 00:06 requests.log
Первая строка подтверждает наличие файла error.log, а вторая – requests.log. Это практически финал, пользователь может проверить работоспособность домена через браузер. В качестве ответа будет примерно такая надпись:
Success! The example.com virtual host is working
Она подтверждает, что виртуальный хост был настроен и начал обслуживать контент. По каждому новому сайту повторяют шаги 4-5, заменив домен на соответствующий.
Выводы
Мы рассмотрели настройку Apache в CentOS под единственный или несколько доменов, расположенных на одной физической или виртуальной машине. После проверки каждого из подключенных сайтов можно разворачивать CMS и приступать к наполнению контентом.
Как создавать виртуальные хосты Apache в CentOS 7: руководство для начинающих
ВПС
30 ноября 2022 г.
Эдгарас Г.
2 мин Чтение
Если вы хотите разместить на своем сервере более одного домена, вам необходимо создать соответствующие хосты на веб-сервере. Таким образом, ваш сервер может доставлять разный контент для разных запросов. В этом руководстве вы узнаете, как создавать виртуальные хосты Apache в CentOS 7.
1. Установка Apache
Прежде чем мы начнем, убедитесь, что у вас есть root-доступ к вашему VPS или серверу с использованием SSH-подключения. В Hostinger учетные данные для входа находятся в папке 9.0015 Серверы вкладка hPanel.
- Установите Apache на свой компьютер с CentOS 7, введя следующую команду:
sudo yum -y установить httpd
- После завершения установки включите Apache как службу CentOS:
sudo systemctl включить httpd.service
- Посетите IP-адрес вашего сервера, чтобы проверить, запущен ли уже Apache. Страница должна выглядеть так:
2. Создание дерева каталогов
- Дерево каталогов используется для хранения данных веб-сайта. Сначала установите рабочий каталог /var/www , выполнив эту команду:
компакт-диск /var/www/
- Вы должны использовать уникальный корень документа для каждого виртуального хоста:
mkdir -p yourdomain.com/public_html
Не забудьте заменить yourdomain.com на ваше фактическое доменное имя.
- Сделать каталог доступным для Apache. Запустите chown , чтобы изменить владельца, и chmod 9.0016, чтобы установить правильные разрешения для всего веб-каталога.
chown -R apache:apache /var/www/yourdomain.com/public_html chmod -R 755 /var/www
Apache теперь имеет необходимый доступ для создания дополнительных каталогов и обслуживания контента для входящих запросов.
3. Создание демонстрационной страницы
Рекомендуется создать демонстрационную страницу для виртуальных хостов Apache. Таким образом, вы можете проверить, работает ли хост, прежде чем перемещать файлы своего веб-сайта. Вот как это сделать:
- Используйте редактор nano для создания файла index.html в каталоге yourdomain.com/public_html :
нано yourdomain.com/public_html/index.html
- Вставьте в файл следующее содержимое:
<голова>
Это тестовая страница голова> <тело>Это работает!
тело> - Сохраните файл, нажав CTRL + X , а затем Д .
4. Создание виртуального хоста
- Создайте новый файл .conf виртуального хоста в каталоге конфигурации Apache:
нано /etc/httpd/conf.d/yourdomain.com.conf
- Вставьте в файл .conf следующее содержимое:
<Виртуальный хост *:80> Имя сервера www.yourdomain.com Псевдоним сервера yourdomain.com DocumentRoot /var/www/yourdomain.com/public_html Журнал ошибок /var/www/yourdomain.com/error.log CustomLog /var/www/yourdomain. com/requests.log вместе Виртуальный хост>
В приведенном выше примере мы сообщаем Apache, что будем использовать порт 80 для связи и что yourdomain.com — это имя виртуального хоста. Кроме того, мы также указываем каталоги для файлов веб-сайта (корень документа) и журналов ошибок.
- Перезапустите Apache, чтобы изменения вступили в силу:
перезапуск systemctl httpd.service
Вот и все, вы только что создали виртуальный хост Apache для своего домена! Теперь попробуйте получить доступ к хосту, и вы должны увидеть « Это работает! » текст с демонстрационной страницы, которую мы сделали ранее.
Заключение
Вы узнали, как создать виртуальный хост Apache за четыре простых шага. Подводя итог, еще раз взглянем на них:
- Установка apache из CentOS 7.
- Создайте дерево каталогов, которое будет использоваться для хранения всех файлов вашего веб-сайта.
- Создайте демонстрационную страницу, чтобы проверить, правильно ли работает виртуальный хост Apache.
- Создайте виртуальный хост, создав файлы конфигурации в каталоге Apache.
Мы надеемся, что это руководство окажется полезным. Не стесняйтесь комментировать ниже, если у вас есть какие-либо вопросы!
Эдгарас — опытный администратор серверов в Hostinger. Он следит за тем, чтобы каждый сервер работал на полную мощность и имел все последние технологические достижения. В свободное от работы время Эдгарас любит кататься на лыжах и исследовать мир.
Подробнее от Эдгараса Г.
Где находится конфигурация Apache в CentOS?
Основные файлы конфигурации Apache
На сервере CentOS менеджер пакетов, используемый для установки веб-сервера Apache (например, rpm, yum или dnf), обычно по умолчанию размещает основной файл конфигурации Apache в одном из следующих мест. на сервере:
/etc/apache2/httpd.conf
/etc/apache2/apache2. conf
/etc/httpd/httpd.conf
/etc/httpd/conf/httpd.conf
Если у вас есть доступ к серверу через командную строку вы можете подтвердить точное местоположение, из которого Apache загружает свой файл конфигурации, выполнив команду
apachectl -V
или
httpd -V
(при использовании более старой версии Apache)
Любая команда отображает версию Apache и параметры сборки:
[root@host ~]# apachectl -V
Версия сервера: Apache/2.4.39 (cPanel)
Сервер построен: 30 мая 2019 20:13:52
Магический номер модуля сервера: 20120211:84
Сервер загружен: APR 1.7.0, APR-UTIL 1.6.1
Скомпилировано с использованием: APR 1.7.0, APR-UTIL 1.6.1
Архитектура: 64-разрядная
Server MPM: событие
многопоточное: да (фиксированное количество потоков)
разветвленное: да (переменное количество процессов)
Сервер, скомпилированный с....
-D APR_HAS_SENDFILE
-D APR_HAS_MMAP
-D APR_HAVE_IPV6 (адреса, отображаемые в IPv4, отключены)
-D APR_USE_PROC_PTHREAD_SERIALIZE
-D APR_USE_PTHREAD_SERIALIZE
-D SINGLE_LISTEN_UNSERIALIZED_ACCEPT
-D APR_HAS_OTHER_CHILD
-D AP_HAVE_RELIABLE_PIPED_LOGS
-D DYNAMIC_MODULE_LIMIT=256
-D HTTPD_ROOT="/etc/apache2"
-D SUEXEC_BIN="/usr/sbin/suexec"
-D DEFAULT_PIDLOG="/var/run/apache2/httpd. pid"
-D DEFAULT_SCOREBOARD="logs/apache_runtime_status"
-D DEFAULT_ERRORLOG="logs/error_log"
-D AP_TYPES_CONFIG_FILE="conf/mime.types"
-D SERVER_CONFIG_FILE="conf/httpd.conf"
Строка HTTPD_ROOT= покажет корневой каталог для установки Apache, а строка SERVER_CONFIG_FILE= покажет вам путь к файлу конфигурации Apache относительно корневого каталога установки Apache.
Чтобы проиллюстрировать это на примере вывода выше, строка HTTPD_ROOT= показывает нам, что корневой каталог Apache выглядит следующим образом:0015 SERVER_CONFIG_FILE=”conf/httpd.conf“ находится в корневом каталоге установки Apache, создавая полный путь к файлу конфигурации Apache:
/etc/apache2/conf/httpd.conf
Включаемые файлы
В дополнение к основному файлу конфигурации Apache, описанному выше, настройки Apache также могут быть помещены в файлы Apache Include. Включаемые файлы — это дополнительные файлы конфигурации, которые Apache будет читать, если это указано в основном файле конфигурации.