Разное

Centos 7 настройка httpd: Web-сервер на CentOS 7.1 – установка и настройка Apache, PHP и MySQL | Info-Comp.ru

Содержание

Настройка web сервера в CentOS 7

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 сервис.

Оптимизация производительности Apache на CentOS 7 — Технический блог

Ранее я писал как оптимизировать вебсервер Apache в CentOS 6 — https://moonback.ru/page/f5-defense. Теперь пришла пора написать инструкцию для CentOS 7, тем более, что некоторые инструкции будут выглядеть несколько иначе.

Prefork Apache на CentOS 7

Статья актуальна для серверов с небольшим объемом оперативной памяти и когда Apache использует MPM модуль Prefork. Он используется по-умолчанию при установке Apache на CentOS 7. Проверить можно командой в консоли:


# apachectl -t -D DUMP_MODULES |grep mpm

Вы должны увидеть mpm_prefork_module (shared)

Оптимальная конфигурация Apache

Отредактируйте файл httpd.conf, добавьте в него нижеследующий код. Параметры сбалансированы для сервера с размером оперативной памяти 512 МБ:


KeepAlive Off
<IfModule prefork.c>
    StartServers        2
    MinSpareServers     6
    MaxSpareServers     12
    MaxClients          15
    MaxRequestsPerChild 3000
</IfModule>

В качестве альтернативного варианта этот код можно внести в отдельный файл с расширением .conf и сохранить его в директории /etc/httpd/conf.d. После внесения изменений в конфигурационные файлы не забудьте перезапустить вебсервер Apache:


# apachectl restart

Описание параметров

Так как все основные параметры были описаны в предыдущей статье — https://moonback.ru/page/f5-defense, я остановлюсь только на KeepAlive. Значение Off запрещает более одного соединения от одного посетителя. Это предотвращает чрезмерное потребление ресурсов сервера одним клиентом.

Благодарности

При написании статьи были использованы следующие источники:

  1. https://www.linode.com/docs/websites/lamp/lamp-on-centos-7
  2. https://devops.profitbricks.com/tutorials/optimize-apache-performance-on-centos-7-1/

Установка LAMP (apache + php + mysql) в CentOS 8

Сегодня займемся поднятием одной из наиболее востребованных ролей любого linux сервера, которые занимают в этом функциональном сегменте лидирующую роль. Настройка web сервера CentOS 8 на базе связки популярного http сервера apache, интерпретатора php и сервера баз данных mysql, или коротко — установка lamp. Данная связка является самой популярной конфигурацией на сегодняшний день среди веб хостинга. Хотя последнее время ей на пятки наступает та же компания, но на базе nginx, возможно уже и опередила, точных данных у меня нет на этот счет.


Если у вас есть желание освоить Linux с нуля, не имея базовых знаний, рекомендую познакомиться с онлайн-курсом Administrator Linux.Basic в OTUS. Курс для новичков, для тех, кто хочет войти в профессию администратора Linux. Подробности по .

Цели статьи

  1. Описать общий принцип настройки web сервера на базе apache.
  2. Показать, как установить актуальные версии apache, php и mariadb.
  3. Привести примеры своих конфигов для перечисленных сервисов.
  4. Настроить бесплатные ssl сертификаты let’s encrypt для сайтов.
  5. Показать, как настроить selinux для web сервера apache (httpd).
  6. Записать и показать видео настройки веб сервера apache.

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

Введение

В этой статье я расскажу, как настроить web сервер на базе популярного стека технологий — apache и php с модулем prefork. В связи с выходом нового релиза Centos 8, многие статьи на эту тему стали не актуальны, так как версии софта в базовых репозиториях обновились и тот же php нет смысла ставить из стороннего репозитория.

Работать будем на сервере под управлением CentOS 8. Если у вас его еще нет, то читайте мои статьи на тему установки и базовой настройки centos. Не забудьте уделить внимание теме настройки iptables. В данной статье я ее не буду касаться, хотя тема важная для web сервера.

В своей тестовой среде я буду использовать следующие сущности.

z.serveradmin.ru имя тестового виртуального хоста и сайта
/web/sites директория для размещения виртуальных хостов
10.20.1.23 локальный ip адрес сервера
pma.serveradmin.ru имя виртуального хоста для phpmyadmin

Если вам не хочется настраивать SELinux, то просто отключите его. Если же вы планируете включить и использовать после настройки, то переведите его в режим Permissive. В этом режиме он будет отключен, но все ограничения будут отражаться в лог файле audit.log. Это позволит нам в конце статьи сформировать модуль selinux для httpd и php и включить их.

# setenforce 0

Web сервер на CentOS 8

