Оптимизация apache centos 7

Обновлено: 06.07.2024

Комплекс LAMP – это набор программ с открытым исходным кодом, которые обычно устанавливаются вместе для обеспечения функционирования динамических веб-сайтов и веб-приложений на сервере. Фактически этот термин является аббревиатурой: операционная система Linux, веб-сервер Apache, данные сайта хранятся в базе MySQL (MariaDB), а динамический контент обрабатывается PHP.
В данном руководстве описана установка комплекса LAMP на VPS с CentOS 7. CentOS выполняет наше первое требование – это операционная система Linux.

Подготовка

Прежде чем начать работу с данным руководством, вам потребуется отдельный пользовательский аккаунт без root-прав на сервере. Для этого нужно зайти как root, создать нового пользователя при помощи команды adduser и внести его в группу wheel. По умолчанию в CentOS 7 члены этой группы могут пользоваться командой sudo, которая позволяет при необходимости выполнять какие-либо действия с привилегиями root не выходить из обычной учетной записи и заходить как root, а выполнять отдельные команды как суперпользователь. Для этого нужно просто ввести sudo перед командой, при выполнении которой требуются эти привилегии.

Шаг 1 – установка Apache

В настоящее время Apache – наиболее популярный веб-сервер в мире, поэтому это прекрасный выбор по умолчанию для хостинга веб-сайта.
Apache можно легко установить при помощи yum, менеджера пакетов CentOS. Менеджер пакетов позволяет нам без затруднений устанавливать большую часть программ из репозитория CentOS. Для выполнения нашей задачи начнем со следующих команд:

Так как мы пользуемся командой sudo, эта операция выполняется с root-правами. Для подтверждения намерений она запросит ваш обычный пароль пользователя.
Затем ваш веб-сервер будет установлен.
После установки запустите Apache на вашем VPS:

Вы сразу можете проверить, что все идет по плану, набрав IP-адрес вашего сервера в своем веб-браузере:

Вы увидите веб-страницу CentOS 7 Apache по умолчанию, которая размещена для информации и тестирования. Она должна выглядеть примерно следующим образом:


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

Установка виртуальных хостов на Apache

examplе.сom – имя домена, который мы хотим отображать на нашем VPS.

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

Где переменная $USER – текущий пользователь системы. Теперь он является владельцем поддиректории public_html, где мы будем хранить контент.

Также для корректного отображения страниц нужно немного изменить права доступа, чтобы разрешить чтение общей веб-директории, а также всех файлов и директорий в ней:

Теперь все необходимые права доступа заданы, и пользователь сможет создавать контент в нужных папках. Создадим файл index.html, идентифицирующий наш домен. Откроем его в редакторе при помощи следующей команды:

В этом файле создадим простой HTML-документ с данными о сайте, которому принадлежит эта страница:

Сохраните и закройте файл. Теперь у вас есть все необходимые страницы для проверки конфигурации виртуального хоста. Создадим файл, в котором определяется его конфигурация и задается, как веб-сервер Apache будет отвечать на запросы различных доменов. Для начала создадим директорию, в которой будут храниться файлы наших виртуальных хостов (sites-available), а также директорию, которая сообщает Apache, что виртуальный хост готов для отображения посетителям (sites-enabled, будет содержать символические ссылки на виртуальные хосты, готовые к публикации).

Затем нам нужно указать, чтобы Apache искал виртуальные хосты в директории sites-enabled. Для этого мы отредактируем главный файл конфигурации Apache:

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

Должно получится примерно следующее


Теперь можно создать файл для первого виртуального хоста. Откроем его в редакторе с root-правами:

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

Наконец, нужно указать корневую директорию публично доступных веб-документов, а также определить, куда записывать логи ошибок и запросов для данного сайта:

В итоге минимальная конфигурация выглядит так


Теперь активируем файл виртуального хоста, чтобы Apache представлял его посетителям. Создадим символическую ссылку для виртуального хоста в директории sites-enabled:

После этого перезапустите Apache, чтобы изменения вступили в силу:

Можно проверить правильность настройки – просто ввести имя домена в адресной строке браузера:


Естественно у вас должны быть корректно настроены DNS сервера, или для тестов просто пропишите имя хоста и ip адрес сервера в вашем файле hosts.

Вы должны увидеть страницу следующего вида:


Аналогичным образом можно создать и настроить виртуальные хосты для других доменов.

Шаг 2 – установка MySQL (MariaDB)

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

Для получения и установки программы мы снова можем воспользоваться yum. На этот раз мы также установим несколько вспомогательных пакетов, которые помогут нам связать компоненты друг с другом.

После завершения установки нужно запустить MariaDB следующей командой:

Теперь, когда наша база данных MySQL запущена, нам потребуется запустить простой скрипт безопасности, который изменит некоторые опасные значения параметров по умолчанию и немного ограничит доступ к нашей базе данных. Запустите интерактивный скрипт следующей командой:

У вас будет запрошен root-пароль для MySQL. Так как вы только что установили MySQL, то скорее всего у вас его нет, поэтому просто нажмите Enter. Затем вас спросят, хотите ли вы его задать. Введите Y (yes) и следуйте указаниям:

На остальные вопросы нужно просто нажимать Enter, чтобы принять значения по умолчанию. Будут удалены примеры пользователей и баз данных, отключен удаленный вход с root-правами, а затем новые правила будут загружены, и MySQL немедленно примет сделанные нами изменения.

Последнее, что требуется – автозапуск MariaDB при загрузке. Для этого воспользуйтесь следующей командой:

