fbpx

Особенности настройки и конфигурации веб-сервера

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

Выбор операционной системы: Windows vs Linux

При выборе операционной системы для веб-сервера большинство профессионалов отдают предпочтение Linux по следующим причинам:

  • Стабильность и надежность
  • Более высокая производительность
  • Низкие требования к аппаратным ресурсам
  • Бесплатность и открытый исходный код
  • Широкий выбор инструментов для администрирования

Популярные дистрибутивы Linux для веб-серверов включают Ubuntu Server, CentOS и Debian. Тем не менее, Windows Server также имеет свои преимущества, особенно в корпоративной среде, где используются другие продукты Microsoft.

Установка Linux (на примере Ubuntu Server):

  1. Загрузите ISO-образ Ubuntu Server с официального сайта.
  2. Создайте загрузочный USB-накопитель с помощью Rufus или BalenaEtcher.
  3. Загрузите сервер с USB-накопителя и следуйте инструкциям установщика.
  4. Выберите минимальную установку и добавьте пакет OpenSSH Server.
  5. Необходимые утилиты и их установка

После установки операционной системы необходимо установить и настроить следующие компоненты:

 

Веб-сервер (Apache или Nginx)

Установка Apache:

sudo apt update

sudo apt install apache2

Установка Nginx:

sudo apt update

sudo apt install nginx

 

PHP (если требуется)

sudo apt install php php-fpm php-mysql

 

База данных (MySQL или PostgreSQL)

Установка MySQL:

sudo apt install mysql-server

sudo mysql_secure_installation

Установка PostgreSQL:

sudo apt install postgresql postgresql-contrib

 

Утилиты для мониторинга и управления

htop (мониторинг системных ресурсов):

sudo apt install htop

iftop (мониторинг сетевого трафика):

sudo apt install iftop

Fail2Ban (защита от брутфорс-атак):

sudo apt install fail2ban

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

 

Базовая конфигурация

  • Процессор: 1-2 ядра
  • Оперативная память: 2-4 ГБ
  • Жесткий диск: 10-20 ГБ SSD

Данная конфигурация предназначена для размещения и обслуживания веб-ресурсов с невысокой интенсивностью входящих запросов и ограниченным объемом статического контента. Подходит для маломасштабных веб-сайтов, таких как личные блоги, презентационные страницы (landing page), а также в качестве песочницы (sandbox environment) для разработки и тестирования.

 

Средняя конфигурация

  • Процессор: 4 ядра
  • Оперативная память: 8-16 ГБ
  • Жесткий диск: 50-100 ГБ SSD

Конфигурация рассчитана на более интенсивную обработку данных и обслуживание динамических веб-приложений, которые требуют оперативной обработки сервером большого количества запросов, а также поддерживают сложные операции с базами данных. Оптимально подходит для интернет-магазинов среднего размера, сайтов на базе CMS (Content Management System), форумов с активной пользовательской активностью.

 

Высокая конфигурация

  • Процессор: 8+ ядер
  • Оперативная память: 32+ ГБ
  • Жесткий диск: 200+ ГБ SSD или NVMe SSD

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

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

Обеспечение безопасности

Настройка брандмауэра (UFW)

sudo apt install ufw

sudo ufw default deny incoming

sudo ufw default allow outgoing

sudo ufw allow ssh

sudo ufw allow http

sudo ufw allow https

sudo ufw enable

 

Настройка SSH

Отредактируйте файл /etc/ssh/sshd_config:

sudo nano /etc/ssh/sshd_config

Внесите следующие изменения:

  • Измените порт SSH (например, на 2222)
  • Отключите root login: PermitRootLogin no
  • Используйте только SSH-ключи: PasswordAuthentication no

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

sudo systemctl restart sshd

 

Настройте автоматическое обновление системы:

sudo apt install unattended-upgrades

sudo dpkg-reconfigure —priority=low unattended-upgrades

 

Настройка SELinux или AppArmor