Итак, наш веб сервер centos будет состоять из трех основных компонентов — http сервера apache, интерпретатора языка программирования php и сервера баз данных mysql. Познакомимся немного с каждым из них:

  1. Apache — http сервер или просто веб сервер апач. Является кросплатформенным ПО, поддерживающим практически все популярные операционные системы, в том числе и Windows. Ценится прежде всего за свою надежность и гибкость конфигурации, которую можно существенно расширить благодаря подключаемым модулям, которых существует великое множество. Из недостатков отмечают большую требовательность к ресурсам, по сравнению с другими серверами. Держать такую же нагрузку, как, к примеру, nginx, apache не сможет при схожих параметрах железа.
  2. PHP — язык программирования общего назначения, который чаще всего применяется в веб разработке. На сегодняшний день это самый популярный язык в этой области применения. Поддерживается практически всеми хостинг-провайдерами.
  3. Mysql — система управления базами данных. Завоевала свою популярность в среде малых и средних приложений, которых очень много в вебе. Так что, как и php, на сегодняшний день является самой популярной бд, использующейся на веб сайтах. Поддерживается большинством хостингов. В CentOS вместо mysql устанавливается mariadb — ответвление mysql. Они полностью совместимы, возможен в любой момент переход с одной субд на другую и обратно. Я встречал информацию, что mariadb пошустрее работает mysql и люди потихоньку перебираются на нее. На практике мне не довелось это наблюдать, так как никогда не работал с нагруженными базами данных. А в обычных условиях разница не заметна.

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

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

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

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

В CentOS служба apache называется httpd. Когда я только знакомился с этим дистрибутивом, мне было непривычно. В Freebsd и Debian, с которыми я до этого работал служба веб сервера называлась apache, хотя где-то я замечал, кажется во фрюхе, что файл конфигурации имеет имя httpd.conf. До сих пор я не знаю, почему распространились оба эти названия. Был бы рад, если бы со мной кто-то поделился информацией на этот счет в комментариях.

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

# dnf install httpd

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

# systemctl enable httpd

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

# systemctl start httpd

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

# netstat -tulnp | grep httpd
tcp6       0      0 :::80                   :::*                    LISTEN      21586/httpd

Все в порядке, повис на 80-м порту, как и положено. Уже сейчас можно зайти по адресу http://10.20.1.23 и увидеть картинку:

Настройка web сервера apache

Если ничего не видите, скорее всего у вас не настроен firewall. Если не занимались его настройкой, то по-умолчанию в centos установлен firewalld. На нем открыть порты для web сервера можно следующими командами.

# firewall-cmd --permanent --zone=public --add-service=http
# firewall-cmd --permanent --zone=public --add-service=https
# firewall-cmd --reload

Проверить, открылись ли порты можно командой.

# firewall-cmd --list-all

Настройка firewalld

Вместо ожидаемой картинки с каким-то приветствием, мы видим просто ошибку. Я не знаю, почему в Centos 8 в стандартном пакете httpd из базового репозитория не положили в директорию web сервера по-умолчанию /var/www/html хоть какую-нибудь страничку. Там пусто, поэтому мы и видим ошибку. Давайте тогда сами что-то туда положим, чтобы просто проверить работу apache. Создаем простую страничку index.html.

# echo "Hello, Centos 8 and apache." >> /var/www/html/index.html

Проверяем страницу.

Проверка работы apache

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

/web/sites раздел для размещения сайтов
/web/z.serveradmin.ru/www директория для содержимого сайта
/web/z.serveradmin.ru/log директория для логов сайта

Создаем для нее директории.

# mkdir -p /web/sites/z.serveradmin.ru/{www,log}
# chown -R apache. /web/sites/

Дальше редактируем файл конфигурации apache — httpd.conf по адресу /etc/httpd/conf. Первым делом проверим, раскомментирована ли строчка в самом конце:

IncludeOptional conf.d/*.conf

Если нет, раскомментируем и идем в каталог /etc/httpd/conf.d. Создаем там файл z.serveradmin.ru.conf:

# mcedit /etc/httpd/conf.d/z.serveradmin.ru.conf
<VirtualHost *:80>

    ServerName z.serveradmin.ru
    ServerAlias www.z.serveradmin.ru
    DocumentRoot /web/sites/z.serveradmin.ru/www

    ErrorLog /web/sites/z.serveradmin.ru/log/error.log
    CustomLog /web/sites/z.serveradmin.ru/log/access.log common

    <Directory /web/sites/z.serveradmin.ru/www>
        Options FollowSymLinks
        AllowOverride All
        Require all granted
    </Directory>

</VirtualHost>

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

Проверим созданную конфигурацию и выполним перезапуск apache.

# apachectl -t
AH00558: httpd: Could not reliably determine the server's fully qualified domain name, using fe80::95:c6f3:e49f:7204. Set the 'ServerName' directive globally to suppress this message
Syntax OK

В данном случае ошибок нет, показано предупреждение. Теперь делаем restart apache:

# systemctl restart httpd

Если возникли какие-то ошибки — смотрим лог apache /var/log/httpd/error_log. Если все в порядке, то проверим, нормально ли настроен наш виртуальный хост. Для этого создадим в папке /web/sites/z.serveradmin.ru/www файл index.html следующего содержания:

# mcedit /web/sites/z.serveradmin.ru/www/index.html
<h2>Апач работает как надо, а надо хорошо!</h2>
# chown apache. /web/sites/z.serveradmin.ru/www/index.html

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

10.20.1.23 z.serveradmin.ru

где 10.20.1.23 ip адрес нашего веб сервера. Это нужно сделать только в том случае, если настраиваете web сервер где-то в локальной сети без реально существующего доменного имени.

Теперь в браузере набираем адрес http://z.serveradmin.ru. Если видим картинку:

Настройка виртуального хоста

значит все правильно настроили. Если какие-то ошибки, то идем смотреть логи. Причем в данном случае не общий лог httpd, а лог ошибок конкретного виртуального хоста по адресу /web/z.serveradmin.ru/log/error.log.

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

Установка php в Centos 8 сильно упростилась по сравнению с предыдущей версией, потому что в базовом репозитории хранится актуальная версия php 7.2, которой можно пользоваться. Пока нет необходимости подключать сторонние репозитории, так как версия 7.2 вполне свежа и актуальна. Если у вас нет необходимости использовать что-то новее, то можно остановиться на этой версии.

Устанавливаем php в CentOS 8, а так же некоторые популярные модули, которые могут пригодиться для того же phpmyadmin.

# dnf install php php-cli php-mysqlnd php-json php-gd php-ldap php-odbc php-pdo php-opcache php-pear php-xml php-xmlrpc php-mbstring php-snmp php-soap php-zip

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

# systemctl restart httpd

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

# mcedit /web/sites/z.serveradmin.ru/www/index.php
<?php phpinfo(); ?>
# chown apache. /web/sites/z.serveradmin.ru/www/index.php

Заходим по адресу http://z.serveradmin.ru/index.php

Проверка работы php

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

Где лежит php.ini

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

# mcedit /etc/httpd/conf.d/z.serveradmin.ru.conf

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

php_admin_value date.timezone 'Europe/Moscow'
php_admin_value max_execution_time 60
php_admin_value upload_max_filesize 30M

Для применения настроек нужно сделать restart apache. Если у вас полностью дефолтная установка, как у меня, то скорее всего вы увидите ошибку.

Invalid command ‘php_admin_value’, perhaps misspelled or defined by a module not included in the server configuration

Суть  ошибки в том, что у нас не загружен модуль mod_php. Проверим, где он подключается. Это файл /etc/httpd/conf.modules.d/15-php.conf.

<IfModule !mod_php5.c>
  <IfModule prefork.c>
    LoadModule php7_module modules/libphp7.so
  </IfModule>
</IfModule>

Тут стоит проверка на запуск модуля. Он загружается только, если у нас загружен модуль prefork. Давайте попробуем его загрузить принудительно. Для этого комментируем все строки, кроме основной.

LoadModule php7_module modules/libphp7.so

Проверяем конфигурацию apache.

# apachectl -t

Apache is running a threaded MPM, but your PHP Module is not compiled to be threadsafe.

Получили новую ошибку. Смысл в том, что изначально apache сконфигурирован на работу модуля mpm_event, он подключается в конфиге /etc/httpd/conf.modules.d/00-mpm.conf.

LoadModule mpm_event_module modules/mod_mpm_event.so

Стандартный модуль mod_php скомпилирован с поддержкой модуля mpm_prefork. С другими он работать не будет. Таким образом, чтобы у нас нормально заработал php, нам надо вместо модуля mpm_event подключить модуль mpm_prefork. Для этого в конфиге 00-mpm.conf закомментируем подключение mpm_event_module и раскомментируем prefork.

LoadModule mpm_prefork_module modules/mod_mpm_prefork.so

После этого проверяйте конфигурацию и перезапускайте apache. Все должно заработать. Теперь в выводе phpinfo можно увидеть изменение настроек.

Настройка php

Я подробно разобрал эти ошибки, чтобы у вас было понимание, как все устроено и куда смотреть в случае проблем. Более подробно о работе и выборе mpm модулей читайте в официальной документации apache — http://httpd.apache.org/docs/2.4/mpm.html.

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

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

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

# dnf install mariadb mariadb-server

Запускаем mariadb и добавляем в автозагрузку.

# systemctl start mariadb
# systemctl enable mariadb

Запускаем скрипт начальной конфигурации mysql и задаем пароль для root. Все остальное можно оставить по-умолчанию.

# /usr/bin/mysql_secure_installation

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

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

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

# systemctl restart mariadb

На этом все. Базовый функционал web сервера на CentOS 8 настроен. Дальше настроим популярную панель управления mysql сервером — phpmyadmin.

Установка phpmyadmin

Для того, чтобы установить phpmyadmin на наш web сервер, достаточно просто распаковать в директорию с виртуальным хостом исходники панели. Давайте подготовим виртуальный хост. Создаем структуру папок.

# mkdir -p /web/sites/pma.serveradmin.ru/{www,log}

И готовим конфиг apache по аналогии с уже созданным доменом. Создаем файл pma.serveradmin.ru.conf.

# mcedit pma.serveradmin.ru.conf
<VirtualHost *:80>

    ServerName pma.serveradmin.ru
    DocumentRoot /web/sites/pma.serveradmin.ru/www

    ErrorLog /web/sites/pma.serveradmin.ru/log/error.log
    CustomLog /web/sites/pma.serveradmin.ru/log/access.log common

    <Directory /web/sites/pma.serveradmin.ru/www>
        Options FollowSymLinks
        AllowOverride All
        Require all granted
    </Directory>

    php_admin_value date.timezone 'Europe/Moscow' 
    php_admin_value max_execution_time 360
    php_admin_value upload_max_filesize 100M

</VirtualHost>

После добавления конфига, не забудьте перезапустить apache.

# apachectl restart

Идем на сайт https://www.phpmyadmin.net и копируем ссылку на последнюю версию панели. Затем загружаем ее через консоль.

# cd ~
# wget https://files.phpmyadmin.net/phpMyAdmin/4.9.1/phpMyAdmin-4.9.1-all-languages.zip

Архив упакован в zip. Если у вас нет на сервере пакета unzip, установите его.

# dnf install unzip

Распаковываем исходники в директорию виртуального хоста.

# unzip phpMyAdmin-4.9.1-all-languages.zip
# cp -R phpMyAdmin-4.9.1-all-languages/* /web/sites/pma.serveradmin.ru/www
# chown -R apache. /web/sites/pma.serveradmin.ru/www

Можно заходить и проверять работу phpmyadmin, пройдя по адресу pma.serveradmin.ru. Ее установка закончена.

Установка phpmyadmin

Более подробно вопрос установки и настройки phpmyadmin я рассматривал отдельно. Можете зайти в панель и создать базу mysql для тестового сайта, например, wordpress. Затем через консоль загрузить исходники cms и распаковать их.

# cd ~
# wget https://ru.wordpress.org/latest-ru_RU.tar.gz
# tar xzvf latest-ru_RU.tar.gz
# cp -R wordpress/* /web/sites/z.serveradmin.ru/www
# chown -R apache. /web/sites/z.serveradmin.ru/www

После этого открывайте в браузере страницу z.serveradmin.ru и увидите приветствие установщика wordpress.

Установка wordpress на apache

Настройка ssl сертификата Lets Encrypt в apache

Теперь настроим работу web сервера apache с ssl сертификатом. Хотя если быть точным, то tls сертификатом. Устанавливаем пакет certbot для получения бесплатного ssl сертификата от let’s encrypt. В репозиториях centos 8 его пока нет, поэтому поставим вручную с сайта разрабочиков.

# cd ~
# wget https://dl.eff.org/certbot-auto
# mv certbot-auto /usr/local/bin/certbot-auto
# chown root /usr/local/bin/certbot-auto
# chmod 0755 /usr/local/bin/certbot-auto

При первом запуске certbot-auto предложит установить зависимости, которые ему нужны для работы. Он написан на python, поэтому зависимостей в виде модулей питона будет много.

# certbot-auto

Установка certbot

После установки пакетов certbot напишет ошибку, что не может сам настроить apache.

Конфигурация certbot

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

# openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/pki/tls/private/localhost.key -out /etc/ssl/certs/localhost.crt

Все параметры оставляйте дефолтные, не принципиально. Мы этот сертификат использовать не будет. Перезапустите apache.

# apachectl restart

Теперь выпустим сертификат для нашего домена. Имейте ввиду, чтобы получить сертификат у вас должно быть действующее доменное имя, ссылающееся на web сервер, который настраиваете. Let’s Encrypt будет по доменному имени обращаться к серверу, на котором настраиваете сертификат, чтобы проверить домен. В тестовой лаборатории с вымышленным доменным именем получить настоящий ssl сертификат не получится.

# certbot-auto certonly

Настройка ssl сертификатов let

В качестве способа аутентификации выбирайте

1: Apache Web Server plugin (apache)

Дальше заполняйте в соответствии с вашими названиями. После получения сертификата, укажем его в конфигурации виртуального хоста. В моем случае в файле z.serveradmin.ru.conf. Добавляем туда параметры ssl.

<VirtualHost *:80 *:443>

    ServerName z.serveradmin.ru
    ServerAlias www.z.serveradmin.ru
    DocumentRoot /web/sites/z.serveradmin.ru/www

    ErrorLog /web/sites/z.serveradmin.ru/log/error.log
    CustomLog /web/sites/z.serveradmin.ru/log/access.log common

    SSLEngine on
    SSLCertificateFile /etc/letsencrypt/live/z.serveradmin.ru/fullchain.pem
    SSLCertificateKeyFile /etc/letsencrypt/live/z.serveradmin.ru/privkey.pem

    <Directory /web/sites/z.serveradmin.ru/www>
        Options FollowSymLinks
        AllowOverride All
        Require all granted
    </Directory>

    php_admin_value date.timezone 'Europe/Moscow'
    php_admin_value max_execution_time 60
    php_admin_value upload_max_filesize 30M

</VirtualHost>

Перезапускайте apache и проверяйте работу сайта по https, зайдя по соответствующему протоколу.

Настройка ssl

По аналогии делаете с остальными виртуальными хостами, для которых используете бесплатные сертификаты let’s encrypt. Осталось дело за малым — настроить автоматический выпуск новых ssl сертификатов, взамен просроченным. Для этого добавляем в /etc/crontab следующую строку:

# Cert Renewal
30 4 * * * root /usr/local/bin/certbot-auto renew --post-hook "/usr/sbin/apachectl restart" >> /var/log/le-renew.log

Переадресация с http на https в apache

В настроенном ранее примере https отлично работает, но неудобно, что нет автоматической переадресации с http на https. Чтобы использовать безопасную версию сайта, необходимо вручную в браузере набирать https. Хотя все современные браузеры уже сами умеют проверять версии сайта и если есть защищенная, то они автоматически сами ее выбирают.

Тем не менее, лучше все же добавить редирект с http на https. Его можно сделать двумя различными способами:

  1. Через файл .htaccess
  2. С помощью настройки виртуального хоста.

Мне нравится больше второй вариант, поэтому приводим конфиг виртуального хоста к следующему виду.

<VirtualHost *:80>

    ServerName z.serveradmin.ru
    ServerAlias www.z.serveradmin.ru
    Redirect permanent / https://z.serveradmin.ru

</VirtualHost>

<VirtualHost *:443>

    ServerName z.serveradmin.ru
    ServerAlias www.z.serveradmin.ru
    DocumentRoot /web/sites/z.serveradmin.ru/www

    ErrorLog /web/sites/z.serveradmin.ru/log/error.log
    CustomLog /web/sites/z.serveradmin.ru/log/access.log common

    SSLEngine on
    SSLCertificateFile /etc/letsencrypt/live/z.serveradmin.ru/fullchain.pem
    SSLCertificateKeyFile /etc/letsencrypt/live/z.serveradmin.ru/privkey.pem

    <Directory /web/sites/z.serveradmin.ru/www>
        Options FollowSymLinks
        AllowOverride All
        Require all granted
    </Directory>

    php_admin_value date.timezone 'Europe/Moscow'
    php_admin_value max_execution_time 60
    php_admin_value upload_max_filesize 30M

</VirtualHost>

Перечитывайте конфиг httpd и проверяйте. Должно работать автоматическое перенаправление на https версию.

Ротация логов веб сервера apache

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

У нас уже будет файл конфигурации logrotate для httpd, который был создан во время установки — /etc/logrotate.d/httpd. Приведем его к следующему виду:

/var/log/httpd/*log {
    missingok
    notifempty
    sharedscripts
    delaycompress
    postrotate
        /bin/systemctl reload httpd.service > /dev/null 2>/dev/null || true
    endscript
}

/web/sites/pma.serveradmin.ru/log/*log {
    size=10M
    rotate 10
    missingok
    notifempty
    compress
    sharedscripts
    postrotate
        /bin/systemctl reload httpd.service > /dev/null 2>/dev/null || true
    endscript
}

/web/sites/z.serveradmin.ru/log/*log {
    size=10M
    rotate 10
    missingok
    notifempty
    compress
    sharedscripts
    postrotate
        /bin/systemctl reload httpd.service > /dev/null 2>/dev/null || true
    endscript
}

Я предлагаю ротировать файлы логов по достижению ими размера в 10Мб, сжимать после ротации и хранить 10 архивов с логом. Обращаю внимание на важный нюанс при ротации логов по размеру. Скорее всего в общем случае она будет работать не так, как вы ожидаете. Подробности читайте по ссылке. Я привел пример простой конфигурации. Все параметры вы можете поменять по своему усмотрению. Примеров конфигурации logrotate в интернете много.

Настройка SELinux для web сервера apache

Раздел для тех, кто хочет настроить SELinux на своем web сервере. Сначала ставим пакет policycoreutils-python-utils если он еще не установлен. Он нам нужен для утилиты semanage.

# dnf install policycoreutils-python-utils

Теперь автоматически сформируем модуль для selinux на основе событий аудита, которые накопились, пока мы настраивали сайт. Посмотреть их можно командой.

# grep httpd /var/log/audit/audit.log | audit2why

Создаем модуль selinux.

# grep httpd /var/log/audit/audit.log | audit2allow -M my-httpd

Загружаем его.

# semodule -i my-httpd.pp

То же самое делаем для php.

# grep php /var/log/audit/audit.log | audit2allow -M my-php
# semodule -i my-php.pp

Добавим нашу директорию /web/sites в соответствующие таблицы selinux для контента и логов.

# semanage fcontext -a -t httpd_sys_content_t "/web/sites(/.*)?"
# semanage fcontext -a -t httpd_log_t "/web/sites(/.*)?/log(/.*)?"

И отдельно добавим каталог, куда web сервер сможет писать данные. Я покажу на примере правила для сайтов wordpress, где web сервер должен уметь писать в директорию wp-content для загрузки медиафайлов, установки тем и плагинов, а так же изменять файл wp-config.php.

# semanage fcontext -a -t httpd_sys_rw_content_t "/web/sites/\*/www/wp-content(/.\*)?"
# semanage fcontext -a -t httpd_sys_rw_content_t "/web/sites/\*/www/wp-config.php"

