# Apache http сервер или просто веб сервер апач. Является кросплатформенным ПО, поддерживающим практически все популярные операционные системы, в том числе и Windows. Ценится прежде всего за свою надежность и гибкость конфигурации, которую можно существенно расширить благодаря подключаемым модулям, которых существует великое множество. Из недостатков отмечают большую требовательность к ресурсам, по сравнению с другими серверами. Держать такую же нагрузку, как, к примеру, nginx, apache не сможет при схожих параметрах железа. # Web сервер на CentOS 7 Итак, наш веб сервер centos будет состоять из трех основных компонентов - http сервера apache, интерпретатора языка программирования php и сервера баз данных mysql. ### Настройка apache в CentOS 7 В CentOS служба apache называется httpd. Когда я только знакомился с этим дистрибутивом, мне было непривычно. В Freebsd и Debian, с которыми я до этого работал служба веб сервера называлась apache, хотя где-то я замечал, кажется во фрюхе, что файл конфигурации имеет имя httpd.conf. До сих пор я не знаю, почему распространились оба эти названия. Был бы рад, если бы со мной кто-то поделился информацией на этот счет в комментариях. Теперь приступим к установке apache. В CentOS 7 это делается очень просто: ```bash yum install -y httpd ``` Добавляем apache в автозагрузку: ```bash systemctl enable httpd ``` Запускаем apache в CentOS 7: ```bash systemctl start httpd ``` Проверяем, запустился ли сервер: ```bash netstat -tulnp | grep httpd tcp6       0      0 :::80                   :::*                    LISTEN      21586/httpd ``` Все в порядке, повис на 80-м порту, как и положено. Уже сейчас можно зайти по адресу http://ip-address и увидеть картинку: [![image.png](http://book.mylbt.ru/uploads/images/gallery/2023-10/scaled-1680-/6oTimage.png)](http://book.mylbt.ru/uploads/images/gallery/2023-10/6oTimage.png) Теперь займемся настройкой apache. Я предпочитаю следующую структуру веб хостинга:
/webраздел для размещения сайтов
/web/site1.ru/wwwдиректория для содержимого сайта
/web/site1.ru/logsдиректория для логов сайта
Создаем подобную структуру: ```bash mkdir /web && mkdir /web/site1.ru && mkdir /web/site1.ru/www && mkdir /web/site1.ru/logs chown -R apache. /web ``` Дальше редактируем файл конфигурации apache - **httpd.conf** по адресу **/etc/httpd/conf**. Первым делом проверим, раскомментирована ли строчка в самом конце: ```bash IncludeOptional conf.d/*.conf ``` Если нет, раскомментируем и идем в каталог /etc/httpd/conf.d. Создаем там файл site1.ru.conf: ```bash mcedit /etc/httpd/conf.d/site1.ru.conf ``` ```bash  ServerName site1.ru  ServerAlias www.site1.ru  DocumentRoot /web/site1.ru/www    Options FollowSymLinks  AllowOverride All  Require all granted    ErrorLog /web/site1.ru/logs/error.log  CustomLog /web/site1.ru/logs/access.log common ``` #### Перезапуск apache в centos Теперь делаем restart apache: ```bash systemctl restart httpd ``` Если возникли какие-то ошибки - смотрим лог apache /var/log/httpd/error\_log. Если все в порядке, то проверим, нормально ли настроен наш виртуальный хост. Для этого создадим в папке /web/site1.ru/www файл index.html следующего содержания: ```bash mcedit /web/site1.ru/www/index.html ``` ```bash

Апач настроен!

