🐹 CentOS 7: Настройка web-сервера Nginx и выход в Интернет со своим доменным именем.
Содержание:
1. Введение.
2. Что такое CentOS 7 Linux?
3. Установка и настройка CentOS 7.
4. Настройка и использование SSH.
5. Как временно или навсегда отключить SELinux.
6. Настройка часового пояса и синхронизации времени.
7. Подготовка жестких дисков.
8. Установка и настройка Postfix 3.
9. Работа со S.M.A.R.T. Утилита smartmontools. Утилита smartctl.
10. Первичная настройка брандмауэра web-сервера.
11. Установка и настройка nginx.
11.1. Репозиторий, установка и запуск nginx.
11.2. Модификация заглушки nginx.
11.3. Настройка конфигурации nginx.
11.4. Создание структуры каталогов nginx.
11.5. Конфигурация виртуального хоста.
11.6. Ключ для сохранения совершенной прямой секретности.
12. Установка и настройка php-fpm.sock — Fastcgi Process Manager.
13. Установка и настройка Let’s Encrypt.
14. Установка и настройка системы баз данных MariaDB.
15. Установка и настройка WordPress.
16. Ротация логов web-сервера Nginx.
17. Протоколы шифрования и шифрование.
18. Установка и настройка Redis.
19. Установка и настройка Prometheus Server.
20. Установка и настройка Grafana Server.
21. Организация резервного копирования на Яндекс.Диск.
22. Установка и настройка системы резервного копирования BackupPC.
23. Оригиналы источников информации.
На чем было собрано:
- CentOS 7 Linux x86_64 release 7.8.2003.
- Nginx 1.19.2.
- WordPress 5.5.1.
- PHP Version 7.4.10.
- MariaDB Server version 10.5.5.
- Ноутбук Emachines G525.
1. Введение.
В этой инструкции будет собран весь, доступный мне, актуальный материал (на момент осени 2020 года) по созданию и выводу в эфир web-сервера на базе CentOS 7, nginx, MariaDB и php-fpm. Максимально подробно рассмотрим все основные этапы по созданию и тонкой настройке данной информационной системы, организуем резервное копирование.
Статья будет разбита на информационные разделы и фрагменты с ссылками на другие разделы и фрагменты моего сайта. Это связано с тем, что все разделы приходится часто дополнять новыми интересными деталями, а так же актуализировать по меня обновлений версий любимых программ. Так же они могут быть использованы и в других информационных блоках, поэтому по ходу чтения данной инструкции настраивать некоторые модули web-сервера вы будете по указанным в инструкции ссылкам.
Некоторые пропущенные разделы инструкции я обязательно дополню позднее. Хочется сделать максимально качественное и полное руководство.
2. Что такое CentOS 7 Linux?
Для тек кто хочет узнать почему я люблю и уважаю CentOS 7 предлагаю ознакомиться с операционной системой CentOS 7. На этой редакции Linux и будет развернуть web-сервер.
Думаю, что данна информация будет полезна перед началом настройки web-сервера.
Ссылка: «CentOS 7: Что такое CentOS 7 Linux».
3. Установка и настройка CentOS 7.
Данный раздел зарезервирован для инструкции по установке и настройке CentOS 7, которая здесь скоро появится.
4. Настройка и использование SSH.
Прежде чем продолжить дальнейшую работу с сервером, необходимо решить как и кто будет на него попадать для работы и обслуживания.
Важным шагом будет настройка ssh доступа и правил работы с ней.
Ссылка: «CentOS 7: Настройка и использование SSH — Secure Shell».
Первоначально вполне достаточно сделать создание пары RSA-ключей и начать пользоваться сервером.
5. Как временно или навсегда отключить SELinux.
Когда вы устанавливаете CentOS 7, функция SELinux включена по умолчанию, из-за этого некоторые приложения в вашей системе могут фактически не поддерживать этот механизм безопасности. Чтобы такие приложения функционировали нормально, вам необходимо отключить SELinux.
Ссылка: «CentOS 7: Как временно или навсегда отключить SELinux».
Конечно в интернете имеется много способов настройки и эксплуатации этой системы, но в данной инструкции я, пока что, настраивать SELinux не буду.
6. Настройка часового пояса и синхронизации времени.
Очень важно иметь правильно настроенную систему учета времени на сервере, потому что сервер — существо электромеханическое и все процессы в нём ориентируются на точно время. Например, резервное копирование, мониторинг и синхронизация с другими системами в сети.
Чтобы время на сервере CentOS 7 соответствовало вашему часовому поясу, его можно изменить вручную.
Ссылка: «CentOS 7: Настройка часового пояса. Утилита tzdata».
Ссылка: «CentOS 7: Настройка синхронизация времени по Network Time Protocol. Утилита chrony».
Для корректной работы сервера требуется правильно настроить его синхронизацию времени по Network Time Protocol.
Внимание! В CentOS 7 данная утилита уже идет в комплекте даже при минимальной комплектации установщика. Устанавливать отдельно в CentOS 7 утилиту chrony не надо. В CentOS 8 данная утилита не идет в комплекте и потребуется её установка и настройка.
Ссылка: «CentOS 7: Настройка синхронизация времени по Network Time Protocol. Утилита ntp».
7. Подготовка жестких дисков.
На этом этапе очень удобно начинать планировать структуру расположения файловой системы сайта.
Например, всё содержимое сайта держать на скоростных дисках SSD, а ведение логов и накоплению метрических данных поручить HDD, с целью экономии ресурсов SSD.
Эти инструкции могут быть вам полезны:
- CentOS 7: Как добавить новый диск.
- CentOS 7: Как удалить все до единого разделы с диска. Утилита parted.
- CentOS 7: Проверка накопителя HDD на битые секторы. Утилиты badblocks, safecopy.
8. Установка и настройка Postfix 3.
Во время работы сервера будет происходить много интересных событий, о которых вас будут уведомлять соответствующие программные службы. Так как сервер не знает куда вам отправлять уведомления, то он всё будет складировать в ваш виртуальный «почтовый ящик» у себя в памяти. Программа Postfix 3 требуется для отправки электронной почты с внутреннего системного «почтового ящика» на ваш внешний почтовый ящик.
9. Работа со S.M.A.R.T. Утилита smartmontools. Утилита smartctl.
Что самое важное на web-сервере? Правильно — ваша информация, которую вы старательно в него вводите и верстаете! Хранится информация на дисках, диски под постоянной нагрузкой и со временем их ресурс расходуется, они начинают давать сбои и информация может пропасть. Чтобы не быть внезапно опечаленным выходом жесткого диска из строя и пропажей ценной информации, следует настроить систему слежения на исправностью жестких дисков — S.M.A.R.T.
Ссылка: «CentOS 7: Работа со S.M.A.R.T. Утилита smartmontools. Утилита smartctl.».
10. Первичная настройка брандмауэра web-сервера.
Для работы web-сервера требуется пробросить 80 порт и 443 порт через брандмауэр.
Чтобы узнать, занят ли порт 80, введите:
# netstat -na | grep ':80.*LISTEN'
Чтобы узнать, занят ли порт 443, введите:
# netstat -na | grep ':443.*LISTEN'
Если команда не вернула никакого результата, значит, порт свободен.
11. Установка и настройка nginx.
11.1. Репозиторий, установка и запуск nginx.
Для установки самой свежей стабильной версии nginx на CentOS 7 подключим оригинальный официальный репозиторий. Лучше использовать оригинальный официальный репозиторий nginx по следующей причине — удобное начальное расположение и формат конфигурационных файлов. Устанавливая софт из официальных репозиториев можно быть уверенным, что имеешь самую свежую и актуальную версию nginx, так и расположение и формат конфигурационных файлов будет одинаковый во всех системах.
Банальный пример. Если ставить nginx из официального репозитория CentOS 8, настройка дефолтного виртуального хоста будет прямо в основном конфиге nginx.conf
. Мне лично это не удобно, так как в этом файле я храню набор настроек без привязки к виртуальным хостам. Если установить nginx из официального репозитория, конфигурация дефолтного хоста будет в отдельном конфиге default.conf
.
Подключаем репозиторий nginx в CentOS 7. Лучшее использовать mainline версию. Она имеет все нововведения на борту и достаточно стабильна. Если вы хотите стабильную версию, то используйте репозиторий stable.
Создадим конфигурационный файл репозитория /etc/yum.repos.d/nginx.repo
.
# mcedit /etc/yum.repos.d/nginx.repo
[nginx-mainline] name=nginx mainline repo baseurl=http://nginx.org/packages/mainline/centos/$releasever/$basearch/ gpgcheck=1 enabled=1 gpgkey=https://nginx.org/keys/nginx_signing.key module_hotfixes=true
Теперь устанавливаем nginx на сервер.
# yum -y install nginx
Запускаем nginx и добавляем в автозагрузку.
# systemctl start nginx
# systemctl enable nginx
Проверим старт nginx в системе:
# systemctl status nginx
Проверяем, запустился ли web-сервер. Для этого идем по ссылке http://ваш-IP-адрес/
. Вы должны увидеть стандартную страницу заглушку.
Вы должны увидеть стандартную страницу заглушку, если страница не открывается, то скорее всего вы не настроили брандмауэр на порт 80.
11.2. Модификация заглушки nginx.
Примечание! Если вам не нравится данная стандартная скучная картинка, то ее всегда можно разнообразить красивой заглушкой на HTML5. Вот инструкция «Nginx: Модификация базовой страницы приветствия. Заглушка на HTML5».
11.3. Настройка конфигурации nginx.
Создадим резервную копию главного файла конфигурации nginx:
# cp /etc/nginx/nginx.conf /etc/nginx/nginx.conf.original
Теперь выполним небольшую начальную настройку главного конфигурационного файла nginx.conf
. В нём содержится общая информация по работе nginx, правила шифрования информации при передаче клиенту, время ожидания клиентов, степень сжатия информации для передачи и так далее.
Начнем с модификации основного конфигурационного файла/etc/nginx/nginx.conf
.
# mcedit /etc/nginx/nginx.conf
Конфигурация nginx — nginx.conf
:
Сохраните конфиг и проверьте его корректность командой:
# nginx -t
Отзыв:
Если ошибок нет, то можно применить.
# nginx -s reload
11.4. Создание структуры каталогов nginx.
Теперь создадим структуру каталогов для сайтов. Я обычно все сайты размещаю отдельно на отдельно смонтированном под эти цели SSD, например в /web/sites
. Это может быть как каталог, так и специально выделенный скоростной диск.
И так, создадим пару каталогов: www
— для файлов сайта, log
— для ведения логирования событий для этого сайта.
# mkdir -p /web/sites/site1/{www,log}
Разрешим nginx там хозяйничать:
# chown -R nginx:nginx /web/sites/
Создадим файл конфигурации nginx для виртуального хоста сайта site1
.
Внимание! Я сразу буду делать их с учетом https, который мы настроим позже. Так что после создания НЕ НАДО перезапускать web-сервер и проверять работу — будут ошибки, потому что требуется еще создать сертификаты шифрования. Виртуальный хост сайта показан на примере wordpress. Конфигурация собрана на основе рекомендаций из официальной документации конкретно для web-сервера nginx .
# mcedit /etc/nginx/conf.d/site1.conf
11.5. Конфигурация виртуального хоста.
Конфигурация для основного сайта — /etc/nginx/conf.d/site1.conf
:
В данной конфигурации настроены все необходимые редиректы, при этом отключен редирект файла robots.txt. Он отдельно отдается по http и https.
11.6. Ключ для сохранения совершенной прямой секретности.
Сохраняем конфигурации хостов и движемся дальше. Пока nginx перезапускать не надо. Некоторые сущности, которые упоминаются в конфигурации, еще не настроены. Одну из них сразу добавим, чтобы не забыть. Нам надо сформировать файл dhparam.pem. Процесс длится долго, до получаса на слабых компьютерах. Этот файл нужен для повышения безопасности и получения максимального рейтинга ssl.
Теперь о ssl_dhparam
он располагается в каталоге /etc/ssl/certs/dhparam.pem
— это нужно, чтобы у нас заработал Forward Secrecy. Прямая секретность означает, что если третья сторона узнает какой-либо сеансовый ключ, то она сможет получить лишь доступ к данным, защищенным лишь этим ключом. Для сохранения совершенной прямой секретности ключ, используемый для шифрования передаваемых данных, не должен использоваться для получения каких-либо дополнительных ключей. Также, если ключ, используемый для шифрования передаваемых данных, был получен (derived) на базе какого-то еще ключевого материала, этот материал не должен использоваться для получения каких-либо других ключей.
Сгенерировать ключ можно так:
# openssl dhparam -out /etc/ssl/certs/dhparam.pem 4096
Запускаем:
Долго-долго ждем… Минут 5-30. Скорость генерации зависит от реальных физических параметров вашего центрального процессора.
Ура! Сгенерировался-таки.
12. Установка и настройка php-fpm.sock — Fastcgi Process Manager.
Fastcgi Process Manager — php-fpm менеджер процессов, используется в связке с nginx + php.
Ссылка: «CentOS 7: Установка PHP 7.4 и настройка php-fpm.sock — Fastcgi Process Manager для Nginx».
13. Установка и настройка Let’s Encrypt.
Наша следующая задача — получить бесплатные сертификаты шифрования.
Ссылка: «CentOS 7: Настройка бесплатного ssl-сертификата Let’s Encrypt».
14. Установка и настройка системы баз данных MariaDB.
Для хранения информации на сервере используется MariaDB — ответвление от системы управления базами данных MySQL.
Ссылка: «CentOS 7: Установка и настройка системы баз данных MariaDB. Создание базы данных.»
15. Установка и настройка WordPress.
Для работы над сайтом требуется движок сайта, например, WordPress.
Ссылка: «CentOS 7: Установка и настройка WordPress».
16. Ротация логов web-сервера Nginx.
Еще одна важная вещь в настройке web-сервера — ротация логов виртуальных хостов. Если этого не сделать, то через какое-то, обычно продолжительное, время возникает проблема в связи с огромным размером лог-файлов на жестких дисках.
Ссылка: «CentOS 7: Ротация логов web-сервера Nginx».
17. Протоколы шифрования и шифрование.
На этом этапе работы требуется решить, какие протоколы передачи информации будет использовать ваш сервер Nginx.
TLS (англ. Transport Layer Security — Протокол защиты транспортного уровня), как и его предшественник SSL (англ. Secure Sockets Sayer — Слой защищённых сокетов), — криптографические протоколы, обеспечивающие защищённую передачу данных между узлами в сети Интернет.
Протестируем работу безопасности передачи данных с нашего сайта в Интернет по методике сайта ssllabs.com – Бесплатная онлайн-служба выполняет глубокий анализ конфигурации любого web-сервера SSL в общедоступном Интернете.
Если использовать старые протоколы TLS 1.0 и TLS 1.1, но мы этого делать не будем!
ssl_protocols TLSv1.3 TLSv1.2 TLSv1.1 TLSv1;
Итоговая оценка «B«, как видно оценка была снижена от того, что наш сайт поддерживает старые протоколы TLS 1.0 и TLS 1.1.
Если от них отказываться, тот на сайт будет проблематично попасть с мобильных клиентов, где про актуальные обновления браузеров и слышать не слышали.
Мы с вами в этой инструкции используем только новые протоколы TLS 1.2 и TLS 1.3:
ssl_protocols TLSv1.2 TLSv1.3;
При этом мы точно знаем что у всех клиентов сайт открывается настолько быстро, насколько это возможно без использования слабых шифров: все современные браузеры используют ECDHE.
Можно еще качнуть «силу» заменой строки алгоритмов на такие:
ssl_ciphers 'ECDHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-RSA-AES256-SHA384'; ssl_ecdh_curve secp384r1;
Примечание! В представленной в этой инструкции nginx.conf
настройки именно такие.
Внимание! Если результаты теста прокрутить до раздела Handshake Simulation, то мы увидим что на наш сайт не попадут пользователи IE любых версий младше 11, Java до SE 8, Android до версии 4.3 и даже некоторые версии Safari. Про софт, собранный с OpenSSL версии младше 0.9.8, даже и идет речи.
Есть и ещё одна проблема: производительность. Наш ключ на 4096 бит непосредственно влияет на скорость установки соединения, при этом не слишком усиливает защиту. Шифры на 256 бит тоже не помогают ускорить соединение, что касается мобильных устройств с маломощными процессорами и прочих клиентов без AES-NI (аппаратного ускорения).
Подпись на стороне сервера делается в семь раз медленнее. Проверка подписи на клиенте — в 3.6 раза медленнее. На другом железе тенденция остаётся та же. Этот проигрыш в скорости — плата за усиление стойкости шифра на какие-то 16%.
Но для тех кто считает, что устаревшим технологиям на сайте не место, можно и разогнаться до «соточки» в категории А+!
18. Установка и настройка Redis.
Данный раздел зарезервирован для инструкции по установке и настройке Redis.
19. Установка и настройка Prometheus Server.
Данный раздел зарезервирован для инструкции по установке и настройке Prometheus Server.
20. Установка и настройка Grafana Server.
Данный раздел зарезервирован для инструкции по установке и настройке Grafana Server.
21. Организация резервного копирования на Яндекс.Диск.
Данный раздел зарезервирован для инструкции по установке и настройке Яндекс.Диска.
22. Установка и настройка системы резервного копирования BackupPC.
Данный раздел зарезервирован для инструкции по установке и настройке BackupPC.
23. Оригиналы источников информации.
- serveradmin.ru «Настройка web сервера nginx, php-fpm, php7 на CentOS 8» от 28.02.2020.
- gist.github.com «Nginx SSL/TLS configuration for «A+» Qualys SSL Labs rating».
- habr.com «OpenSSL, ssl_ciphers и nginx: прокачиваем на 100%».
- ru.wikipedia.org «TLS».