Если ваш сервер работает медленно, возможно APACHE запросы OPTIONS грузят сервер. Это может быть вызвано злоупотреблением со стороны. Например DDoS-атакой. Или неправильной конфигурацией CORS. Прочитайте про несколько способов решить проблему
- Ограничить обработку OPTIONS-запросов
- Отключить ненужные модули
- Настроить CORS правильно
- Использовать mod_security для блокировки злодеев
- Настроить Rate Limiting
- Проверить логи и заблокировать злоумышленников
- Используйте правило для fail2ban
- Обновите Apache и ОС
- После изменений не забудьте перезагрузить Apache
- Для чего используют apache2
Ограничить обработку OPTIONS-запросов
Включите модуль mod_rewrite и добавьте правило в .htaccess или конфигурацию виртуального хоста:
RewriteEngine On RewriteCond %{REQUEST_METHOD} OPTIONS RewriteRule ^(.*)$ - [R=200,L]
или на пустой файл например readme.html
RewriteEngine on RewriteCond %{HTTP_USER_AGENT} ^.*OPTIONS*$ [NC] RewriteRule ^/$ /readme.html [L]
Это сразу завершает обработку OPTIONS-запросов с кодом 200 OK, не нагружая ваш сервер VPS.
Отключить ненужные модули
Убедитесь, что у вас не включены лишние модули. Например mod_headers или mod_cors, если они не используются, поэтому APACHE запросы OPTIONS грузят сервер
sudo a2dismod ненужный_модуль sudo systemctl restart apache2
Настроить CORS правильно
Если OPTIONS-запросы приходят из-за CORS, ограничьте разрешённые apache домены:
Header always set Access-Control-Allow-Origin "https://ваш-домен" Header always set Access-Control-Allow-Methods "GET, POST, PUT, DELETE" Header always set Access-Control-Allow-Headers "Content-Type, Authorization" Header always set Access-Control-Max-Age "3600"
Параметр Access-Control-Max-Age кэширует CORS-запросы на 1 час, уменьшая количество OPTIONS.
Можно добавить в конфигурацию NGINX правила отдачи заголовков
# # Wide-open CORS config for nginx # location / { if ($request_method = 'OPTIONS') { add_header 'Access-Control-Allow-Origin' '*'; # # Om nom nom cookies # add_header 'Access-Control-Allow-Credentials' 'true'; add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS'; # # Custom headers and headers various browsers *should* be OK with but aren't # add_header 'Access-Control-Allow-Headers' 'DNT,X-CustomHeader,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type'; # # Tell client that this pre-flight info is valid for 20 days # add_header 'Access-Control-Max-Age' 1728000; add_header 'Content-Type' 'text/plain charset=UTF-8'; add_header 'Content-Length' 0; return 204; } if ($request_method = 'POST') { add_header 'Access-Control-Allow-Origin' '*'; add_header 'Access-Control-Allow-Credentials' 'true'; add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS'; add_header 'Access-Control-Allow-Headers' 'DNT,X-CustomHeader,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type'; } if ($request_method = 'GET') { add_header 'Access-Control-Allow-Origin' '*'; add_header 'Access-Control-Allow-Credentials' 'true'; add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS'; add_header 'Access-Control-Allow-Headers' 'DNT,X-CustomHeader,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type'; } }
не уверен что это поможет, но пишут что так правильно.
Использовать mod_security для блокировки злодеев
Установите mod_security и настройте правила для ограничения частоты OPTIONS-запросов apache
SecRule REQUEST_METHOD "OPTIONS" "id:1000,phase:1,deny,status:403,msg:'OPTIONS flood'"
Настроить Rate Limiting
Используйте mod_ratelimit или mod_qos для ограничения запросов apache
<IfModule mod_ratelimit.c> <Location "/"> SetOutputFilter RATE_LIMIT SetEnv rate-limit 10 </Location> </IfModule>
Проверить логи и заблокировать злоумышленников
Найдите IP-адреса, которые отправляют APACHE запросы OPTIONS которые грузят сервер
sudo tail -f /var/log/apache2/access.log | grep "OPTIONS"
Добавьте их в черный список через .htaccess или фаервол apache iptables/ufw
Order Allow,Deny Deny from 123.45.*.* Allow from all
Используйте правило для fail2ban
# неудачные попытки ввода пароля [apache] enabled = true port = http,https filter = apache-auth logpath = /var/log/apache*/*error.log maxretry = 6 # сканирование для применения эксплойтов и php уязвимостей [apache-noscript] enabled = true port = http,https filter = apache-noscript logpath = /var/log/apache*/*error.log maxretry = 6 # попытки переполнения apache2 [apache-overflows] enabled = true port = http,https filter = apache-overflows logpath = /var/log/apache*/*error.log maxretry = 3 # неудачные попытки в поиске домашней директории на сервере [apache-nohome] enabled = true port = http,https filter = apache-nohome logpath = /var/log/apache*/*error.log maxretry = 3
Ctrl + C. Данное сочетание клавиш необходимо знать любому пользователю терминала. С его помощью можно завершить процесс, выполняющийся на данный момент в терминале.
Обновите Apache и ОС
Убедитесь, что у вас последняя версия Apache
sudo apt update && sudo apt upgrade apache2
После изменений не забудьте перезагрузить Apache
sudo systemctl restart apache2
Если проблема остаётся, проверьте нагрузку с помощью top, htop или apachetop, чтобы убедиться, что проблема именно в OPTIONS-запросах. Возможно, нагрузка связана с другими факторами.
Для чего используют apache2
Apache2 — это один из самых популярных веб-серверов в мире, используемый для размещения и обслуживания сайтов. Он играет ключевую роль в работе современных веб-приложений, обеспечивая обработку HTTP-запросов. В том числе APACHE запросы OPTIONS. Производит балансировку нагрузки и безопасность данных. Благодаря своей гибкости и открытому исходному коду Apache2 применяется как в небольших проектах, так и в крупных корпоративных системах.
Одной из главных функций Apache2 является обработка статического и динамического контента. Он поддерживает работу с HTML, CSS, JavaScript, а также интегрируется с серверными языками, такими как PHP, Python и Perl, через модули. Это делает его универсальным решением для различных типов веб-приложений.