``` ```bash chown apache. /web/site1.ru/www/index.html ``` Дальше в винде правим файл hosts, чтобы обратиться к нашему виртуальному хосту. Добавляем туда строчку: 192.168.1.25 site1.ru где 192.168.1.25 ip адрес нашего веб сервера. Теперь в браузере набираем адрес http://site1.ru. Если видим картинку: [![image.png](http://book.mylbt.ru/uploads/images/gallery/2023-10/scaled-1680-/xhUimage.png)](http://book.mylbt.ru/uploads/images/gallery/2023-10/xhUimage.png) значит все правильно настроили. Если какие-то ошибки, то идем смотреть логи. Причем в данном случае не общий лог httpd, а лог ошибок конкретного виртуального хоста по адресу /web/site1.ru/logs/error.log. Сразу же обращу ваше внимание на настройку ротации логов виртуальных хостов. Частенько бывает, что если сразу не настроишь, потом забываешь. Но если сайт с хорошей посещаемостью, то логи будут расти стремительно и могут занять очень много места. Лучше настроить ротацию логов веб сервера сразу же после создания. Сделать это не сложно. Чтобы настроить ротацию логов виртуальных хостов, необходимо отредактировать файл /etc/logrotate.d/httpd. Он создается во время установки apache и включает в себя настройку ротации стандартного расположения логов. А так как мы перенесли логи каждого виртуального хоста в индивидуальную папку, необходимо добавить эти папки в этот файл: ```bash mcedit /etc/logrotate.d/httpd ``` ```bash /web/*/logs/*.log /var/log/httpd/*log {  missingok  notifempty  sharedscripts  delaycompress  postrotate  /bin/systemctl reload httpd.service > /dev/null 2>/dev/null || true  endscript } ``` Мы добавили одну строку в самое начала файла. Теперь логи всех виртуальных хостов в папке /web будут ротироваться по общему правилу. В принципе, простейший веб сервер уже готов и им можно пользоваться. Но вряд ли сейчас найдутся сайты со статическим содержимым, которым достаточно поддержки только html. Так что продолжим нашу настройку. ### Установка php в CentOS 7 Для поддержки динамического содержимого сайтов выполним следующий шаг. Установим php в CentOS 7: ```bash yum install -y php ``` И следом еще несколько полезных компонентов. Установим популярные модули для php: ```bash yum install -y php-mysql php-mbstring php-mcrypt php-devel php-xml php-gd ``` Выполним перезапуск apache: ```bash systemctl restart httpd ``` Создадим файл в директории виртуального хоста и проверим работу php: ```bash mcedit /web/site1.ru/www/index.php ``` ```php ``` ```bash chown apache. /web/site1.ru/www/index.php ``` Заходим по адресу [http://site1.ru/index.php](http://site1.ru/index.php) [![image.png](http://book.mylbt.ru/uploads/images/gallery/2023-10/scaled-1680-/ZnUimage.png)](http://book.mylbt.ru/uploads/images/gallery/2023-10/ZnUimage.png) Вы должны увидеть вывод информации о php. Если что-то не так, возникли какие-то ошибки, смотрите лог ошибок виртуального хоста, php ошибки будут тоже там. ### Где лежит php.ini После установки часто возникает вопрос, а где хранятся настройки php? Традиционно они находятся в едином файле настроек. В CentOS php.ini лежит в /etc, прямо в корне. Там можно редактировать глобальные настройки для все виртуальных хостов. Персональные настройки каждого сайта можно сделать отдельно в файле конфигурации виртуального хоста, который мы сделали раньше. Давайте добавим туда несколько полезных настроек: ```bash nano /etc/httpd/conf.d/site1.ru.conf ``` Добавляем в самый конец, перед </VirtualHost> ```bash php_admin_value date.timezone 'Europe/Moscow' php_admin_value max_execution_time 60 php_admin_value upload_max_filesize 30M ``` Для применения настроек нужно сделать restart apache. Теперь в выводе phpinfo можно увидеть изменение настроек. #### Обновление до php 5.6 в CentOS 7 В нашем примере мы установили на CentOS 7 php 5.4 из стандартного репозитория. А что делать, если нам нужна более новая версия, например php 5.6? В таком случае нужно выполнить обновление php. Для этого подключим remi репозиторий: ```bash wget http://rpms.remirepo.net/enterprise/remi-release-7.rpm rpm -Uvh remi-release-7*.rpm ``` Теперь обновляем php 5.4 до php 5.6: ```bash yum --enablerepo=remi,remi-php56 install php php-common php-mysql php-mbstring php-mcrypt php-devel php-xml php-gd ``` Перезапускаем apache: ```bash systemctl restart httpd ``` И идем смотреть вывод phpinfo - [http://site1.ru/index.php](http://site1.ru/index.php) [![image.png](http://book.mylbt.ru/uploads/images/gallery/2023-10/scaled-1680-/8Wsimage.png)](http://book.mylbt.ru/uploads/images/gallery/2023-10/8Wsimage.png) Отлично, мы обновили php до версии 5.6. ### Установка MySQL в CentOS 7 Как я уже писал ранее, сейчас все большее распространение получает форк mysql - mariadb. Она имеет полную совместимость с mysql, так что можно смело пользоваться. Я предпочитаю использовать именно ее. Устанавливаем mariadb на CentOS 7: ```bash yum install -y mariadb mariadb-server ``` Добавляем mariadb в автозапуск: ```bash systemctl enable mariadb.service ``` Запускаем mariadb: ```bash systemctl start mariadb ``` Проверяем, запустилась или нет: ```bash netstat -tulnp | grep mysqld tcp        0      0 0.0.0.0:3306            0.0.0.0:*               LISTEN      22276/mysqld ``` Обращаю внимание, что она даже в системе отображается как сервис mysqld. Теперь запускаем стандартный скрипт настройки безопасности: ```bash /usr/bin/mysql_secure_installation ``` Не буду приводить весь вывод работы этого скрипта, там все достаточно просто и понятно. Сначала задаем пароль для root (текущий пароль после установки пустой), потом удаляем анонимных пользователей, отключаем возможность подключаться root удаленно, удаляем тестового пользователя и базу. Файл настроек mysql/mariadb лежит в /etc/my.cnf. Для обычной работы достаточно настроек по-умолчанию. Но если вы решите изменить их, не забудьте перезапустить службу баз данных. Перезапуск mariadb/mysql в CentOS 7: ```bash systemctl restart mariadb ``` На этом все. Базовый функционал web сервера на CentOS 7 настроен.