Форуму удалось в PageSpeed Insights достичь цифр 95 и 99 !

admin

Anabolic Gontarski
Команда форума
Администрация
Доверенный
Новичок
6766.jpg


🚀 Форуму удалось в PageSpeed Insights достичь цифр 95 и 99!​


Недавно я полностью перенёс форум на новый сервер. Это было не просто обновление железа — это была полноценная перестройка всей инфраструктуры.

Старый хостинг уже не давал той гибкости и контроля, которые мне были нужны. Я хотел:

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

И вот — результат: Google PageSpeed Insights показывает 95 для мобильной версии и 99 для десктопа 🎯

Clip2Net Menu_260212103408.jpeg



🖥 Что было сделано на сервере​


Перенос — это только начало. Основная работа была дальше.

1️⃣ Архитектура: nginx как фронтенд + Apache как backend​


Мы настроили правильную связку:
  • nginx → слушает 80/443
  • Apache → работает на 8080
  • nginx проксирует PHP-запросы в Apache
  • статика (CSS, JS, изображения) отдаётся напрямую через nginx
Это позволило:
  • снизить нагрузку на Apache
  • ускорить отдачу статических файлов
  • уменьшить TTFB

2️⃣ Настроено корректное кеширование​


В nginx добавлены:
  • expires для статики
  • Cache-Control: public
  • длительное хранение CSS/JS
  • отдельная логика для изображений
Теперь браузеры не тянут тяжёлые файлы заново при каждом заходе.

3️⃣ Включено сжатие gzip / brotli​


Сервер корректно отдаёт сжатый контент.
Размер HTML и JS уменьшился в 3–5 раз.

4️⃣ Исправлена SSL-цепочка​


Была проблема:
SSL certificate problem unable local issuer certificate

Оказалось, что nginx был настроен не на полный сертификат, а на обычный .crt без цепочки.
После замены на:
ssl_certificate ...crtca
ошибка ушла, GTmetrix перестал ругаться, а SSL стал валидным для всех браузеров.

5️⃣ Устранены циклические редиректы​


Это был самый сложный момент.

Была ситуация:
  • nginx редиректил на https
  • Apache тоже редиректил
  • .htaccess добавлял ещё один слой
  • в итоге — бесконечный redirect loop
Пришлось:
  • убрать лишние RewriteCond
  • корректно передать X-Forwarded-Proto
  • развести зоны ответственности nginx и Apache

После этого сайт заработал стабильно.

6️⃣ Отладка CGI / TDS / прав доступа​


При настройке второго домена столкнулся с:


error in ip_lib3 Permission denied: ./memory/1/0

Оказалось, CGI-скрипт не имел прав на директорию memory.
Исправили владельца и права — всё заработало.

⚠️ Подводные камни​


Вот с чем пришлось реально повозиться:
  • конфликт сертификатов между доменами
  • nginx не тот сервер-блок обслуживал домен
  • старые правила в .htaccess ломали логику
  • Apache отдавал 403 из-за неправильной авторизации
  • curl не доверял цепочке сертификата
  • часть статики шла через Apache вместо nginx

Это всё заняло время, но теперь конфигурация чистая и логичная.

📊 Итог​

Clip2Net Menu_260212103429.jpeg


✔ Форум работает быстрее
✔ TTFB низкий
✔ Статика отдаётся через nginx
✔ Кэш работает корректно
✔ SSL полностью валиден
✔ PageSpeed: 95 / 99


И самое главное — теперь я полностью контролирую сервер и понимаю, что происходит на каждом уровне.
 

🖥 Что было сделано на сервере ч.2​


1️⃣ Архитектура: nginx + Apache (правильный канон)​


Изначально всё крутилось только на Apache. Это работало — но не оптимально.

Мы восстановили правильную архитектуру:
Код:
nginx  →  80 / 443
Apache →  8080

nginx:
  • принимает трафик
  • отдаёт статику напрямую
  • проксирует PHP-запросы в Apache