Теперь система управления базами данных работает, и можно перейти к следующему шагу.

Шаг 3 – установка PHP

PHP – компонент нашего пакета, который будет обрабатывать код для отображения динамического контента. Он может запускать скрипты, подключаться к базам данных MySQL для получения информации и передавать обработанный контент нашему веб-серверу для отображения.

Для воспользуемся yum. Мы также инсталлируем пакет рhр-mysql:

После этого инсталляция должна пройти без проблем. После установки необходимо выполнить перезапуск Apache:

Установка модулей PHP

Для расширения функционала PHP можно опционально установить ряд дополнительных модулей. Чтобы узнать доступные модули и библиотеки для PHР, введите в консоли:

Будет выдан список опциональных компонентов, доступных для установки, с коротким описанием каждого из них:


Более подробную информацию о каждом модуле можно найти в Интернете или прочитать развернутое описание пакета по команде:

Будет выдано много данных, более подробное описание функций модуля находится в поле Description.

Например, чтобы узнать, для чего нужен модуль php-fpm, введите в консоли:

В большом объеме разной информации вы увидите подобный текст:


Чтобы установить несколько модулей, можно ввести их названия, разделенные пробелами, после команды yum install:

Установка и настройка комплекса LAMP завершена. Теперь нужно проверить работу PHP.

Шаг 4 – тестирование работы PHP на веб-сервере

Чтобы проверить, правильно ли наша система настроена для обработки PHP, можно создать очень простой PHP-скрипт. Мы можем назвать этот скрипт info.php и разместить его в корневой директории нашего веб-ресурса (для простоты объяснения здесь мы не будем рассматривать виртуальные хосты, настроенные ранее):

Откроется пустой файл. Нам нужно ввести в него следующий текст, который представляет собой рабочий код PHP:

После этого закройте и сохраните файл.

Теперь мы можем проверить, правильно ли наш веб-сервер отображает контент, генерируемый PHP-скриптом. Для этого нужно просто открыть эту страницу в веб-браузере. Вам нужен следующий адрес:

Должна открыться страница примерно следующего вида:


Она предоставляет информацию о вашем сервере с точки зрения PHP и полезна для отладки и проверки правильности применения настроек. Если страница видна, то все работает правильно.

Скорее всего, после проверки вам потребуется удалить этот файл, потому что он может предоставить информацию о вашем сервере неавторизованным пользователям. Для этого нужно выполнить следующую команду:

При необходимости снова получить эту информацию данную страницу всегда можно создать повторно.

Заключение

Как мы видим установить и настроить свой собственный WEB-сервер очень просто и не представляет большой сложности. После установки комплекса LAMP есть большое количество вариантов дальнейших действий. Он предоставляет вам платформу для установки на сервер большинства типов веб-сайтов и веб-приложений.

Если вы нашли ошибку, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter.

Почему тормозит CentOS 7 или CloudLinux 7

Видно как CentOS 7 или CloudLinux 7 тормозит

Такие данные можно увидеть с помощью программы iotop.

Ничего не менялось при использовать PHP как suPHP или FastCGI , и даже c модулем mod_lsapi.

Долгое исследование проблемы и обращение в поддержку CloudLinux открыли завесу тайны.

Что делать если тормозит CentOS 7 или CloudLinux 7?

Вы никогда не поверите откуда появилась проблема. Оказывается о нас позаботились разработчики ядра. Как так , ведь надо экономить энергию на планете и заботить об экологии , значит надо включить для процессора и дисковой системы экономичный режим по умолчанию.

Если вы наберете

Вы вдруг обнаружите откуда идут тормоза на CloudLinux или Centos. а ларчик открывается просто.

Ваш процессор работает в режиме сохранения энергии , то есть он все время понижает частоту процессора , что бы он якобы не сильно грелся и зря не расходовал энергию.

  • powersave — энергосберегающий ( вообще всё тормозит , всегда. Часто та постоянно внизу.)
  • ondemand — меняет частоту по требованию ( причем тормозит с IO wait хотя по идеи должен поднимать когда идет нагрузка)
  • performance — максимальная частота всегда.
  • и другие , которые нам не интересны.

О других режимах можно почитать тут.

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

В CentOS 7 и Cloudlinux 7 есть отличная утилита , которая решает эту проблему. И задаёт постоянно максимальный режим.

Эта демон Tuned. По умолчанию он работает в режиме powersave или ondemand. Что для сайтов или хостинга грозит постоянным тормозами или медленной работой сайтов , вплоть до подвисания Apache сервера. Почему так сделано? Мне вообще это не понятно. Подробно о его проблемах можно почитать тут.

Поэтому мы смело устанавливаем максимальный режим.

После чего получаем на нашем сервере максимальную производительность и никаких тормозов.

Есть еще один узкий момент. Это драйвер intel_pstate. По словам поддержи CloudLinux он так же создаёт проблемы , поэтому если вы видите его вот так:

То можно смело его отключать.

Немного информации об этом драйвере можно почерпнуть информацию на этой странице.

Редактируем фаил /etc/default/grub

и добавляем в строку GRUB_CMDLINE_LINUX=" тут что то"

Например: GRUB_CMDLINE_LINUX word-spacing:nowrap;">что-то intel_pstate=disable rhgb quiet"

Пересоздаём новый grub

Всё. Надеюсь теперь ваша жизнь станет веселее , а клиенты не будут страдать от диких тормозов сайтов.

P. S. Если у вас Ubuntu или Linux Mint и тому подобное , то тоже можно ускорить , и избавиться от тормозов О. С. Особенно это актуально если у вас домашней комп на этой системе. Надо установить tuned-adm и использовать его. Вся информация на этой странице.

