Настройка LAMP-сервера (Linux, Apache, MariaDB/MySQL, PHP) в CentOS/RHEL 7


LAMP — акроним, обозначающий набор (комплекс) серверного программного обеспечения, широко используемый во Всемирной паутине. LAMP назван по первым буквам входящих в его состав компонентов:

  • Linux — операционная система Linux;
  • Apache — веб-сервер;
  • MariaDB/MySQL — СУБД;
  • PHP — язык программирования, используемый для создания веб-приложений (помимо PHP могут подразумеваться другие языки, такие как Perl и Python).


 

Установка веб-сервера Apache

Установим пакет httpd, запустим его и внесём необходимые изменения в firewall для его работы:

Открываем в браузере ссылку http://example.com/ и убеждаемся что веб-сервер работает.
 
Теперь настроим HTTPS в Apache:
Установим специальный модуль для Apache и настроим его (SSL-сертификаты, необходимые для работы модуля, будем использовать уже имеющиеся, которые мы создавали в этой заметке):

Открываем в браузере ссылку https://example.com/ и убеждаемся что веб-сервер работает по протоколу HTTPS.
 

Установка MariaDB (MySQL)

Установим необходимые пакеты, запустим и настроим SQL-сервер:

Не обращаем внимание на ошибку:

она ни на что не влияет, и в следующих версиях этой ошибки уже не будет. Вот описание бага на сайте разработчиков.
Если планируется подключаться к данному SQL-серверу снаружи, нужно разрешить подключения к порту 3306 в фаерволе и настроить MariaDB на работу на этом порту:

 

Установка PHP

Установим и изменим кое-какие настройки по умолчанию:

Открываем в браузере ссылку https://example.com/phpinfo.php и убеждаемся что PHP работает. Убедившись что PHP работает – удаляем тестовый скрипт:

 

Установка phpMyAdmin

Сначала устанавливаем phpMyAdmin:

Затем прописываем IP-адреса с которых будет разрешено подключение к phpMyAdmin:

Теперь включаем в SELinux разрешение веб-серверу делать сетевые подключения и отправку почты:

Перезагружаем веб-сервер:

Открываем в браузере ссылку https://example.com/phpMyAdmin/setup/ и настраиваем phpMyAdmin.
В первом окне «Обзор», в блоке «Сервера» нажимаем на кнопку «Новый сервер». Заполняем поля «Пользовательское имя сервера», «Хост сервера», выбираем тип соединения и нажимаем на кнопку «Применить». Если нужно добавить несколько серверов в список – можно повторить этот пункт несколько раз.
После этого переключаемся в окно «Настройки», открываем вкладку «Безопасность» и ставим галочку напротив пункта «Предпочитать SSL соединение» и нажимаем на кнопку «Применить».
Теперь в окне «Обзор», в блоке «Конфигурационный файл» выбираем язык по умолчанию и нажимаем на кнопку «Сохранить».
Теперь сохраняем конфигурацию в веб-браузере и переносим её в каталог /etc/phpMyAdmin, после чего папку config удаляем:

 

Создание виртуального хоста в Apache

Установим cronolog, для того чтобы можно было логи писать в файлы с именами access_log.YYYY-MM:

Сначала подготовим Apache к работе с виртуальными хостами в стиле Debian:

Для того чтобы отключить виртуальный хост – нужно будет выполнить команду:

А для того чтобы включить выключенный виртуальный хост – нужно будет выполнить команду:

Чтобы это немного автоматизировать, создадим в .bashrc пару алиасов:

Теперь для отключения виртуального хоста достаточно выполнить команду:

А для включения:

Теперь создадим конфигурационный файл нашего виртуального хоста:

Если HTTPS не нужно – вторую часть файла можно не писать.
Так же создадим необходимые папки и тестовый файл index.html:

А сейчас сделаем так, чтобы Apache перечитал конфигурационные файлы:

После этих действий можно пробовать открыть в браузере ссылку http://vhost.example.com/.
 
Необходимо помнить о нюансах настройки дефолтных алиасов для веб-приложений CentOS с виртуальными хостами. Рассмотрим на примере phpMyAdmin. После установки phpMyAdmin, в файле /etc/httpd/conf.d/phpMyAdmin.conf присутствуют такие строки:

Вполне себе нормальные алиасы. Но проблема в том, что если их оставить в этом файле, то они будут работать для всех виртуальных хостов разом! Чтобы этого избежать, в этом файле эти алиасы нужно закомментировать и перенести их в отдельный конфигурационный файл:

Обратите внимание на расширения файла, оно специально не .conf, а .cnf, в противном случае содержимое конфига подтянется там где не нужно. А для точечного включения этих алиасов будем в нужные места добавлять такую строку IncludeOptional conf.d/aliases.cnf. Прежде всего добавим её в файл /etc/httpd/conf.d/vhost.conf:

а так же в файл /etc/httpd/conf.d/ssl.conf (для того чтобы алиасы так же работали и через https):