Apache:
  • работает только как backend
  • обрабатывает PHP (XenForo)

Это сразу снизило нагрузку и сократило TTFB.

2. Redis + PHP 8.3​


Мы не просто включили Redis — пришлось правильно:
  • активировать расширение в альтернативной версии PHP
  • проверить через php -m | grep redis
  • убедиться, что используется именно /opt/php83/bin/php
  • пересобрать кэш XenForo через CLI

После этого:
Код:
redis-cli info keyspace

показал активные ключи — значит, кеш реально работает.

3. Конфликт Listen 80 / 443​


Это был самый нервный момент.

Apache отказывался запускаться:
Код:
Cannot define multiple Listeners on the same IP:port

Выяснилось:
  • Listen 80 был в apache2.conf
  • Listen 80 был в ports.conf
  • Listen 443 был в ssl_vhosts_inc.conf

Apache просто глох.

Пришлось:
  • убрать дубли
  • вычистить старые include
  • создать недостающие директории /etc/apache2/vhosts/system
  • привести конфиги в чистый вид
После этого:
Код:
sudo apachectl configtest
Syntax OK
И сервер наконец встал.

4. Ошибка “Please use parameters provided with your package”​


После правок vhost внезапно сайт начал отдавать:
Код:
Error: Please use parameters provided with your package (ih=inva.life)
Оказалось:
  • Apache отдавал не тот VirtualHost
  • работал дефолтный конфиг
  • DocumentRoot был не тот

Исправили порядок include и ServerName — сайт вернулся.

5. GEOIP + блокировка Сингапура​


Мы настроили mod_geoip и протестировали:

Код:
REMOTE_ADDR
GEOIP_COUNTRY_CODE
База GeoIP подключена вручную, без MaxMind-аккаунта, через альтернативные базы.


Блокировка конкретной страны реализована аккуратно, без падения сайта.

6. gzip + кэширование статики​


Проверяли через:
Код:
curl -I -H 'Accept-Encoding: gzip,deflate,br' https://inva.life

Получаем:
Код:
Content-Encoding: gzip
Добавили:
  • expires для CSS / JS
  • Cache-Control: public
  • длительный TTL для изображений
  • корректный Vary

7. Конфликт редиректов (redirect loop)​


Была ситуация:
  • nginx → https
  • Apache → https
  • .htaccess → https
В итоге — бесконечная переадресация.

Решение:
  • оставить HTTPS-редирект только во frontend
  • корректно передать X-Forwarded-Proto
  • убрать лишние RewriteCond

8. Ошибки PHP-модулей​


После обновлений PHP вылетали ошибки:
Код:
Unable to load dynamic library 'xml.so'
Причина — устаревшие ini-файлы альтернативных версий PHP.

Очистили лишние службы (php-fpm74 phantom unit),
привели PHP 8.3 в чистое состояние.

9. Конфликт nginx и Apache при возврате схемы​


nginx не запускался:
Код:
Job for nginx.service failed

Порт 80 был занят Apache.
Пришлось:
  • грамотно развести порты
  • вернуть Apache на backend
  • проверить через:
Код:
ss -ltnp | egrep ':80|:443'

⚠️ Подводные камни​


Вот реальный список того, что ломалось:
  • неправильный SSL-сертификат домена
  • конфликт Listen 80
  • двойной редирект
  • Redis не подключался к alt-PHP
  • Apache отдавал 404 вместо форума
  • GEOIP не определял страну
  • .htaccess рушил конфигурацию
  • Apache запускался и тут же уходил в dead state
  • nginx стартовал, но не слушал порт
  • неправильный ServerName ломал виртуальный хост

📊 Итог​


✔ nginx отдаёт статику
✔ Apache работает как backend
✔ Redis кеширует
✔ gzip включён
✔ SSL валиден
✔ Redirect logic чистая
✔ PageSpeed 95 / 99
 
Назад
Сверху