Для тех кого мало памяти на сервер , и он всё равно , иногда , наблюдаете такую проблему.

Если у вас мало памяти на сервере с Centos или CloudLinux , vps или vds , то cache с буферором будут сжирать у вас память. По идеи при нуждах программ они должны скидывать на диск и высвобождать часть. Но как показывает опыт , этот бред ядра Centos ни черта нормально не работает и похоже просто тупо не успевает сбрасывать лишний кэш. Часто может дойти даже до зависания.

Поэтому что бы высвободить память мы делаем такую вещь.

В файле /etc/sysctl.conf вносим:

После синхронизируем данные кэша и диска , очистим кэш и сохраним параметры:

После чего мы вносим в крон

Подробно про чистку кэша и почему это приходится делать описано тут. Так же обратите внимание , что такая чистка не рекомендуется , так как из-за некоторых проблем вы рискуете создать проблемы с потерями каких либо данных. Подробно описано в источнике. Однако на слабых машинах я пока не вижу другого выхода. Если вы его знаете , напишите в комментариях.

На этом всё. Удачи с вашим сервером!

Если вам понравилась статья, и вы хотите быть в курсе новых статей , не забудьте подписаться на нашу группу ВКонтакте или другие социальные сети.

Если у вас есть желание научиться строить и поддерживать высокодоступные и надежные системы, рекомендую познакомиться с онлайн-курсом «DevOps практики и инструменты» в OTUS. Курс не для новичков, для поступления нужно пройти . Данная статья устарела. Читайте новую актуальную статью по настройке web сервера apache на centos 8.

Данная статья является частью единого цикла статьей про сервер Centos.

Web сервер на CentOS 7

Подопытным сервером будет выступать виртуальная машина от ihor, характеристики следующие:

Процессор 2 ядра
Память 8 Gb
Диск 150 Gb SSD

Это кастомная настройка параметров. Они не оптимальны по цене, но мне были нужны именно такие.

Хочу сразу уточнить, что разбираю базовую дефолтную настройку. Для улучшения быстродействия, повышения надежности и удобства пользования нужно установить еще несколько инструментов, о чем я расскажу отдельно. В общем случае для организации веб сервера будет достаточно того, что есть в этой статье.

Если у вас еще нет сервера, то вам надо выполнить установку CentOS 7. А если сервер уже установлен, то не забудьте его настроить. Рекомендую обратить внимание именно на настройку, так как там много полезной информации, которую в рамках этой статьи я не даю - обновление системы, настройка фаервола, установка редактора и многое другое.

Настройка apache в CentOS 7

Теперь приступим к установке apache. В CentOS 7 это делается очень просто:

Добавляем apache в автозагрузку:

Запускаем apache в CentOS 7:

Проверяем, запустился ли сервер:

установка apache на centos 7

Теперь займемся настройкой apache. Я предпочитаю следующую структуру веб хостинга:

Создаем подобную структуру:

Перезапуск apache в centos

Теперь делаем restart apache :

Дальше в винде правим файл hosts , чтобы обратиться к нашему виртуальному хосту. Добавляем туда строчку:

где 192.168.1.25 ip адрес нашего веб сервера.

Проверка apache в centos 7

Сразу же обращу ваше внимание на настройку ротации логов виртуальных хостов. Частенько бывает, что если сразу не настроишь, потом забываешь. Но если сайт с хорошей посещаемостью, то логи будут расти стремительно и могут занять очень много места. Лучше настроить ротацию логов веб сервера сразу же после создания. Сделать это не сложно.

Мы добавили одну строку в самое начала файла. Теперь логи всех виртуальных хостов в папке /web будут ротироваться по общему правилу.

В принципе, простейший веб сервер уже готов и им можно пользоваться. Но вряд ли сейчас найдутся сайты со статическим содержимым, которым достаточно поддержки только html. Так что продолжим нашу настройку.

Установка php в CentOS 7

Для поддержки динамического содержимого сайтов выполним следующий шаг. Установим php в CentOS 7:

И следом еще несколько полезных компонентов. Установим популярные модули для php:

Выполним перезапуск apache:

Создадим файл в директории виртуального хоста и проверим работу php:

centos php

Вы должны увидеть вывод информации о php. Если что-то не так, возникли какие-то ошибки, смотрите лог ошибок виртуального хоста, php ошибки будут тоже там.

Где лежит php.ini

После установки часто возникает вопрос, а где хранятся настройки php? Традиционно они находятся в едином файле настроек. В CentOS php.ini лежит в /etc, прямо в корне. Там можно редактировать глобальные настройки для все виртуальных хостов. Персональные настройки каждого сайта можно сделать отдельно в файле конфигурации виртуального хоста, который мы сделали раньше. Давайте добавим туда несколько полезных настроек:

Добавляем в самый конец, перед </VirtualHost>

Для применения настроек нужно сделать restart apache. Теперь в выводе phpinfo можно увидеть изменение настроек.

Обновление до php 5.6 в CentOS 7

В нашем примере мы установили на CentOS 7 php 5.4 из стандартного репозитория. А что делать, если нам нужна более новая версия, например php 5.6? В таком случае нужно выполнить обновление php.

Теперь обновляем php 5.4 до php 5.6:

centos 7 php 5.6

Отлично, мы обновили php до версии 5.6.

Установка MySQL в CentOS 7

Как я уже писал ранее, сейчас все большее распространение получает форк mysql - mariadb. Она имеет полную совместимость с mysql, так что можно смело пользоваться. Я предпочитаю использовать именно ее.

