TLS и внутренние fallback-пути
Иногда сайт проходит через несколько слоёв: внешний TLS endpoint, локальный listener, Nginx и статический web-root.
Чтобы не гадать, проверяйте каждый слой отдельно.
Главная идея: публичная проверка и локальная проверка должны давать совместимый результат.
Слой 1. Публичный HTTPS
curl -kI https://getsrv.app/
Ожидаемо:
HTTP/2 200
content-type: text/html
cache-control: public, must-revalidate
Проверить TLS:
openssl s_client -connect getsrv.app:443 -servername getsrv.app -alpn h2 -brief
Слой 2. Локальный Nginx listener
Если Nginx слушает локальный TLS-порт, его можно проверить напрямую:
curl -kI --resolve getsrv.app:7443:127.0.0.1 https://getsrv.app:7443/
И через OpenSSL:
openssl s_client -connect 127.0.0.1:7443 -servername getsrv.app -alpn h2 -brief
Если локальный listener отвечает правильно, значит Nginx и web-root, скорее всего, в порядке.
Слой 3. Web-root
Проверить файлы:
sudo test -f /var/www/getsrv.app/index.html && echo "index OK"
sudo test -f /var/www/getsrv.app/ru/docs/index.html && echo "docs OK"
sudo test -d /var/www/getsrv.app/assets && echo "assets OK"
Проверить права:
namei -l /var/www/getsrv.app/index.html
Слой 4. Ошибки 404
Нормальный 404 должен быть управляемым ответом сайта, а не случайной ошибкой.
curl -kI https://getsrv.app/no-such-page
Ожидаемо:
HTTP/2 404
cache-control: public, must-revalidate
content-security-policy: ...
Как читать результаты
Public OK, local OK
Базовый сайт работает. Если проблема видна только в браузере, смотрите кэш браузера или DevTools.
Public broken, local OK
Nginx и web-root живы. Проверяйте внешний слой: listener, маршрутизацию, firewall, SNI routing, upstream до Nginx.
Public OK, local broken
Возможна разница между публичным путём и локальным тестом: не тот порт, не тот протокол, неверный --resolve, локальный listener не TLS.
Public 403
Часто означает пустой web-root или отсутствие index.html.
Проверка:
sudo test -f /var/www/getsrv.app/index.html && echo OK || echo missing
Public 404 на существующей странице
Проверьте, есть ли соответствующий index.html:
sudo test -f /var/www/getsrv.app/ru/docs/cache-control/index.html && echo OK || echo missing
Минимальный набор команд
curl -kI https://getsrv.app/
curl -kI https://getsrv.app/no-such-page
curl -kI --resolve getsrv.app:7443:127.0.0.1 https://getsrv.app:7443/
openssl s_client -connect getsrv.app:443 -servername getsrv.app -alpn h2 -brief
openssl s_client -connect 127.0.0.1:7443 -servername getsrv.app -alpn h2 -brief
sudo ss -lntp | grep -E ':(443|7443)\b'
Этого достаточно, чтобы понять, проблема в публичном слое, локальном Nginx, сертификате или статических файлах.