Обновлено:

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, сертификате или статических файлах.