Устанавливаем mariadb на CentOS 7:

Добавляем mariadb в автозапуск:

Проверяем, запустилась или нет:

Обращаю внимание, что она даже в системе отображается как сервис mysqld . Теперь запускаем стандартный скрипт настройки безопасности:

Не буду приводить весь вывод работы этого скрипта, там все достаточно просто и понятно. Сначала задаем пароль для root (текущий пароль после установки пустой), потом удаляем анонимных пользователей, отключаем возможность подключаться root удаленно, удаляем тестового пользователя и базу.

Файл настроек mysql/mariadb лежит в /etc/my.cnf. Для обычной работы достаточно настроек по-умолчанию. Но если вы решите изменить их, не забудьте перезапустить службу баз данных.

Перезапуск mariadb/mysql в CentOS 7:

На этом все. Базовый функционал web сервера на CentOS 7 настроен.

Если вам нужен phpmyadmin воспользуйтесь моим подробным руководством по установке и настройке phpmyadmin на centos 7.

Буду рад замечаниям и комментариям по теме статьи. Напоминаю, что данная статья является частью единого цикла статьей про сервер Centos.

Онлайн курсы по Mikrotik

  • Знания, ориентированные на практику;
  • Реальные ситуации и задачи;
  • Лучшее из международных программ.

Помогла статья? Подписывайся на telegram канал автора

Анонсы всех статей, плюс много другой полезной и интересной информации, которая не попадает на сайт.

Автор Zerox

93 комментария

Небольшое дополнение - в конце скрипта iptables команда должна быть service iptables save
Без этого после перезагрузки сервера будет сюрприз в виде откатившихся в исходное настроек iptables (возможно эта грабля работает только у RUVDS)

Вы о каком скрипте говорите? Я во всех своих скриптах делаю сохранение правил в /etc/sysconfig/iptables. В Centos из этого файла берутся настройки iptables во время загрузки. Это типовое поведение сервера. Я сотни серверов настраивал на centos и везде это так работает, если специально ничего не менять.

Шаблон может какой-то кастомизированный используют.

Тут что угодно может быть. Прямо указана ошибка - 110: Connection timed out. Невозможно подключиться, соединение отваливается по таймауту. Подключение вот сюда 192.168.0.1:8888 не проходит. Разбирайтесь, почему на этом порту не отвечает apache.

Хорошая статья. Есть одно маленькое замечание. После установки апача было бы правильно намекнуть на фаирвол.

Спасибо автору.
Все шаги на Вашем примере сайта. Это очень продуктивно.
Понимаешь как это работает.
Если что-то не получается, смотри в комментах.

Данная инструкция не работает. Автор не понимает о чем пишет = типичный рерайтер, который повыдергивал инфы из интернета для уникальности.

Подскажи еще, откуда я рерайчу, чтобы наполнить свой сайт уникальными авторскими статьями :)))

Видимо самоизоляция так пагубно влияет на мозг..
Автору спасибо, отличные маны отличный сайт

Здравствуйте.
В чем разница между
chown -R apache. /web
и
chown -R apache /web
?

Первое аналог команды:
chown -R apache:apache /web
С точкой просто короче запись.

Спасибо! Отличная статья)

На рутрекере выложил готовую виртуалку для ESXI с nextcloud на базе центоси7

Очень полезная статья. Прям все по шагам получилось сделать. Большое спасибо!

Сюда - что бы всем было видно. Прошу прощения, если кому помешал.
Моя ошибка - в правилах iptables(по вышенаписанным статьям), скопировал предыдущее не посмотрев содержание.
открывать порт для сервера нужно правилом в /etc/iptables_rules.sh:
$IPT -A INPUT -i $WAN -p tcp --dport 80 -j ACCEPT
а не
$IPT -A INPUT -i $WAN -p udp --dport 80 -j ACCEPT

В этой статье подразумевается, что selinux отключен. Его настройка отдельная история. У меня так и не дошли руки ее описать.

Нашел ошибку. "" Тут каким-то чудным образом порт 80 не вписал! :D
Zerox, спасибо за статьи. Изучаю Linux по ним =)

Какая ошибка в браузере?

На локальном при подключению по адресу: "Сервер не найден" на на компе в сети не удаётся: "получить доступ к сайту"

Ага, Iptables отключил и заработало, хотя вроде настраивал по вашей же статье)

Сделал всё по инструкции, но апач открывает только по ip адресу и то только на локальной машине, по адресу выдаёт ошибку

Дальше логично посмотреть, что за ошибка и подумать, с чем она связана. Заодно посмотреть логи.

На ступени: Перезапуск apache в centos
Ошибка:
[root@localhost

Вроде всё просто и centos 7 minimal читый.
Помогите новичку.

Неправильно настроил сеть. Исправился.

Только хотел написать, что надо сеть проверить :)

А как обновить до последней версии Apache?

Спасибо! Весьма удобное руководство, всё прошло как по маслу. Правда я устанавливал PHP 7.1, наверное, уже есть смысл отредактировать это руководство для установки современной версии PHP.

В самом начале есть ссылка на свежую статью, как раз с php 7.1.

Действительно, проглядел. Спасибо Вам за полезные материалы, уже вижу, что есть и другие полезные статьи, которые надо бы прочитать.

Мне тут стала любопытна тема Антивируса на веб-сервере. Linux'у в большинстве плевать на вирусню, но вот веб сервису в частности не очень. Что посоветуете?