Обновляем атрибуты файлов новым контекстом SELinux.

# restorecon -Rv /web/sites

В завершении настройки selinux для apache, добавим еще один параметр, без которого httpd не сможет писать файлы в указанные каталоги.

# setsebool -P httpd_unified 1

Теперь активируем защиту selinux и проверяем, что она работает.

# setenforce 1
# getenforce
Enforcing

Режим работы Enforcing означает, что selinux работает. Убедиться, что модули загружены, можно командой.

# semodule -l | grep my-

В целом, по selinux все. Мы просто разрешили все, что веб сервер просил. По идее, надо вдумчиво во всех правилах разбираться и разрешать только то, что считаешь нужным. Я честно скажу, что selinux знаю не очень хорошо. Дальше загрузки готовых модулей и автоматического создания модулей с помощью audit2allow я не двигался. Руками модули никогда не писал. Если есть какой-то более осмысленный и правильный способ настройки selinux на кастомной конфигурации веб сервера, буду рад полезной информации.

Хорошая практическая статья по ручной настройке selinux для web сервера — https://habr.com/ru/post/322904/. Там же есть ссылки на другие статьи автора на тему selinux. Написано содержательно и наглядно, рекомендую для тех, кто будет знакомиться с технологией.

Видео

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

Заключение


Не понравилась статья и хочешь научить меня администрировать? Пожалуйста, я люблю учиться. Комментарии в твоем распоряжении. Расскажи, как сделать правильно!

