Настройка и конфигурация веб-сервера — это критически важный процесс для обеспечения надежной и эффективной работы веб-приложений. В этой статье мы рассмотрим ключевые аспекты этого процесса, включая выбор операционной системы, необходимые утилиты, меры безопасности, обеспечение сохранности данных, максимизацию времени бесперебойной работы и настройку мониторинга.
При выборе операционной системы для веб-сервера большинство профессионалов отдают предпочтение Linux по следующим причинам:
Популярные дистрибутивы Linux для веб-серверов включают Ubuntu Server, CentOS и Debian. Тем не менее, Windows Server также имеет свои преимущества, особенно в корпоративной среде, где используются другие продукты Microsoft.
Установка Linux (на примере Ubuntu Server):
После установки операционной системы необходимо установить и настроить следующие компоненты:
Веб-сервер (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
Базовая конфигурация
Данная конфигурация предназначена для размещения и обслуживания веб-ресурсов с невысокой интенсивностью входящих запросов и ограниченным объемом статического контента. Подходит для маломасштабных веб-сайтов, таких как личные блоги, презентационные страницы (landing page), а также в качестве песочницы (sandbox environment) для разработки и тестирования.
Средняя конфигурация
Конфигурация рассчитана на более интенсивную обработку данных и обслуживание динамических веб-приложений, которые требуют оперативной обработки сервером большого количества запросов, а также поддерживают сложные операции с базами данных. Оптимально подходит для интернет-магазинов среднего размера, сайтов на базе CMS (Content Management System), форумов с активной пользовательской активностью.
Высокая конфигурация
Этот тип конфигурации предназначен для систем с высоким уровнем параллельной обработки запросов и выполнения ресурсоемких операций, включая, но не ограничиваясь, интенсивной работой с базами данных и реализацией сложных вычислительных процессов в реальном времени.
Рекомендуется для крупномасштабных проектов, включая высоконагруженные электронные коммерческие платформы, корпоративные порталы, облачные сервисы с многопользовательским доступом и обработкой больших объемов данных.
Настройка брандмауэра (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-сервер:
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
Настройка мониторинга и автоматического перезапуска сервисов
Установите 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;
}
Создайте README.md файл в домашней директории root пользователя:
sudo nano /root/README.md
Документируйте все важные настройки, пароли (в зашифрованном виде) и процедуры.
Установите 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»
Создайте файл 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-инфраструктуры под ключ, в том числе администрирование веб-сервера. Оставить заявку можно здесь.