Таких антивирусов не существует. Есть некоторые средства для ручной проверки файлов сайта на наличие вирусов, но это не полноценный антивирус. Пример такого скрипта - ai-bolit. Защита веб сервера это комплекс мер. У меня есть в планах написание статьи по настройке максимально защищенного веб сервера, но пока это только планы, даже черновика нет.

Для начала огромное СПАСИБО за статьи! Много полезного и интересного для начинающих линуксоидов. Уже на основе этой статьи запустил чат Mattermost, а также Zabbix. Все работает, но теперь воюю с Nextcloud'ом. Вроде запустился и работает, но хочеться что бы пользователи были не локальные, а Active Directory. Поставил компонент php-ldap и обновил его до версии 5.6. Но Nextcloud'у все равно чего то не хватает, AD видет, а группы и пользователей нет:( говорит чего-то ему не хватает, а чего ХЗ.

К слову, я успешно прикрутил Nexcloud к AD

Это стабильный продукт, его можно в продакшене использовать?

А это предстоит еще проверить)) Он у меня готов к использованию, но пака что я его не запускал в массы.

На этапе настроек и знакомства в основном функционале глюков не заметил. Есть куча дополнений которые можно установить, но их функционал это отдельная история. А так гонять под нагрузкой нужно в несколько пользователей, а не в одно лицо.

Добрый день.
Подскажите в чём может быть проблема, установил nginx, но когда захожу, то пишет что:

The requested URL /nginx was not found on this server.

я ввожу IP адрес сервера пишет apache настроен(

не обратил внимания ошибка выскочила
Job for nginx.service failed becouse th control process exite with errore code
See "systemctl status nginx.service" and journalctl -xe@ for details

Сам нашел ответ на свой вопрос.
В CentOS 7 по умолчанию в php.ini прописано short_open_tag=Off, нужно было переключить в "on" чтоб заработал php код.

Стесняюсь спросить, какая версия MariaDB у Вас устанавливается представленным способом - бета 10.3 или стабильная 10.2?

Добрый день! Прописал новый путь к сайту, создал файлик site1.conf, но после перезапуска апаче выдаёт ошибку
Job for httpd.service failed because the control process exited with error code. See "systemctl status httpd.service" and "journalctl -xe" for details.
В логах написанно:
ah00170 caught sigwinch, shutting down gracefully.
Подскажите в чём может быть проблема

Гугл выдает много вариантов решения этой проблемы. Предлагаю им воспользоваться. Заочно я все равно ничем не помогу.

Да, спасибо я разобрался, но теперь возникла другая проблема, я добавил сайт в новую дерикторию, создал для него файл - конфиг, но выбивает тестовая страница апаче

А есть у вас на сайте как это сделать?

Так в этой же статье и рассказано. Но нужно хоть какое-то понимание происходящего. Если совсем ничего не понятно, то лучше freepbx и сайты разнести по разным серверам. Тут все же нужен некоторый опыт и навык, чтобы все аккуратно сделать, и чтобы работало :)

Значит будем разбираться. Все таки первую неделю работаю с линуксом. Раз смог поднять два сервера в разных городах и настроить между ними атс, то и с этим разбирусь. А за сайт спасибо. Очень много почерпнул от сюда.

Здравствуйте. Установил я сначала FreePBX, все у меня заработало. Потом решил установить веб сервер. И получается загвоздка. Теперь через ip я захожу на apache, а на freepbx не могу зайти. Я так понимаю это из-за того, что они находятся на одном порту (*:80).
Как мне теперь настроить, что бы работал и apache и freepbx? Ну это относится и к другим сайтам (Если я создам еще несколько сайтов, то нужно наверное прописывать отдельно каждый сайт). Подскажите пожалуйста

Нужно настраивать виртуальные хосты, каждый сайт, в том числе и freepbx - отдельный виртуальный хост.

Здравствуйте! У Вас статья по установке LAMP на базе CentOS.. Почему выбор пал на данный дистрибутив, почему не Debian?

Там на этапе когда у вас уже можно открыть тестовую страницу апача с 123, нужно было еще открыть 80 порт в iptables, т.к. по умолчанию в 7 centos врядли он будет открыт.
команда:
iptables -I INPUT -p tcp —dport 80 -j ACCEPT
и команда:
iptables-save>/etc/sysconfig/iptables

Я в самом начале дал ссылку на статью с настройкой сервера и сделал акцент, что настройка firewall рассматривается там. А так конечно верно, если не открыть 80-й порт, ничего не заработает.

Здравствуйте, можете мне помочь?
У меня следующая проблема: создал несколько Виртуальных хостов, но при обращение на любой из них открывается дефолтовый сайт bиз этого каталога /var/www/html.
с DNS настройками все правильно.

А чем тут заочно поможешь? Где-то ошибка, виртуальные хосты не работают. Надо внимательно проверить все конфиги.

Скайп есть у Вас?

Подскажите новичку: я установил апач и создал на нем свой сайт - как настроить доступ к нему с других пк в локальной сети без редактирования по отдельности на каждом пк файла hosts?

Только настройкой dns сервера, который обслуживает эти компьютеры. В него надо добавить запись о вашем сайте.

Не подскажете,что делать со следующей проблемкой. По дури решил переустановить mariadb, с удалением каталога /var/lib/mysql В итоге выдается ошибка при запуске,что mkdir не может создать каталог /var/lib/mysql, нет доступа. запускаю от рута. На другом сервере смотрел права, каталог создан группой mysql, пользователь mysql, я вручную создал каталог с такими же правами. В итоге та же ошибка.