На этом по настройке apache все. Я рассмотрел все основные моменты, которые необходимы для установки и настройки web сервера на основе apache и php, который обычно называют LAMP. При этом рассказал о некоторых вещах, которые повышают удобство и гибкость эксплуатации сервера.

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

Если еще что-то полезное вспомню, добавлю ссылки. Пока вроде все. Статья получилось большой и насыщенной. Было не просто все собрать воедино, проверить, связать между собой и оформить в последовательное повествование. Мог где-то ошибиться. Жду комментариев и отзывов. Написал все по своему опыту, как я обычно настраиваю веб сервера. Предполагаю что-то можно сделать более удобно и правильно. Буду рад научиться.

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

Онлайн курс «DevOps практики и инструменты»

Если у вас есть желание научиться строить и поддерживать высокодоступные и надежные системы, научиться непрерывной поставке ПО, мониторингу и логированию web приложений, рекомендую познакомиться с онлайн-курсом «DevOps практики и инструменты» в OTUS. Курс не для новичков, для поступления нужны базовые знания по сетям и установке Linux на виртуалку. Обучение длится 5 месяцев, после чего успешные выпускники курса смогут пройти собеседования у партнеров.

Проверьте себя на вступительном тесте и смотрите программу детальнее по .

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

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

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

Не так давно появилась новая версия одного из самых популярных скриптовых языков программирования на просторах веб — PHP 7. Очень долго разработчики развивали пятую версию и было выпущено несколько минорных релизов, но, в конце концов, было решено пропустить шестой номер версии, и сразу выпустить PHP 7.0. Эта версия приносит множество полезных нововведений, о которых мы поговорим ниже.