На Ubuntu Server по умолчанию используется AppArmor. Убедитесь, что он активен:

sudo aa-status

Если нужно установить профили для конкретных приложений:

sudo apt install apparmor-profiles apparmor-utils

 

Настройка SSL/TLS

Установите Certbot для автоматического получения и обновления SSL-сертификатов Let’s Encrypt:

sudo apt install certbot python3-certbot-apache

Для Nginx:

sudo apt install certbot python3-certbot-nginx

Получение сертификата:

sudo certbot —apache

или для Nginx:

sudo certbot –nginx

 

Установка и настройка Fail2Ban

sudo apt-get install fail2ban

Создайте локальную конфигурацию:

sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local

sudo nano /etc/fail2ban/jail.local

Настройте параметры по вашему усмотрению, например:

[sshd]

enabled = true

port = ssh

filter = sshd

logpath = /var/log/auth.log

maxretry = 3

bantime = 3600

Сохраните файл и перезапустите Fail2Ban:

sudo systemctl restart fail2ban

 

Установка и настройка RootKit Hunter

sudo apt-get install rkhunter

Обновите базу данных RKHunter:

sudo rkhunter —update

Выполните первоначальное сканирование:

sudo rkhunter —propupd

sudo rkhunter —check

Настройте автоматическое сканирование:

sudo nano /etc/default/rkhunter

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

CRON_DAILY_RUN=»true»

Обеспечение сохранности данных

Настройка RAID

Если у вас несколько дисков, настройте программный RAID для обеспечения отказоустойчивости:

sudo apt install mdadm

sudo mdadm —create —verbose /dev/md0 —level=1 —raid-devices=2 /dev/sda1 /dev/sdb1

 

Настройка резервного копирования

Установите Duplicity для создания зашифрованных резервных копий:

sudo apt install duplicity

Создайте скрипт для автоматического резервного копирования и добавьте его в crontab.

 

Настройка автоматического резервного копирования

Создайте скрипт для резервного копирования:

#!/bin/bash

BACKUP_DIR=»/path/to/backup/directory»

DATE=$(date +%Y-%m-%d)

MYSQL_USER=»your_mysql_user»

MYSQL_PASSWORD=»your_mysql_password»

 

# Backup MySQL databases

mysqldump -u $MYSQL_USER -p$MYSQL_PASSWORD —all-databases > $BACKUP_DIR/mysql_backup_$DATE.sql

 

# Backup website files

tar -czf $BACKUP_DIR/website_backup_$DATE.tar.gz /var/www/

 

# Backup configuration files

tar -czf $BACKUP_DIR/config_backup_$DATE.tar.gz /etc/apache2/ /etc/nginx/ /etc/php/

 

# Remove backups older than 30 days

find $BACKUP_DIR -type f -mtime +30 -delete

Добавьте скрипт в crontab для ежедневного выполнения:

0 2 * * * /path/to/backup_script.sh

 

Настройка удаленного хранения резервных копий

Установите rclone для синхронизации резервных копий с облачным хранилищем:

curl https://rclone.org/install.sh | sudo bash

Настройте rclone для работы с вашим облачным провайдером:

rclone config

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

rclone sync $BACKUP_DIR remote:server-backups

Максимизация времени бесперебойной работы (Uptime)

Настройка мониторинга и автоматического перезапуска сервисов

Установите Monit:

sudo apt install monit

Настройте мониторинг критических сервисов в /etc/monit/monitrc:

check process apache2 with pidfile /var/run/apache2/apache2.pid

 start program = «/etc/init.d/apache2 start»

 stop program = «/etc/init.d/apache2 stop»

 if failed host 127.0.0.1 port 80 protocol http then restart

 if 5 restarts within 5 cycles then timeout

 

Настройка логротации

Отредактируйте конфигурацию logrotate для веб-сервера и других критических сервисов:

sudo nano /etc/logrotate.d/apache2

Пример конфигурации:

/var/log/apache2/*.log {

 daily

 missingok

 rotate 14

 compress

 delaycompress

 notifempty

 create 640 root adm

 sharedscripts

 postrotate

 if /etc/init.d/apache2 status > /dev/null ; then

 /etc/init.d/apache2 reload > /dev/null

 fi

 endscript

}

Настройка мониторинга

Установка Prometheus и Grafana

Установите Prometheus:

wget https://github.com/prometheus/prometheus/releases/download/v2.30.3/prometheus-2.30.3.linux-amd64.tar.gz

tar xvfz prometheus-*.tar.gz

cd prometheus-*

./prometheus

Установите Grafana:

sudo apt-get install -y software-properties-common

sudo add-apt-repository «deb https://packages.grafana.com/oss/deb stable main»

wget -q -O — https://packages.grafana.com/gpg.key | sudo apt-key add —

sudo apt-get update

sudo apt-get install Grafana

 

Настройка Node Exporter

Node Exporter позволяет собирать системные метрики для Prometheus:

wget https://github.com/prometheus/node_exporter/releases/download/v1.2.2/node_exporter-1.2.2.linux-amd64.tar.gz

tar xvfz node_exporter-*.tar.gz

cd node_exporter-*

./node_exporter

Добавьте Node Exporter в автозагрузку, создав файл службы:

sudo nano /etc/systemd/system/node_exporter.service

Содержимое файла:

[Unit]

Description=Node Exporter

After=network.target

 

[Service]

User=node_exporter

ExecStart=/usr/local/bin/node_exporter

 

[Install]

WantedBy=multi-user.target

Активируйте и запустите службу:

sudo systemctl daemon-reload

sudo systemctl enable node_exporter

sudo systemctl start node_exporter

 

Настройка алертинга

Установите Alertmanager:

wget https://github.com/prometheus/alertmanager/releases/download/v0.23.0/alertmanager-0.23.0.linux-amd64.tar.gz

tar xvfz alertmanager-*.tar.gz

cd alertmanager-*

./alertmanager

Настройте правила алертинга в Prometheus и интеграцию с системами оповещения (например, email, Slack, PagerDuty).

Оптимизация производительности

Настройка кэширования

Для Apache установите и настройте mod_cache:

sudo a2enmod cache

sudo a2enmod cache_disk

Для Nginx настройте кэширование в конфигурационном файле:

http {

 proxy_cache_path /path/to/cache levels=1:2 keys_zone=my_cache:10m max_size=10g inactive=60m use_temp_path=off;

 

 server {

 location / {

 proxy_cache my_cache;

 proxy_cache_use_stale error timeout http_500 http_502 http_503 http_504;

 }

 }

}

 

Оптимизация настроек PHP

Отредактируйте php.ini:

sudo nano /etc/php/7.4/fpm/php.ini

Оптимизируйте следующие параметры:

max_execution_time = 300

memory_limit = 256M

post_max_size = 100M

upload_max_filesize = 100M

max_input_time = 300

max_input_vars = 3000

 

Настройка пула процессов PHP-FPM

Установите PHP OPcache:

sudo apt-get install php-opcache

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

sudo nano /etc/php/7.4/fpm/php.ini

Добавьте или измените следующие строки:

opcache.enable=1

opcache.memory_consumption=128

opcache.interned_strings_buffer=8

opcache.max_accelerated_files=4000

opcache.revalidate_freq=60

opcache.fast_shutdown=1

Перезапустите PHP-FPM:

sudo systemctl restart php7.4-fpm

 

Оптимизация базы данных

Для MySQL отредактируйте my.cnf:

sudo nano /etc/mysql/my.cnf

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

innodb_buffer_pool_size = 1G

innodb_log_file_size = 256M

innodb_flush_log_at_trx_commit = 2

innodb_flush_method = O_DIRECT

Для PostgreSQL отредактируйте postgresql.conf:

sudo nano /etc/postgresql/13/main/postgresql.conf

Оптимизируйте следующие параметры:

shared_buffers = 256MB

effective_cache_size = 768MB

work_mem = 4MB

maintenance_work_mem = 64MB

wal_buffers = 8MB

 

Настройка кэширования Nginx

Установите модуль кэширования Nginx:

sudo apt-get install nginx-extras

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

sudo nano /etc/nginx/nginx.conf

Добавьте следующие строки в секцию http:

fastcgi_cache_path /var/cache/nginx levels=1:2 keys_zone=MYAPP:100m inactive=60m;

fastcgi_cache_key «$scheme$request_method$host$request_uri»;

Затем отредактируйте конфигурацию вашего сайта:

sudo nano /etc/nginx/sites-available/your_domain

Добавьте следующие строки внутри блока location ~ .php$:

fastcgi_cache MYAPP;

fastcgi_cache_valid 200 60m;

Перезапустите Nginx:

sudo systemctl restart nginx

 

Обеспечение безопасности приложений

Настройка Web Application Firewall (WAF)

Установите и настройте ModSecurity для Apache:

sudo apt install libapache2-mod-security2

sudo a2enmod security2

sudo systemctl restart apache2

Для Nginx установите модуль ModSecurity:

sudo apt install nginx-extras

Затем настройте ModSecurity в конфигурации Nginx.

 

Настройка защиты от DDoS-атак

Установите и настройте Fail2Ban:

sudo apt install fail2ban

sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local

sudo nano /etc/fail2ban/jail.local

Настройте правила для защиты от брутфорс-атак и других типов атак.

 

Настройка HTTPS Strict Transport Security (HSTS)

Добавьте заголовок HSTS в конфигурацию веб-сервера:

Для Apache:

<VirtualHost *:443>

 Header always set Strict-Transport-Security «max-age=31536000; includeSubDomains»

</VirtualHost>

Для Nginx:

server {

 listen 443 ssl;

 add_header Strict-Transport-Security «max-age=31536000; includeSubDomains» always;

}

Документирование и ведение журнала изменений

  1. a) Создание документации по настройке сервера

Создайте README.md файл в домашней директории root пользователя:

sudo nano /root/README.md

Документируйте все важные настройки, пароли (в зашифрованном виде) и процедуры.

  1. b) Настройка системы контроля версий для конфигурационных файлов

Установите Git:

sudo apt install git

Инициализируйте репозиторий для конфигурационных файлов:

cd /etc

sudo git init

sudo git add apache2 nginx php mysql

sudo git commit -m «Initial commit of server configuration files»

  1. c) Ведение журнала изменений

Создайте файл CHANGELOG.md:

sudo nano /root/CHANGELOG.md

Документируйте все изменения в конфигурации сервера, обновления и другие важные события.

Мониторинг и анализ логов

Настройка централизованного сбора логов

Установите и настройте Filebeat для отправки логов:

curl -L -O https://artifacts.elastic.co/downloads/beats/filebeat/filebeat-7.13.0-amd64.deb

sudo dpkg -i filebeat-7.13.0-amd64.deb

Настройте Filebeat для сбора логов Apache/Nginx, PHP и системных логов:

sudo nano /etc/filebeat/filebeat.yml

 

Настройка системы анализа логов

Установите и настройте ELK Stack (Elasticsearch, Logstash, Kibana) или Graylog для анализа логов.

 

Установка и настройка ELK Stack (Elasticsearch, Logstash, Kibana)

Установите Elasticsearch:

wget -qO — https://artifacts.elastic.co/GPG-KEY-elasticsearch | sudo apt-key add —

sudo apt-get install apt-transport-https

echo «deb https://artifacts.elastic.co/packages/7.x/apt stable main» | sudo tee /etc/apt/sources.list.d/elastic-7.x.list

sudo apt-get update && sudo apt-get install elasticsearch

Настройте Elasticsearch:

sudo nano /etc/elasticsearch/elasticsearch.yml

Измените следующие параметры:

network.host: localhost

http.port: 9200

Запустите Elasticsearch:

sudo systemctl start elasticsearch

sudo systemctl enable elasticsearch

Установите Logstash:

sudo apt-get install logstash

Создайте конфигурационный файл для Logstash:

sudo nano /etc/logstash/conf.d/logstash.conf

Добавьте базовую конфигурацию:

input {

 file {

 path => «/var/log/apache2/access.log»

 type => «apache-access»

 }

}

 

output {

 elasticsearch {

 hosts => [«localhost:9200»]

 }

}

Запустите Logstash:

sudo systemctl start logstash

sudo systemctl enable logstash

Установите Kibana:

sudo apt-get install kibana

Настройте Kibana:

sudo nano /etc/kibana/kibana.yml

Измените следующие параметры:

server.port: 5601

server.host: «localhost»

elasticsearch.hosts: [«http://localhost:9200»]

Запустите Kibana:

sudo systemctl start kibana

sudo systemctl enable kibana

 

Автоматизация обновлений и патчей

Настройка автоматических обновлений безопасности

Установите unattended-upgrades:

sudo apt install unattended-upgrades

Настройте автоматические обновления:

sudo dpkg-reconfigure -plow unattended-upgrades

 

Создание скриптов для регулярного обновления приложений

Создайте скрипт для обновления приложений:

#!/bin/bash

# Update system packages

sudo apt update && sudo apt upgrade -y

 

# Update PHP Composer packages

cd /var/www/your_app

composer update

 

# Update Node.js packages

npm update

 

# Restart services

sudo systemctl restart apache2 php7.4-fpm mysql

Добавьте скрипт в crontab для еженедельного выполнения:

0 3 * * 0 /path/to/update_script.sh

 

Установка и настройка Unattended Upgrades

sudo apt-get install unattended-upgrades

Настройте автоматические обновления:

sudo dpkg-reconfigure -plow unattended-upgrades

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

sudo nano /etc/apt/apt.conf.d/50unattended-upgrades

Раскомментируйте и настройте следующие строки в файле конфигурации:

Unattended-Upgrade::Allowed-Origins {

 «${distro_id}:${distro_codename}»;

 «${distro_id}:${distro_codename}-security»;

 «${distro_id}ESMApps:${distro_codename}-apps-security»;

 «${distro_id}ESM:${distro_codename}-infra-security»;

};

 

Unattended-Upgrade::Remove-Unused-Dependencies «true»;

Unattended-Upgrade::Automatic-Reboot «true»;

Unattended-Upgrade::Automatic-Reboot-Time «02:00»;

Сохраните файл и перезапустите службу:

sudo systemctl restart unattended-upgrades

Оптимизация для высоких нагрузок

Настройка балансировки нагрузки

Установите и настройте HAProxy:

sudo apt install haproxy

Настройте HAProxy для распределения нагрузки между несколькими серверами:

sudo nano /etc/haproxy/haproxy.cfg

 

Внедрение кэширования на уровне приложения

Установите и настройте Redis:

sudo apt install redis-server

Настройте ваше приложение для использования Redis в качестве кэша.

 

Оптимизация настроек ядра Linux

Отредактируйте /etc/sysctl.conf:

sudo nano /etc/sysctl.conf

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

net.core.somaxconn = 65535

net.ipv4.tcp_max_syn_backlog = 65535

net.core.netdev_max_backlog = 65535

net.ipv4.ip_local_port_range = 1024 65535

Применить изменения:

sudo sysctl -p

Тестирование и валидация настроек

Проведение нагрузочного тестирования

Установите Apache Benchmark (ab) для проведения нагрузочных тестов:

sudo apt install apache2-utils

Выполните тест:

ab -n 1000 -c 100 https://your-website.com/

 

Проверка безопасности

Выполните сканирование безопасности с помощью Nmap и Nikto:

sudo apt install nmap nikto

nmap -sV -p- your-website.com

nikto -h your-website.com

 

Валидация конфигурации

Проверьте конфигурацию Apache:

sudo apache2ctl configtest

Для Nginx:

sudo nginx -t

Документирование процедур восстановления

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

Создайте документ с подробным описанием шагов для восстановления сервера в случае сбоя:

sudo nano /root/disaster_recovery_plan.md

 

Тестирование процедур восстановления

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

Настройка системы контроля версий для кода приложения

Установка и настройка Git

sudo apt install git

Настройка Git-репозитория для приложения

cd /var/www/your_app

git init

git add .

git commit -m «Initial commit»

 

Настройка автоматического развертывания

Установите и настройте GitLab Runner или Jenkins для автоматического развертывания приложения при обновлении кода.

Оптимизация сетевых настроек

Настройка TCP keepalive

Отредактируйте /etc/sysctl.conf:

sudo nano /etc/sysctl.conf

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

net.ipv4.tcp_keepalive_time = 60

net.ipv4.tcp_keepalive_intvl = 10

net.ipv4.tcp_keepalive_probes = 6

 

Оптимизация TCP window scaling

Добавьте в /etc/sysctl.conf:

net.core.rmem_max = 16777216

net.core.wmem_max = 16777216

net.ipv4.tcp_rmem = 4096 87380 16777216

net.ipv4.tcp_wmem = 4096 65536 16777216

Применить изменения:

sudo sysctl -p

Финальная проверка и тестирование

Проверка конфигурации Nginx:

sudo nginx -t

Проверка статуса всех служб:

sudo systemctl status nginx php7.4-fpm mysql fail2ban

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

Проверка SSL-сертификата: Посетите https://www.ssllabs.com/ssltest/ и введите ваш домен для проверки настройки SSL.

Тестирование безопасности: Выполните сканирование уязвимостей с помощью онлайн-инструментов или специализированного ПО.

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

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

АКЦИЯ! Бесплатное обслуживание до конца месяца!
Спасибо!
Ваши данные успешно отправлены.
Другие статьи
Топ программ для защиты сервера на Windows
Рассмотрим популярные инструменты и программы для обеспечения безопасности Windows Server. Sophos Intercept X for...
Топ-10 программ, утилит для системных администраторов
Рассмотрим топ-10 программ и утилит, которые могут быть полезны для системного администратора. Microsoft PowerShell ...
Администрирование сервера Linux – обеспечиваем безопасность портов
В Linux и других системах используются порты для организации сетевых соединений. Они делятся на следующие диапазоны: ...
Обзор дистрибутивов Linux для системных администраторов
Linux является одной из самых популярных операционных систем среди системных администраторов благодаря её гибкости,...
10 необычных трюков IT-безопасности для вашего бизнеса!
Обеспечение IT-безопасности становится ключевым аспектом для любого бизнеса. Однако, помимо стандартных методов защиты,...
Чек-лист проверки на взлом IT-инфраструктуры компании
Рассматриваем угрозы IT-инфраструктуре компаний и способы их устранения. Корпоративная сеть Антивирусная защита ...
Лучшие утилиты для администрирования сервера на Windows
Администрирование сервера на Windows требует широкого арсенала инструментов, каждый из которых предназначен для...
Что лучше для сервера — Linux или Windows?
Вопрос выбора операционной системы для серверов стоит перед системными администраторами и техническими директорами уже...
Организация корпоративного файлообменика, файлового хранилища
Организация корпоративного файлового хранилища – ключевая задача для обеспечения эффективной работы сотрудников...
Чек-лист проверки безопасности корпоративного Wi-Fi
Следует регулярно проводить аудит безопасности корпоративной Wi-Fi сети. Ниже приведен чек-лист с рекомендациями и...
Идеальный сервер для 1С — как выбрать и какой должен быть?
При выборе сервера для работы с системой 1С необходимо учитывать количество пользователей, объем данных и требования к...
Сквозная аналитика: зачем нужная и пошаговая настройка
Сквозная аналитика в бизнесе решает ряд ключевых проблем, обеспечивая компаниям глубокий анализ и понимание многих...