Пробовать надо разные варианты. С правами где-то ошибка. Либо на самом каталоге, либо по пути к нему. Создай сам пустой каталог с нужными правами.

А так за мануал спасибо :)

Да, спасибо за подсказку. Так можно сделать и я знаю об этом. В статьях стараюсь использовать конструкции как можно проще, чтобы было всем понятно, что я делаю.

Можно вообще сократить мануал и сделать немного поудобнее привязки:

Установка php в CentOS 7
Для поддержки динамического содержимого сайтов выполним следующий шаг. Установим php в CentOS 7:

Отредактировал комментарий. Убрал конфиг, так как из него часть символов не перенеслись во время копирования. В комментариях не получится вставить конфиги со стрелками, в которые параметры директории указываются в конфигах apache.

Тогда лучше все убрать, таким сокращением вы убрали важные детали , что указаны в конфиге

Веб-сервер, настроенный по данной инструкции можно будет использовать для размещения собственных сайтов в локальной сети или сети Интернет. Данная инструкция проверена для CentOS 7.

Общая настройка системы

Установка пакетов

1. Обновляем CentOS:

2. Устанавливаем репозиторий EPEL и пакет для загрузки:

yum install epel-release wget

Время

1. Устанавливаем часовой пояс:

timedatectl set-timezone Europe/Moscow

* данной командой мы установим часовой пояс по московскому времени.

2. Устанавливаем и запускаем службу для автоматической синхронизации времени:

yum install chrony

systemctl enable chronyd --now

Настройка безопасности

1. Отключаем SELinux:

sed -i "s/SELINUX=enforcing/SELINUX=disabled/" /etc/selinux/config

* первая команда редактирует конфигурационный файл, чтобы SELinux не запускался автоматически, вторая — отключает его разово. Подробнее читайте статью Как отключить SELinux.

2. Открываем необходимые порты в брандмауэре:

firewall-cmd --permanent --add-port=/tcp

firewall-cmd --permanent --add-port=/tcp

* 80, 443 и 8080 порты для веб-сервера; 20, 21 порты нужны для работы FTP; 60000-65535 также необходимы для работы FTP (динамические порты для пассивного режима); последняя команда перезапускает firewalld, чтобы применить новые правила. Подробнее про настройку firewalld.

Установка NGINX

yum install nginx

Внесем небольшую корректировку в файл nginx.conf:

* на практике, может встретиться ошибка could not build server_names_hash, you should increase server_names_hash_bucket_size: 32. Она возникает при большом количестве виртуальных серверов или если один из них будет иметь длинное название. Данная строка в конфиге исправит ситуацию.

Разрешаем автозапуск сервиса и запустим его:

systemctl enable nginx --now

Проверим, что веб-сервер работает. Для этого открываем браузер на другом компьютере, который находится в одной сети и вводим в адресной строке IP-адрес сервера. В итоге мы должны увидеть заголовок «Welcome to nginx!»:

Заголовок Welcome to nginx!

* обратите внимание, что данное приветствие может иметь и другой вид.

Установка PHP и PHP-FPM

Устанавливаем PHP и php-fpm следующей командой:

yum install php php-fpm

* В CentOS 7 будет установлена php версии 5.4. Если необходимо установить PHP 7, читайте статью Как установить PHP 7 на CentOS 7.

Запускаем php-fpm и разрешаем его автозапуск:

systemctl enable php-fpm --now

Настройка связки NGINX + PHP

Открываем файл для настройки виртуального домена по умолчанию. В зависимости от версии CentOS 7 пути могут различаться:

В секции location редактируем параметр index на следующее значение:

location / index index.php index.html index.htm;
>

* добавляем index.php в начало списка. Если параметра index нет, создаем его.

А внутри секции server добавим следующее:

Открываем настройки php-fpm:

Проверяем, настройки параметров:

. иначе, меняем значение. После перезагружаем php-fpm:

systemctl restart php-fpm

Проверяем правильность настроек nginx:

И перезагружаем его:

systemctl restart nginx

Создаем index.php в каталоге сайта по умолчанию со следующим содержимым:

Открываем в браузере IP-адрес нашего сервера. Теперь мы должны увидеть сводную информацию по PHP и его настройкам, например:

Информация о php (phpinfo)

Установка MariaDB или MySQL

В данной статье мы установим MariaDB, но процедура установки и настройки MySQL аналогичная. Все расхождения будут отмечены явно в инструкции.

Устанавливаем MariaDB следующей командой:

yum install mariadb-server

* будет установлена mariadb версии 5.5. Если нужна другая, то читаем подробнее в инструкции Установка MariaDB на CentOS или Ubuntu.
** для установки mysql выполняем команду yum install mysql

Разрешаем автозапуск и запускаем СУБД:

systemctl enable mariadb --now

* для работы с mysql меняем mariadb на mysql.

Сразу создаем пароль для учетной записи root:

mysqladmin -u root password

PHP + MariaDB (MySQL)

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

yum install php-mysqli

Если мы установили php5, также ставим php-mysql:

yum install php-mysql

После перезагружаем php-fpm:

systemctl restart php-fpm

И открываем наш сайт в браузере. В phpinfo появится новая секция MySQL:

В phpinfo появилась информация о поддержке MySQL

* нас не должно смущать, что установили мы mariadb, а заголовок mysql. Если посмотреть в таблицу, можно увидеть ячейку Client API version, в которой указано, что используется именно mariadb.

Установка phpMyAdmin

Для установки phpMyAdmin вводим следующую команду:

yum install phpmyadmin