Учитывая что CentOS — это очень стабильный дистрибутив, то его пользователи получат только в следующей версии. В этой статье мы рассмотрим как выполняется установка PHP 7 CentOS 7.

Содержание статьи:

Что нового в PHP 7

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

  • Импорт пространств имен группами;
  • Добавлена возможность присвоить значение по умолчанию если переменная пустая;
  • В классах можно указывать ожидаемые типы данных для методов;
  • Добавлены анонимные классы;
  • Добавлена возможность создавать Escape последовательности для unicode;
  • Улучшены генераторы;

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

  • interbase;
  • mssql;
  • oci8;
  • pdo_dblib;
  • pdo_oci;
  • sybase_ct;

Расширение ereg считается устаревшим, а imap и mcrypt пока поддерживаются, но, видимо, ненадолго. Также были убраны устаревшие теги: <%, <%=, <script language=»php»> больше они не работают. Классы и интерфейсы больше нельзя именовать именами типов данных. Также изменен синтаксис работы с возвращаемыми методами данными. В основном это все, если ваш проект не содержит всех этих проблем, то вы можете спокойно переходить на PHP 7. Такие популярные CMS, как WordPress, Zend, Yii, Symfony и множество других уже давно поддерживают PHP 7. А теперь рассмотрим как установить PHP 7 CentOS 7.

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

Мы будем использовать репозиторий Remi для установки PHP. Но перед тем как мы сможем его подключить, нам понадобиться дополнительно репозиторий EPEL:

sudo rpm -Uvh https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm

 

Дальше устанавливаем сам репозиторий Remi:

sudo rpm -Uvh http://rpms.remirepo.net/enterprise/remi-release-7.rpm

После установки смотрим доступные репозитории Remi:

ls /etc/yum.repos.d/remi*

Как видите, есть несколько версий php, сейчас мы можем активировать php 7.1, для этого откройте соответствующий файл, найдите секцию [remi-php71], в ней найдите enabled и поменяйте значение с 0 на 1:

vi /etc/yum.repos.d/remi-php71.repo

enabled=1

Теперь самое интересное — установка php 7.1 centos 7. Если у вас уже установлена старая версия php, то вам не нужно ничего удалять, вы можете просто обновить систему и получите то, что нужно:

sudo yum update

Если же никакая версия php не установлена, просто установите нужные пакеты:

sudo yum install php php-fpm php-gd php-mysql

После завершения работы команды вы получите готовую и работающую версию php, и вы можете использовать ее для своего веб-сервера Apache или Nginx. Если вы используете Apache, то даже ничего перенастраивать не придется. Если вы используете подключение по сетевому сокету в Nginx, то вам нужно будет только перезапустить php-fpm:

sudo systemctl restart php-fpm

В случае с файловым сокетом, еще нужно будет прописать правильный путь к новому сокету. И даже когда в репозиториях CentOS 7.4 появиться эта версия PHP, все равно будет выгоднее использовать этот репозиторий, потому что тут уже будет более новая версия.

Выводы

В этой небольшой статье мы рассмотрели как выполняется установка PHP 7 CentOS 7. Как видите, это совсем несложно и вы можете установить все это на свой сервер чтобы получить максимальную производительность. Если у вас остались вопросы, спрашивайте в комментариях!

Оцените статью:

Загрузка…

Веб-сервер под CentOS 7

Внимание! Уже появилась более прогрессивная методика для версии 7.1.

В качестве операционной системы для будущей хостинг-площадки вполне рационально выбрать операционную систему Linux, диструбутив Centos версии 7.0. Свой выбор на Centos остановим, как дистрибутив стабильный, прекрасно обновляется, поддерживает работу с пакетами. А самое главное — использовать Red Hat Enterprise Linux.

Удивительные вещи, которые ждут нас в седьмой версии :

  • Отказ от iptables, теперь вместо него firewall
  • Отказ от chkconfig — теперь вместо systemd
  • Переход с MySQL к MariaDB.

Установка операционной системы

На данный момент актуальной является CentOS 7, ориентированный исключительно на архитектуру x86_64. Скачиваем образ ISO и устанавливаем с диска, но можно поставить и с флэшки.

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

Аппаратная часть

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

Разделы диска

На шаге Место установки нам предлагается выбрать диск для установки системы. Если ничего не трогать (Automatically Configure Partitioning), то инсталлятор самостоятельно справится с разбиением на разделы. Считаю, такие важные вещи нельзя пускать на самотёк, они требуют вмешательства; поэтому наш выбор — настрою разметку.Видим диалоговое окно, показанное ниже.

Распределяем место на диске.

  • Нам необходимо добавить более 82 Мб для раздела boot.
  • Всё оставшееся место за исключением размера оперативной памяти отводим под основным разделом.
  • Наконец, остаток отдаём под файл подкачки, помечая его своп.

В результате разделы будут видны примерно таким образом.

В отличие от шестой версии, файловой системой по умолчанию в седьмой версии является XFS, а не ext4.К сожалению, в сети довелось натыкаться на негативные отзывы о ней, однако не могу высказать свое собственное мнение: я вынужден использовать ext4 для совместимости с некоторым программно-своим аппаратным устройством.

Результат команды df -h после установки:

Отладка

Первое, что надо сделать — отключить систему безопасности SELinux.

Например, включенный selinux не позволит подключиться по протоколу ftp к серверу, если в будущем поставим vsftpd, клиент будет получать сообщения об ошибке

.

 500 OOPS: невозможно изменить каталог: / home / username 

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

 mcedit / и т.д. / sysconfig / selinux 

меняем значение

 SELINUX = отключено 

перезагружаемся

 перезагрузка 

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

 firewall-cmd --permanent --zone = public --add-service = http 
firewall-cmd --permanent --zone = public --add-service = https

Перезапускаем:

 firewall-cmd - перезагрузить 

Установлен Проверяем, что ням.Если его нет, придётся вручную тащить пакет mirror.centos. org / centos / 7 / os / x86_64 / Packages / и установить через менеджер пакетов.

Устанавливаем необходимые пакеты, которые обеспечивают работу веб-сервера. В нашем случае это apache, mysql, php (для комплекса LAMP) или nginx, mysql, php (для комплекса LEMP), а возможно и всё вместе.

Например, установка веб-сервера apache выглядит следующим образом:

 yum -y установить httpd httpd-devel 

Запускаем службу, добавляем в автозагрузку, проверяем результат:

 systemctl start httpd.обслуживание 
systemctl включить httpd.service

Если потребуется перезапустить apache после каких-либо настроек (или после установки php), пригодится

 systemctl перезапустить httpd.service 

Привычная утилита setup теперь отсутствует. Убеждаемся, что все службы будут стартовать при запуске системы с помощью systemctl включена служба .

Варианты использования systemctl:

Остановка службы systemctl остановить httpd.сервис
Запуск службы systemctl start httpd.service
Перечитать файл конфигурации systemctl перезагрузить httpd.service
Перезапуск службы systemctl перезапустить httpd.service
Перезапуск службы, если она уже запущена systemctl попробуйте перезапустить httpd.service
Проверка статуса службы статус systemctl httpd.сервис
Добавить в автозапуск systemctl включить httpd.service
Исключить из автозапуска systemctl отключить httpd.service
Проверка присутствия в автозапуске systemctl включен httpd.service
Вывести список служб systemctl список-единиц-файлов —type = service