Если же потребуется включить алиасы для какого-нибудь виртуального хоста – это можно сделать, добавить IncludeOptional в нужный нам блок .. в соответствующем конфигурационном файле.
 
После переноса алиасов не забудьте выполнить команду:

Comments

  1. Здравствуйте.
    Подскажите, где в Centos 7 находятся настройки IfModule prefork.c?
    В Centos 6 в файле /etc/httpd/conf/httpd.conf
    были строки

    StartServers 8
    MinSpareServers 5
    MaxSpareServers 20
    ServerLimit 256
    MaxClients 256
    MaxRequestsPerChild 4000

    В CentOS 7 нет этого блока в файле конфигурации.по адресу
    /etc/httpd/conf/httpd.conf
    Здесь тоже ничего похожего не нашел.
    /etc/httpd/conf.modules.d/

  2. Не работает!

    # chcon -u system_u /etc/httpd/vhost.d
    chcon: не удалось применить частичный контекст к не помеченному файлу «/etc/httpd/vhost.d»

    Это то же не работает!

    IncludeOptional vhost.d/vhost-*

    httpd: Syntax error on line 353 of /etc/httpd/conf/httpd.conf: Syntax error on line 4 of /etc/httpd/conf.d/vhost.conf: Syntax error on line 13…g closing ‘>’

  3. «Затем прописываем IP-адреса с которых будет разрешено подключение к phpMyAdmin:
    1
    $ nano -w /etc/httpd/conf.d/phpMyAdmin.conf» — можно подробнее что нужно исправить?

    • Что-нибудь типа:
      <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
      Require ip 11.22.33.44
      </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
      Allow from 11.22.33.44
      </IfModule>
      </Directory>

  4. Всё прокатило. При открытии сайта https зачёркнуто. В сведениях написано — Обнаружены проблемы с цепочкой сертификатов сайта (net::ERR_CERT_AUTHORITY_INVALID). Как исправить? Файл pem генерировал с помощью скрипта с этого сайта.
    В файле ssl.conf прописал путь к pem файлу.

  5. $ nano -w /etc/httpd/conf.d/vhost.conf
    нет такого файла centos 7.2

  6. настраиваю в centos 7.2
    Создание виртуального хоста в Apache
    vi /etc/httpd/conf.d/vhost.conf
    файла такого нет

  7. я новичок в настройке linux серверов.возможно я что то не понимаю

    проблемы начались после
    «Сначала подготовим Apache к работе с виртуальными хостами в стиле Debian»

    $ mkdir /etc/httpd/vhost.d
    $ chcon -u system_u /etc/httpd/vhost.d
    $ nano -w /etc/httpd/conf.d/vhost.conf

    в пустой файл вношу только эти значения?

    DocumentRoot «/var/www/html»

    IncludeOptional vhost.d/vhost-*

    далее выполняю все до systemctl reload httpd.service с заменой vhost.example.com на vhost.mail.test.local

    однако зайти на адрес http://vhost.mail.test.local я не могу

    заранее признателен за помощь

    • В файле 4 строчки, в вашем комментарии 2.

  8. извиняюсь там 4 строчки в файле,ошибка моего коментария

  9. Aheron Aeron
    09.08.2016 - 16:08

    на http://mail.test.local выдает страницу
    testing 123
    This page is used to test the proper operation of the Apache HTTP server after it has been installed. If you can read this page it means that this site is working properly. This server is powered by CentOS.

    а на страницу http://vhost.mail.test.local

    Не удается получить доступ к сайту
    Не удается найти DNS-адрес сервера vhost.mail.test.local

    • Не удается найти DNS-адрес сервера vhost.mail.test.local
      Казалось бы, при чём здесь апач..

  10. Aheron Aeron
    09.08.2016 - 16:22

    извините пожалуйста.очень стыдно

  11. а можно объяснить в чем проблема? а то такая же ошибка появляется

  12. >>Не удается найти DNS-адрес сервера vhost.mail.test.local
    >>Казалось бы, при чём здесь апач..
    по етому топику
    есть виртуалка с centos все работает, но при создании виртуальних хостов — ошибка в DNS
    и сам вопрос «причем здесь апач», можно в деталях?

    • Для имени сервера, которое вводите в браузере нет сопоставления имя-адрес в DNS-сервере.
      Браузер по имени не может определить адрес сервера и не знает куда подключаться. До апача дело даже не доходит.

  13. спасибо за быстрый ответ 🙂 ето типа все в CNAME записях? в домашней сети по Вашим инструкциям все работает на пять, есть домейн, субдомейны. а проблема появилась в корпоративной сети, где стоит cisco firewall. и просто непонятно где копаться

  14. https://vhost.example.com/myhost — нормально отрабатывает,
    но и https://example.com/myhost тоже нормально отрабатывает в ту же директорию… это нормально?

Добавить комментарий

Этот сайт использует Akismet для борьбы со спамом. Узнайте как обрабатываются ваши данные комментариев.