Однако, если мы устанавливали php версии 7 и выше, необходимо указать репозиторий, который мы использовали для этого, например:

yum --enablerepo=remi-php74 install phpmyadmin

* в данном примере предполагается, что мы использовали репозиторий remi-php74.

Это необходимо для корректной установки расширений PHP.

Теперь создадим для него отдельный виртуальный домен в NGINX:

И добавим в него следующее содержимое:

server listen 80;
server_name phpmyadmin.dmosk.local;
set $root_path /usr/share/phpMyAdmin;

location / root $root_path;
index index.php;
>

* где phpmyadmin.dmosk.local — адрес для виртуального домена, именно этот адрес должен быть введен в адресную строку браузера, чтобы открылся нужный сайт. Поэтому есть нет возможность зарегистрировать домен и имя узла в DNS, можно воспользоваться локальным файлом hosts. /usr/share/phpMyAdmin — это каталог, в который по умолчанию устанавливается phpMyAdmin.

После перезапускаем NGINX:

systemctl reload nginx

Также нужно перезапустить php-fpm, так как в процессе установки был добавлен модуль mbstring:

systemctl restart php-fpm

Установка Memcached

Первым этапом мы установим и настроим сервис memcached. Вторым — модуль php-memcached.

Сервис memcached

Выполняем установку пакетов:

yum install memcached

После разрешаем автозапуск и запускаем сервис кэширования:

systemctl enable memcached --now

Модуль для php

Установить компонент из репозитория:

yum install php-pecl-memcached

После устаноки модуля перезапускаем php-fpm:

systemctl restart php-fpm

Чтобы проверить, что модуль memcached работаем, открываем наш сайт в браузере — в phpinfo должна появиться новая секция:

В phpinfo появилась информация о поддержке Memcached

. или вводим команду:

php -m | grep memcached

Мы должны получить:

Установка xCache

xCache не поддерживается в php7. Если мы установили именно эту версию, пропускаем установку данного пакета.

Запускаем установку xCache следующей командой:

yum install php-xcache

systemctl restart php-fpm

В phpinfo должно появиться следующее:

В phpinfo появилась информация о поддержке xCache

Установка и настройка FTP-сервера

В качестве FTP-сервера будем использовать ProFTPd, так как он позволяет авторизовываться под uid системных учетных записей. Для его установки вводим следующую команду:

yum install proftpd proftpd-utils

Создаем каталог для хранения настроек:

Создаем виртуального пользователя:

ftpasswd --passwd --file=/etc/proftpd.d/ftpd.passwd --name=ftpwww --uid=48 --gid=48 --home=/var/www --shell=/sbin/nologin

* где /etc/proftpd/ftpd.passwd — путь до файла, в котором хранятся пользователи; ftpwww — имя пользователя (логин); uid и gid — идентификаторы пользователя и группы системной учетной записи (apache); /var/www — домашний каталог пользователя; /sbin/nologin — оболочка, запрещающая локальный вход пользователя в систему.

Открываем на редактирование конфигурационный файл proftpd:

И редактируем следующее (комментируем):

В конце файла добавим следующее:

UseIPv6 off
IdentLookups off
PassivePorts 60000 65535

RequireValidShell off
AuthUserFile /etc/proftpd.d/ftpd.passwd
AuthPAM off
LoadModule mod_auth_file.c
AuthOrder mod_auth_file.c

* где 60000 - 65535 — диапазон динамических портов для пассивного режима.

Разрешаем автозапуск FTP-серверу и запускаем его:

systemctl enable proftpd --now

Пробуем подключиться к серверу, использую любые FTP-клиенты, например, FileZilla, Total Commander или тот же браузер.

Это базовая и самая простая настройка ProFTPd, но если необходимо настроить TLS или хранить виртуальных пользователей в базе MySQL, читайте подробнее инструкцию по настройке ProFTPd на CentOS 7.

Несмотря на то, что мы установили и настроили PHP-FPM, Apache нам понадобится, как минимум, по двум причинам. Во-первых, многие сайты используют файл .htaccess, который читает только Apache. Во-вторых, последний включает большое число модулей, которые может использовать портал.

В некоторых случаях, можно обойтись без Apache, но в данной инструкции мы опишем процедуру его установки и настройки.

Заходим в настройки:

И редактируем следующее:

* наш веб-сервер будет слушать на порту 8080, так как на 80 уже работает NGINX.

<IfModule dir_module>
DirectoryIndex index.php index.html
</IfModule>

* если не указан конкретный скрипт, сначала веб-сервер пытается найти и запустить index.php, затем index.html