Устанавливаем PHP.

 yum -y установить php php-mysql php-common php-gd php-xml php-mbstring 

Вариант наиболее полной установки PHP, с расчётом на разворачивание платформ для современных движков Joomla, WordPress и Drupal, будет выглядеть следующим образом:

 yum -y install php php-gd php-mysql php-common php-ldap php-odbc php-pear php-xml php-xmlrpc php-mbstring php-snmp php-soap curl curl-devel 

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

Устанавливаем и запускаем MySQL.

 yum -y установить mysql mysql-server 
systemctl включить mysqld
systemctl запустить mysqld

Не забываем задать пароль root для MySQL.

Альтернативный вариант: устанавливаем и запускаем MariaDB:

 yum install -y mariadb mariadb-server 
systemctl включить mariadb
systemctl start mariadb

Теперь готовимся к отказу от графического интерфейса.

Во всём семействе Red Hat Linux (Fedora, Red Hat, CentOS) используется следующая система уровней выполнения

.

  • Однопользовательский текстовый режим (без сети)
  • Не используется (определяется пользователем)
  • Полный многопользовательский текстовый режим
  • Не используется (определяется пользователем)
  • Полноценный многопользовательский графический режим (с экраном входа в систему на основе X)
  • Перезагрузка

Состояние подготовки к выключению кодируется нулём.

Не использует графику.

Редактируем

 / и т. Д. / Inittab 

Прописываем

 идентификатор: 3: initdefault: 

Теперь третий уровень выполнения уровня становится по умолчанию, именно на нём будет работать система в случае перезапуска.

В любой момент времени проверить текущий уровень можно командой runlevel:

 / sbin / уровень запуска 

Теперь дело за малым:

  • Настроить mysql, однако необходимо заметить, что компания Red Hat предпочитает на данный момент альтернативную базу данных MariaDB
  • Настроить высокопроизводительный веб-сервер (например, связку nginx + apache), или оставить только службу httpd
  • Настроить php

Если все шаги выполнены, то у нас всё готово.

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

.

PHP и компоненты. Установка на CentOS 7

PHP

Будем устанавливать именно php 7.

Установка php 7 на CentOS 7 по сути делится на 2 этапа:

  1. Подготовка к установке,
  2. и сама установка.

Подготовка репозиториев

Для установки php 7 на CentOS 7 нужен подключенный репозиторий remi, но чтобы его можно было использовать, нужен другой репозиторий epel. Такая вот цепочка.

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

yum install epel-release -y

yum install epel-release -y

И потом установить сам репозиторий remi

rpm -Uvh http: // rpms.remirepo.net/enterprise/remi-release-7.rpm

об / мин -Uvh http://rpms.remirepo.net/enterprise/remi-release-7.rpm

Вообще, заранее можно проверить наличие репозиториев такой командой:

Будет примерно такой список:

Лично у меня epel был установлен по умолчанию (возможно такая сборка от хостера), т.е повторно установить его не пришлось.

После установки репозитория remi запускаем mc коммандер

и идем в каталог /etc/yum.repos.d/

Видим, что появились новые файлы, названия которых начинаются с remi .. а дальше версия php.

Т.е. примерно такие:

  • remi-php54.repo
  • remi-php70.repo
  • remi-php71.repo
  • remi-php72.repo

А теперь самый интересный момент: , чтобы установить нужную версию php, нужно активировать соответствующий файл репозитория (из списка выше).Какой активируешь — тот и установится.

В каждом из них пока везде стоит включено = 0 . Если нужно установить версию php 7.1, то для активации нужно в секции [remi-php71] включен = 0 поменять на 1 . Как здесь.

Установка

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

Осталось запустить команду на установку

Или обновить систему, если старая версия установлена ​​php, то php обновится до нужной версии:

Проверка работы

Должно вывести примерно следующее:

PHP 7.2.5 (cli) (построено: 24 апреля 2018 19:12:06) (NTS)
Авторские права (c) 1997-2018 Группа PHP
Zend Engine v3.2.0, Авторское право (c) 1998-2018 Zend Technologies

PHP 7.2.5 (cli) (построено: 24 апреля 2018 г., 19:12:06) (NTS)

Авторские права (c) 1997-2018 гг. Группа PHP

Zend Engine v3.2.0, Авторское право (c) 1998- 2018 Zend Technologies

PHP-FPM

Для установки php-fpm на CentOS 7 уже должен быть готов нужный репозиторий remi. О нем было рассказано чуть выше.

Теперь просто выполняем команду:

Перезапустить сервис:

systemctl перезапустить php-fpm

systemctl перезапуск php-fpm

Добавим PHP-FPM в автозагрузку:

Вроде как все.

Благодарности источникам:

  1. https://losst.ru/ustanovka-php-7-v-centos
  2. https: // serveradmin.ru / установка-и-настройка-nginx-php-fpm-php7-1-na-centos-7 / # _ php-fpm_71

5
1
голос

Рейтинг статьи

1 825

.

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

Ваш адрес email не будет опубликован. Обязательные поля помечены *

2022 © Все права защищены. Карта сайта