CentOS 7. Настройка httpd centos 7
Веб-сервер на базе NGINX под CentOS 7
Эта статья находится в процессе редактирования в данный момент! Её пока следует использовать осторожно, руководствуясь здравым смыслом....
По счастливой случайности мне досталась удивительная виртуальная машина, на которую администраторы хостинга натянули минимальную CentOS 7. Машинка достаточно резвая, имеет 3 Гб ОЗУ, 2 процессора Intel Xeon e5-2630v3 (но нам доступен лишь один). Файловая система XFS.
uname -a Linux localhost.localdomain 3.10.0-229.el7.x86_64 #1 SMP Fri Mar 6 11:36:42 UTC 2015 x86_64 x86_64 x86_64 GNU/LinuxЗадача: превратить машину в хостинг для тяжёлого сайта.
Разбираемся с интерфейсами
По привычке набираем
# ifconfig...и видим
-bash: ifconfig: command not foundОй, а что у нас теперь вместо ifconfig? Ах, да, у нас ip addr.
# ip addr 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 inet 127.0.0.1/8 scope host lo valid_lft forever preferred_lft forever inet6 ::1/128 scope host valid_lft forever preferred_lft forever 2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000 link/ether a6:f7:0f:92:9b:aa brd ff:ff:ff:ff:ff:ff inet 5.189.206.250/24 brd 5.189.206.255 scope global eth0 valid_lft forever preferred_lft forever inet6 fe80::a4f7:fff:fe92:9baa/64 scope link valid_lft forever preferred_lft foreverДобавляем строки
DNS1=8.8.8.8 DNS2=8.8.4.4Необходимо перезапустить сеть
service network restartУра, мы теперь по-настоящему в интернете.
Если нет ifcfg-eth0, посмотрите что-то похожее, например ifcfg-enp3s0.
Базовая подготовка
Общее обновление
yum -y updateДоставляем жизненно необходимые (для людей!) пакеты
yum -y install mc wgetИзбавляемся от подгузников, для чего редактируем
mcedit /etc/sysconfig/selinuxИзменим значение
SELINUX=disabledПриходится перезагружаться
Межсетевой экран
Сначала необходимо определиться: мы за годами проверенный iptables или за новомодный FirewallD? В данном случае хотелось бы отказаться от FirewallD.
Забываем про FirewallD
systemctl disable firewalld && systemctl stop firewalld && yum erase firewalldСтавим iptables
yum install iptables-services touch /etc/sysconfig/iptables touch /etc/sysconfig/ip6tables systemctl start iptables && systemctl start ip6tables && systemctl enable iptables && systemctl enable ip6tables===============
Привожу свой файл iptables в качестве примера.
Настройка сервера SSH
Меняем порт SSH.
Чтобы повысить защищённость сервера, меняем значение порта для подключения по SSH.
mcedit /etc/ssh/sshd_configВыставляем:
Port 555
systemctl restart sshd.service tail -f /var/log/messagesВидим
Nov 4 07:29:14 localhost systemd: Stopping OpenSSH server daemon... Nov 4 07:29:14 localhost systemd: Started OpenSSH Server Key Generation. Nov 4 07:29:14 localhost systemd: Starting OpenSSH server daemon... Nov 4 07:29:14 localhost systemd: Started OpenSSH server daemon.Удаляем в iptables лишние строки (порты SSH) и перезапускаем
systemctl restart iptables.serviceВыходим из терминала и заходим. Получилось? У меня – да.
Веб-окружение
Устанавливаем nginx через официальный репозиторий
mcedit /etc/yum.repos.d/nginx.repoВставляем содержимое:
[nginx] name=nginx repo baseurl=http://nginx.org/packages/centos/7/$basearch/ gpgcheck=0 enabled=1Теперь привычной командой запускаем установку:
yum install -y nginxДобавляем в автозагрузку и запускаем
systemctl start nginx.service && systemctl enable nginx.serviceУстанавливать Apache нам нет необходимости. Но мы его всё же установим в целях совместимости, на будущее. Кроме того, пользователь apache нам пригодится, от него будут работать все веб-сервисы (так сложилось исторически).
yum -y install httpdУстанавливаем интерпретатор PHP
Вариант 1 (простой). Устанавливаем стандартный интерпретатор PHP
Вариант 2 (хитрый).Если нужна более серьезная версия, то пользуемся проверенным способом, устанавливаем php 5.6.
Вариант 3 (модный).На момент написания статьи я рекомендую переходить на php версии 7. Её мы будем ставить из репозитория Webtatic
rpm -Uvh https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm rpm -Uvh https://mirror.webtatic.com/yum/el7/webtatic-release.rpm yum install -y php70w php70w-opcache php70w-fpm php70w-pdo php70w-imap php70w-mysql php70w-xml php70w-mbstringУбеждаемся, что у нас свежая версия командой php -v:
# php -v PHP 7.0.6 (cli) (built: May 1 2016 10:24:20) ( NTS ) Copyright (c) 1997-2016 The PHP Group Zend Engine v3.0.0, Copyright (c) 1998-2016 Zend Technologies with Zend OPcache v7.0.6-dev, Copyright (c) 1999-2016, by Zend TechnologiesУстанавливаем MariaDB
yum install -y mariadb mariadb-serverЗапускаем и добавляем в автозапуск:
systemctl enable mariadb && systemctl start mariadbПервоначальная настройка СУБД выполняется сразу после процедуры установки. Она заключается в следующем:
- Смена пароля пользователя root базы mysql
- Удаление созданной по умолчанию таблицы test из базы mysql
- Удаление созданного по умолчанию пользователя anonymous
Выполним команду mysql_secure_installation, согласимся со всеми пунктами, зададим пароль администратора.
Чтобы в будущем сменить пароль, воспользуемся командой mysqladmin -u root password
Устанавливаем php-fpm (если пользовались Вариантом 1 или Вариантом 2):
yum install -y php-fpmЗапускаем и добавляем в автозапуск:
systemctl enable php-fpm && systemctl start php-fpmНи в коем случае не забываем про /var/cache – в ней nginx должен работать без каких-либо помех
chown -R apache:apache /var/cache/nginx/
Конфигурация nginx
Изменяем под себя конфигурационный файл nginx
Для примера мой вариант nginx.conf
Это общие настройки веб-сервера, в которых мы указываем, что работа ведётся от имени пользователя apache, количество процессов выбирает сам nginx, включаем компрессию gzip (у меня мощный процессор, поэтому 7, но вообще лучше не борщить и выбирать 4-6). Все виртуальные хосты будем настраивать отдельными конфигурационными файлами.
Добавляем виртуальный хост:
Для примера мой вариант vhost.conf для коммерческого сайта.
В примере учтены следующие моменты
- Связка NGINX+PHP-FPM без Apache
- Сайт под управлением Joomla
- Необходимо закрыть паролем доступ к админке
- Статику отдаём средствами самого nginx
- Динамику обрабатываем через php-fpm
- Необходимо избавиться от index.php в адресе
- Необходим редирект с www на без www
В результате сайт начинает просто летать по сравнению с LAMP.
Конфигурация сайта на Joomla
Если наш сайт на Joomla, вставляем в конфиг сайта
public $memcache_server_host = 'unix:///var/run/memcached/mem.socket'; public $memcache_server_port = '0';Конфигурация php
Основные настройки описаны в отдельной статье.
Проверяем, что unix-сокет php-fpm доступен для чтения и записи серверу nginx.
Настраиваем php.ini, выставляем в ноль переменную cgi.fix_pathinfo
Для примера мой вариант php.ini.
В примере особенно важно подчеркнуть
- max_input_vars = 9000 (ибо у нас Joomla + JoomShopping)
- short_open_tag = On (ибо не все пользуются полным тегом)
- post_max_sixe = 90M (ибо мы собираемся закачивать через админку видео)
- upload_max_filesixe = 90M (аналогично)
- date.timezone = Europe/Moscow (живём по Москвоскому времени)
Конфигурация php-fpm
Редактируем общие настройки php-fpm: /etc/php-fpm.conf
Для примера мой вариант php-fpm.conf
Обратите внимание на значения в этом файле! Они отличаются от значений по умолчанию.
Далее настраиваем обработку виртуальных хостов. Вот пример моего файла php-fpm-child.conf для коммерческого сайта. Очень удобно все настройки выполнять в отдельных файлах.
Конфигурация httpd
Как я уже говорил, мы готовим машину к обслуживанию связки nginx + php-fpm. Поэтому от конфигурации веб-сервера Apache можно вообще отказаться: будем его конфигурировать, если он понадобится в будущем. На данный момент можно ограничиться сменой порта на любой, отличный от 80, я выбрал 8080, чтобы nginx мог обращаться на этот порт за динамическим контентом от Apache.
Конфигурация СУБД
Основные настройки описаны в отдельной статье, которая создавалась для mySQL, но справедлива для MariaDB.
Поехали...
Теперь всё готово, перезапускаем веб-окружение
systemctl restart nginx.service && systemctl restart php-fpm.service
Если у нас всё получилось, то можем заходить в админку и проверять, как работает наша система
Обратите внимание на строчку "Интерфейс между веб-сервером и PHP".
Поздравляю, всё получилось! В нашем распоряжении выскоэффективный веб-сервер.
Возможные ошибки
Если в результате запуска всех сервисов мы видим 502 Bad Gateway, значит скорее всего мы забыли определить владельца файлов сокета (советы из интернета тут просто поражают нелепостью!). Идём в /run и назначаем на файлы сокета владельца apache:apache.
drach.pro
НАСТРОЙКА APACHE В CENTOS 7
В CentOS служба apache называется httpd. Когда я только знакомился с этим дистрибутивом, мне было непривычно. В Freebsd и Debian, с которыми я до этого работал служба веб сервера называлась apache, хотя где-то я замечал, кажется во фрюхе, что файл конфигурации имеет имя httpd.conf.
Теперь приступим к установке apache. В CentOS 7 это делается очень просто:
# yum install -y httpdДобавляем apache в автозагрузку:
# systemctl enable httpdЗапускаем apache в CentOS 7:
# systemctl start httpdПроверяем, запустился ли сервер:
# netstat -tulnp | grep httpd tcp6 0 0 :::80 :::* LISTEN 21586/httpdВсе в порядке, повис на 80-м порту, как и положено.
Теперь нужно открыть 80-й порт в iptable.
Уже сейчас можно зайти по адресу http://ip-address и увидеть картинку:
Теперь займемся настройкой apache. Я предпочитаю следующую структуру веб хостинга:
/web | раздел для размещения сайтов |
/web/site1.ru/www | директория для содержимого сайта |
/web/site1.ru/logs | директория для логов сайта |
Создаем подобную структуру:
# mkdir /web && mkdir /web/site1.ru && mkdir /web/site1.ru/www && mkdir /web/site1.ru/logsДальше редактируем файл конфигурации apache — httpd.conf по адресу /etc/httpd/conf. Первым делом проверим, раскомментированна ли строчка в самом конце:
IncludeOptional conf.d/*.confЕсли нет, раскомментируем и идем в каталог /etc/httpd/conf.d. Создаем там файл site1.ru.conf:
# mcedit /etc/httpd/conf.d/site1.ru.conf <VirtualHost *:80> ServerName site1.ru ServerAlias www.site1.ru DocumentRoot /web/site1.ru/www <Directory /web/site1.ru/www> Options FollowSymLinks AllowOverride All Require all granted </Directory> ErrorLog /web/site1.ru/logs/error.log CustomLog /web/site1.ru/logs/access.log common </VirtualHost>Перезапуск apache в centos
Теперь делаем restart apache:
# systemctl restart httpdЕсли возникли какие-то ошибки — смотрим лог apache /var/log/httpd/error_log. Если все в порядке, то проверим, нормально ли настроен наш виртуальный хост. Для этого создадим в папке /web/site1.ru/www файл index.html следующего содержания:
# mcedit /web/site1.ru/www/index.html <h2>Апач настроен!</h2> # chown apache. /web/site1.ru/www/index.htmlгде 192.168.1.5 ip адрес нашего веб сервера.
Теперь в браузере набираем адрес http://site1.ru. Если видим картинку:
значит все правильно настроили. Если какие-то ошибки, то идем смотреть логи. Причем в данном случае не общий лог httpd, а лог ошибок конкретного виртуального хоста по адресу /web/site1.ru/logs/error.log.
Сразу же обращу ваше внимание на настройку ротации логов виртуальных хостов. Частенько бывает, что если сразу не настроишь, потом забываешь. Но если сайт с хорошей посещаемостью, то логи будут расти стремительно и могут занять очень много места. Лучше настроить ротацию логов веб сервера сразу же после создания. Сделать это не сложно.
Чтобы настроить ротацию логов виртуальных хостов, необходимо отредактировать файл /etc/logrotate.d/httpd. Он создается во время установки apache и включает в себя настройку ротации стандартного расположения логов. А так как мы перенесли логи каждого виртуального хоста в индивидуальную папку, необходимо добавить эти папки в этот файл:
# mcedit /etc/logrotate.d/httpd /web/*/logs/*.log /var/log/httpd/*log { missingok notifempty sharedscripts delaycompress postrotate /bin/systemctl reload httpd.service > /dev/null 2>/dev/null || true endscript }Мы добавили одну строку в самое начала файла. Теперь логи всех виртуальных хостов в папке /web будут ротироваться по общему правилу.
В принципе, простейший веб сервер уже готов и им можно пользоваться создавая сайты со статическим содержимым, которым достаточно поддержки только html.
mozgovoy.in.ua
Настройка web сервера в CentOS 7
егодня займемся поднятием одной из наиболее востребованных ролей любого linux сервера, которые занимают в этом функциональном сегменте лидирующую роль. Настройка web сервера CentOS 7 на базе связки популярного http сервера apache, интерпретатора php и сервера баз данных mysql, или коротко — установка lamp. Данная связка является самой популярной конфигурацией на сегодняшний день среди веб хостинга. Хотя последнее время ей на пятки наступает та же компания, но на базе nginx, возможно уже и опередила, точных данных у меня нет на этот счет.
Web сервер на CentOS 7
Итак, наш веб сервер centos будет состоять из трех основных компонентов — http сервера apache, интерпретатора языка программирования php и сервера баз данных mysql. Познакомимся немного с каждым из них:
- Apache — http сервер или просто веб сервер апач. Является кросплатформенным ПО, поддерживающим практически все популярные операционные системы, в том числе и Windows. Ценится прежде всего за свою надежность и гибкость конфигурации, которую можно существенно расширить благодаря подключаемым модулям, которых существует великое множество. Из недостатков отмечают большую требовательность к ресурсам, по сравнению с другими серверами. Держать такую же нагрузку, как, к примеру, nginx, apache не сможет при схожих параметрах железа.
- PHP — язык программирования общего назначения, который чаще всего применяется в веб разработке. На сегодняшний день это самый популярный язык в этой области применения. Поддерживается практически всеми хостинг-провайдерами.
- Mysql — система управления базами данных. Завоевала свою популярность в среде малых и средних приложений, которых очень много в вебе. Так что, как и php, на сегодняшний день является самой популярной бд, использующейся на веб сайтах. Поддерживается большинством хостингов. В CentOS вместо mysql устанавливается mariadb — ответвление mysql. Они полностью совместимы, возможен в любой момент переход с одной субд на другую и обратно. Последнее время я встречал информацию, что mariadb пошустрее работает mysql и люди потихоньку перебираются на нее. На практике мне не довелось это наблюдать, так как никогда не работал с нагруженными базами данных. А в обычных условиях разница не заметна.
Хочу сразу уточнить, что разбираю базовую дефолтную настройку. Для улучшения быстродействия, повышения надежности и удобства пользования нужно установить еще несколько инструментов, о чем я расскажу отдельно. В общем случае для организации веб сервера будет достаточно того, что есть в этой статье.
Если у вас еще нет сервера, то вам надо выполнить установку CentOS 7. А если сервер уже установлен, то не забудьте его настроить. Рекомендую обратить внимание именно на настройку, так как там много полезной информации, которую в рамках этой статьи я не даю — обновление системы, настройка фаервола, установка редактора и многое другое.
Настройка apache в CentOS 7
В CentOS служба apache называется httpd. Когда я только знакомился с этим дистрибутивом, мне было непривычно. В Freebsd и Debian, с которыми я до этого работал служба веб сервера называлась apache, хотя где-то я замечал, кажется во фрюхе, что файл конфигурации имеет имя httpd.conf. До сих пор я не знаю, почему распространились оба эти названия. Был бы рад, если бы со мной кто-то поделился информацией на этот счет в комментариях.
Теперь приступим к установке apache. В CentOS 7 это делается очень просто:
# yum install -y httpdДобавляем apache в автозагрузку:
# systemctl enable httpdЗапускаем apache в CentOS 7:
# systemctl start httpdПроверяем, запустился ли сервер:
# netstat -tulnp | grep httpd tcp6 0 0 :::80 :::* LISTEN 21586/httpdВсе в порядке, повис на 80-м порту, как и положено. Уже сейчас можно зайти по адресу http://ip-address и увидеть картинку:
Теперь займемся настройкой apache. Я предпочитаю следующую структуру веб хостинга:
/web | раздел для размещения сайтов |
/web/site1.ru/www | директория для содержимого сайта |
/web/site1.ru/logs | директория для логов сайта |
Создаем подобную структуру:
# mkdir /web && mkdir /web/site1.ru && mkdir /web/site1.ru/www && mkdir /web/site1.ru/logs # chown -R apache. /webДальше редактируем файл конфигурации apache — httpd.conf по адресу /etc/httpd/conf. Первым делом проверим, раскомментированна ли строчка в самом конце:
IncludeOptional conf.d/*.confЕсли нет, раскомментируем и идем в каталог /etc/httpd/conf.d. Создаем там файл site1.ru.conf:
# mcedit /etc/httpd/conf.d/site1.ru.conf <VirtualHost *:80> ServerName site1.ru ServerAlias www.site1.ru DocumentRoot /web/site1.ru/www <Directory /web/site1.ru/www> Options FollowSymLinks AllowOverride All Require all granted </Directory> ErrorLog /web/site1.ru/logs/error.log CustomLog /web/site1.ru/logs/access.log common </VirtualHost>Перезапуск apache в centos
Теперь делаем restart apache:
# systemctl restart httpdЕсли возникли какие-то ошибки — смотрим лог apache /var/log/httpd/error_log. Если все в порядке, то проверим, нормально ли настроен наш виртуальный хост. Для этого создадим в папке /web/site1.ru/www файл index.html следующего содержания:
# mcedit /web/site1.ru/www/index.html <h2>Апач настроен!</h2> # chown apache. /web/site1.ru/www/index.htmlДальше в винде правим файл hosts, чтобы обратиться к нашему виртуальному хосту. Добавляем туда строчку:
192.168.1.25 site1.ruгде 192.168.1.25 ip адрес нашего веб сервера.
Теперь в браузере набираем адрес http://site1.ru. Если видим картинку:
значит все правильно настроили. Если какие-то ошибки, то идем смотреть логи. Причем в данном случае не общий лог httpd, а лог ошибок конкретного виртуального хоста по адресу /web/site1.ru/logs/error.log.
Сразу же обращу ваше внимание на настройку ротации логов виртуальных хостов. Частенько бывает, что если сразу не настроишь, потом забываешь. Но если сайт с хорошей посещаемостью, то логи будут расти стремительно и могут занять очень много места. Лучше настроить ротацию логов веб сервера сразу же после создания. Сделать это не сложно.
Чтобы настроить ротацию логов виртуальных хостов, необходимо отредактировать файл /etc/logrotate.d/httpd. Он создается во время установки apache и включает в себя настройку ротации стандартного расположения логов. А так как мы перенесли логи каждого виртуального хоста в индивидуальную папку, необходимо добавить эти папки в этот файл:
# mcedit /etc/logrotate.d/httpd /web/*/logs/*.log /var/log/httpd/*log { missingok notifempty sharedscripts delaycompress postrotate /bin/systemctl reload httpd.service > /dev/null 2>/dev/null || true endscript }Мы добавили одну строку в самое начала файла. Теперь логи всех виртуальных хостов в папке /web будут ротироваться по общему правилу.
В принципе, простейший веб сервер уже готов и им можно пользоваться. Но вряд ли сейчас найдутся сайты со статическим содержимым, которым достаточно поддержки только html. Так что продолжим нашу настройку.
Если вам необходимо организовать работу сайта по протоколу https, то воспользуйтесь руководством по настройке ssl в apache.
Установка php в CentOS 7
Для поддержки динамического содержимого сайтов выполним следующий шаг. Установим php в CentOS 7:
# yum install -y phpИ следом еще несколько полезных компонентов. Установим популярные модули для php:
# yum install -y php-mysql php-mbstring php-mcrypt php-devel php-xml php-gdВыполним перезапуск apache:
# systemctl restart httpdСоздадим файл в директории виртуального хоста и проверим работу php:
# mcedit /web/site1.ru/www/index.php <?php phpinfo(); ?> # chown apache. /web/site1.ru/www/index.phpЗаходим по адресу http://site1.ru/index.php
Вы должны увидеть вывод информации о php. Если что-то не так, возникли какие-то ошибки, смотрите лог ошибок виртуального хоста, php ошибки будут тоже там.
Где лежит php.ini
После установки часто возникает вопрос, а где хранятся настройки php? Традиционно они находятся в едином файле настроек. В CentOS php.ini лежит в /etc, прямо в корне. Там можно редактировать глобальные настройки для все виртуальных хостов. Персональные настройки каждого сайта можно сделать отдельно в файле конфигурации виртуального хоста, который мы сделали раньше. Давайте добавим туда несколько полезных настроек:
# mcedit /etc/httpd/conf.d/site1.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. Теперь в выводе phpinfo можно увидеть изменение настроек.
Обновление до php 5.6 в CentOS 7
В нашем примере мы установили на CentOS 7 php 5.4 из стандартного репозитория. А что делать, если нам нужна более новая версия, например php 5.6? В таком случае нужно выполнить обновление php.
Для этого подключим remi репозиторий:
# wget http://rpms.remirepo.net/enterprise/remi-release-7.rpm # rpm -Uvh remi-release-7*.rpmТеперь обновляем php 5.4 до php 5.6:
# yum --enablerepo=remi,remi-php56 install php php-common php-mysql php-mbstring php-mcrypt php-devel php-xml php-gdПерезапускаем apache:
# systemctl restart httpdИ идем смотреть вывод phpinfo — http://site1.ru/index.php
Отлично, мы обновили php до версии 5.6.
Установка MySQL в CentOS 7
Как я уже писал ранее, сейчас все большее распространение получает форк mysql — mariadb. Она имеет полную совместимость с mysql, так что можно смело пользоваться. Я предпочитаю использовать именно ее.
Устанавливаем mariadb на CentOS 7:
# yum install -y mariadb mariadb-serverДобавляем mariadb в автозапуск:
# systemctl enable mariadb.serviceЗапускаем mariadb:
# systemctl start mariadbПроверяем, запустилась или нет:
# netstat -tulnp | grep mysqld tcp 0 0 0.0.0.0:3306 0.0.0.0:* LISTEN 22276/mysqldОбращаю внимание, что она даже в системе отображается как сервис mysqld. Теперь запускаем стандартный скрипт настройки безопасности:
# /usr/bin/mysql_secure_installationНе буду приводить весь вывод работы этого скрипта, там все достаточно просто и понятно. Сначала задаем пароль для root (текущий пароль после установки пустой), потом удаляем анонимных пользователей, отключаем возможность подключаться root удаленно, удаляем тестового пользователя и базу.
Файл настроек mysql/mariadb лежит в /etc/my.cnf. Для обычной работы достаточно настроек по-умолчанию. Но если вы решите изменить их, не забудьте перезапустить службу баз данных.
Перезапуск mariadb/mysql в CentOS 7:
# systemctl restart mariadbНа этом все. Базовый функционал web сервера на CentOS 7 настроен.
Если вам нужен phpmyadmin воспользуйтесь моим подробным руководством по установке и настройке phpmyadmin на centos 7.
1.alhom.ru