Исправление 504 Gateway Timeout

Продолжение поста

Перезагрузка это временное решение и всегда надо искать причину зависаний.

На днях исправлял случай с 504 ошибкой у клиентского сайта. Начал изучать причины.

  1. Битрикс не обновленный до последней версии.
  2. Запустил мониторинг производительности. Бал 60+. Очень даже хорошо.
  3. Не везде включено кеширование. Включил, проблема 504 не исчезла.
  4. Запустил тест на нагрузку по страницам. Нашел один компонент, который генерил 1000+ запросов SQL при четырех элементах. Поправил, проблема 504 не исчезла.
  5. Анализ посещений пользователей ничего не дал, всё как обычно.
  6. По инструкции Битрикс «Блокировки сессий в веб-проектах» сделал AWK скрипт на поиск «паровозиков»  забивающих PHP-воркеры. Параллельно установил lsof. Занес это дело в крон c kill процессов. Решение также было временное, но хотя бы сайт не должен был висеть. Кстати с кроном тоже не всё прошло идеально — но тут больше моя невнимательность в правах, владельцах и папках размещения.
  7. Посмотрел отдельно пользователей и опа! — зарегистрированные пользователи формата bitrixsupport_1234@mail.ru с последней авторизацией в момент зависания сервера. Вот оно!
  8. Во-первых пользователей быть вообще не должно. Убрал галочку с «можно регистрироваться в система». Убрал возможность вообще использовать get параметр /?register=yes.
  9. Во-вторых стало проще найти дыру в безопасности. Снес модуль «лендинги»(не использовался) и закрыл возможность перехода на скрипт /bitrix/tools/landing/ajax.php.

Путь получился длинный, возможно даже не с той стороны зашел. Но что есть — то есть. Попутно исправил другие недочеты, в итоге сайт стал работать быстрее и создавать меньшую нагрузку на сервер.

Автор блога:
Дмитрий Шарынин

dimos.ru