<Directory /var/www/*/www>
AllowOverride All
Options Indexes ExecCGI FollowSymLinks
Require all granted
</Directory>

* где Directory — разрешенные каталоги для запуска из apache; Options — разрешенные опции; Require — с каких IP-адресов можно открывать сайты, определенные в данном каталоге. Итого, мы разрешаем все каталоги в /var/www, но только если следующий каталог будет www; разрешаем опции Indexes (возвращает список файлов, если нет индексного файла, например, index.php), ExecCGI (разрешены сценарии CGI), FollowSymLinks (включены символические ссылки в этом каталоге); доступ для данных каталого разрешен со всех адресов (all granted).

Разрешаем автозапуск и запускаем службу:

Создаем php-файл со следующим содержимым:

Открываем браузер и вводим в адресную строку IP-адрес нашего сервера и добавляем :8080. Мы должны увидеть привычную страницу:

Проверка работоспособности Apache с помощью phpinfo

NGINX + Apache

Ранее нами была настроена связка nginx + php-fpm. Теперь проверяем совместную работу первого с apache.

Открываем конфигурационный файл nginx:

* если при настройке nginx мы редактировали файл /etc/nginx/nginx.conf, то необходимо открыть его.

Находим наш настроенный location для php-fpm:

Проверяем и перезапускаем nginx:

systemctl restart nginx

Пробуем открыть в браузере IP-адрес нашего сервера — должна открыться та же страница, что при проверке Apache (с добавлением 8080):

Проверка работоспособности Apache с помощью phpinfo

Apache Real IP

Для решения проблемы будем использовать модуль mod_rpaf. Устанавливаем набор разработчика для apache:

Переходим в каталог /usr/local/src:

Переходим в распакованный каталог:

Собираем модуль и устанавливаем его:

* при возникновении ошибки ./apxs.sh: line 15: -c: command not found, необходимо поставить which командой yum install which.

Создаем конфигурационный файл со следующим содержимым:

И редактируем содержимое на:

Открываем браузер и вводим в адресную строку IP-адрес нашего сервера. Мы должны увидеть внешний адрес компьютера, с которого обращаемся к серверу.

Postfix

В CentOS postfix уже установлен и запущен. Нам необходимо сделать несколько простых настроек:

myorigin = $mydomain
smtp_generic_maps = hash:/etc/postfix/generic_map

Открываем карту пересылки:

* данной настройкой мы будем подставлять всем отправляемым письмам без поля FROM адрес no-reply@dmosk.local.

Для применения настроек перезагружаем почтовый сервер:

systemctl restart postfix

Тюнинг веб-сервера

Открываем на редактирование следующий файл:

И правим следующее:

upload_max_filesize = 256M
post_max_size = 256M
short_open_tag = On
date.timezone = "Europe/Moscow"

systemctl restart php-fpm

NGINX

Открываем на редактирование следующий файл:

И правим следующее:

После перезапускаем nginx:

systemctl restart nginx

Postfix

Чтобы отправляемая почта меньше попадала в СПАМ, необходимо выполнить следующие шаги:

Создание первого сайта

Задаем переменную, значение которой будет домен сайта:

Создаем новый файл виртуального домена NGINX:

* обязательно на конце должен быть .conf, так как только такие файлы веб-сервер подгружает в конфигурацию.

И добавляем следующее содержимое.

access_log /var/www/site1/log/nginx/access_log;
error_log /var/www/site1/log/nginx/error_log;

gzip on;
gzip_disable "msie6";
gzip_min_length 1000;
gzip_vary on;
gzip_proxied expired no-cache no-store private auth;
gzip_types text/plain text/css application/json application/x-javascript text/xml application/xml application/xml+rss text/javascript application/javascript;

* ^.+\.(jpg|jpeg|gif|png|css|zip|tgz|gz|rar|bz2|doc|docx|xls|xlsx|exe|pdf|ppt|tar|wav|bmp|rtf|js)$ expires modified +1w;
>
>

* где site1.local — домен, для которого создается виртуальный домен; /var/www/site1 — каталог, в котором будет размещаться сайт.
** все запросы будут переводиться на локальный сервер, порт 8080, на котором работает apache, кроме обращений к статическим файла (jpg, png, css и так далее).
*** обратите внимание на выделения полужирным — здесь нужно подставить свои данные.

/.well-known root /usr/share/nginx/html;
allow all;
>
if ($uri !

server listen 443 ssl;
ssl on;
ssl_certificate /etc/nginx/ssl/cert.pem;
ssl_certificate_key /etc/nginx/ssl/cert.key;

access_log /var/www/site1/log/nginx/access_log;
error_log /var/www/site1/log/nginx/error_log;

gzip on;
gzip_disable "msie6";
gzip_min_length 1000;
gzip_vary on;
gzip_proxied expired no-cache no-store private auth;
gzip_types text/plain text/css application/json application/x-javascript text/xml application/xml application/xml+rss text/javascript application/javascript;

/.well-known root /usr/share/nginx/html;
allow all;
>

* ^.+\.(jpg|jpeg|gif|png|css|zip|tgz|gz|rar|bz2|doc|docx|xls|xlsx|exe|pdf|ppt|tar|wav|bmp|rtf|js)$ expires modified +1w;
>
>

Теперь создаем виртуальный домен в Apache:

<VirtualHost *:8080>
Define root_domain site1.local
Define root_path /var/www/site1

ErrorLog $/log/apache/error_log
TransferLog $/log/apache/access_log

php_admin_value upload_tmp_dir $/tmp
php_admin_value doc_root $
php_admin_value open_basedir $:/usr/local/share/smarty:/usr/local/share/pear
php_admin_value session.save_path 0;0660;$/tmp
</VirtualHost>

Создаем каталоги для сайта:

mkdir -p /var/www/$TMP_SITE/

mkdir -p /var/www/$TMP_SITE/log/

Создаем индексный файл со следующим содержимым:

Задаем права на папки:

chown -R apache:apache /var/www/$TMP_SITE

chmod -R 775 /var/www/$TMP_SITE

Проверяем корректность настроек конфигурационных файлов:

systemctl reload nginx

Открываем сайт в браузере.

При необходимости, создаем базу данных.

> CREATE DATABASE site1 DEFAULT CHARACTER SET utf8 DEFAULT COLLATE utf8_general_ci;

* данными sql-командами мы создаем базу данных site1 и предоставляем к ней доступ для учетной записи dbuser с паролем password. При желании сделать соединение более безопасным, можно убрать WITH GRANT OPTION.

Читайте также: