Короткий ответ
«Zabbix не открывается» — это web-стек, не агент WS-042. Проверьте nginx/Apache на zabbix.example, PHP-FPM (версия из требований 6.0/7.0 LTS), файл /etc/zabbix/web/zabbix.conf.php (или /etc/zabbix/zabbix.conf.php), коннект PHP к той же БД, что zabbix-server. Отдельно: демон на 10.0.20.50:10051 может быть жив при мёртвом UI и наоборот. Мёртвый демон: Zabbix server не запускается. Не переустанавливайте пакет frontend, пока не сняли HTTP-код и PHP-fatal.
Симптомы и как отличить
Типичная картина:
- браузер: timeout, сертификат, 502, 404, белая страница;
- curl с админского ПК или с самого
10.0.20.50даёт не HTML логина; - коллеги видят UI, вы нет — DNS/split horizon;
- логин есть, виджеты «server is not running» — это уже не «frontend не открывается».
Отличия:
| HTTP/UI | Слой | Куда |
|---|---|---|
| Нет TCP 443/80 | firewall, nginx down | этот материал |
| 502/504 | php-fpm socket | этот материал |
| 200 + Database error | PHP→БД | этот материал |
| 200 + server not running | демон 10051 | server |
| Логин есть, алерты странные | логика триггеров | карта алертов |
Возможные причины
- nginx/httpd не запущен, vhost без
server_name zabbix.example, неверный root. - PHP-FPM pool мёртв, несовместимая версия PHP (7.0 LTS требует более новый PHP, чем старый 6.0 на том же хосте после частичного upgrade).
zabbix.conf.phpуказывает на другой хост БД, неверный$DB['PASSWORD'].- Расширения PHP:
php-pgsql/php-mysqlnd,bcmath,mbstring,ldap,gd— нет в пуле. - TLS: чужой vhost, просроченный сертификат, редирект-петля.
- SELinux
httpd_can_network_connect_dboff, PHP не ходит на 5432. - Редко: disk full на session path, opcache битый после abort upgrade, HTTP/2 bug на старом nginx — проверяется отключением http2 временно для теста, не «навсегда».
Диагностика
1. HTTP с клиента и с сервера
curl -sS -o /dev/null -w '%{http_code} %{time_connect}\n' https://zabbix.example/
curl -vkI https://zabbix.example/ 2>&1 | head -n 40
curl -sS -o /dev/null -w '%{http_code}\n' http://127.0.0.1/ --header 'Host: zabbix.example'000 — сеть/DNS/TLS handshake. 502 — upstream PHP. 301 на http — норма, если 443 жив.
DNS:
getent hosts zabbix.exampleДолжен быть 10.0.20.50 (или VIP), не чужой leftover.
2. Web-сервер и PHP-FPM
systemctl status nginx php-fpm --no-pager
# имена unit: php8.2-fpm / php8.3-fpm — смотрите dpkg -l 'php*-fpm'
ss -lntp | grep -E ':80|:443|php'
sudo nginx -t
sudo tail -n 80 /var/log/nginx/error.logВ vhost Zabbix: fastcgi_pass на тот unix socket, который реально создаёт pool. Несовпадение /run/php/php8.2-fpm.sock vs php8.3 после апгрейда — чистый 502.
sudo php-fpm8.2 -t
sudo tail -n 80 /var/log/php8.2-fpm.log3. Конфиг frontend и модули PHP
sudo php -m | grep -iE 'pgsql|mysql|bcmath|mbstring|ldap|gd|sockets'
sudo grep -E "DB|ZBX_SERVER" /etc/zabbix/web/zabbix.conf.php$ZBX_SERVER / $ZBX_SERVER_PORT должны смотреть на 10.0.20.50 и 10051, если UI проверяет статус демона. Это не причина 502, но причина баннера после логина.
Проверка БД тем же пользователем, что в PHP:
psql -h 127.0.0.1 -U zabbix -d zabbix -c 'SELECT mandatory FROM dbversion;'4. Права и SELinux
ls -l /etc/zabbix/web/zabbix.conf.php
# ожидаемо: root:apache или zabbix:apache, не 666
getenforce
sudo ausearch -m avc -ts recent | tailНе setenforce 0 навсегда. Для коннекта PHP к TCP БД на другом хосте нужен boolean, не disabled SELinux.
Решение
Сценарий A. nginx/php-fpm не запущены
sudo systemctl enable --now nginx php8.2-fpm
sudo nginx -t && sudo systemctl reload nginxПодставьте свою версию PHP из пакета zabbix-frontend-php / документации 6.0 vs 7.0. Смешивать frontend 7.0 и server 6.0 нельзя.
Сценарий B. 502 из-за socket PHP
Выровняйте fastcgi_pass и listen в pool. Пример проверки:
ls -l /run/php/*.sock
sudo grep listen /etc/php/8.2/fpm/pool.d/www.confПосле правки systemctl restart php8.2-fpm и reload nginx.
Сценарий C. Database error в UI
- Backup
zabbix.conf.php. - Выровняйте
$DBс рабочимpsql/mysql. - Не запускайте web-installer на боевой базе «перезаписать конфиг».
Если пароль сменили в PostgreSQL — обновите и сервер, и frontend. Иначе получите живой UI и мёртвый poller или наоборот.
Сценарий D. PHP-модуль отсутствует
Ставьте пакеты той же minor PHP, что FPM. Рестарт fpm, не только nginx. Белый экран: включите временно display_errors только на служебном vhost или читайте php-fpm log — не в проде для всех.
Сценарий E. TLS и vhost
Сертификат на zabbix.example, не на дефолтный default_server. Проверка:
echo | openssl s_client -connect 10.0.20.50:443 -servername zabbix.example 2>/dev/null | openssl x509 -noout -dates -subjectПросроченный cert ломает мониторинг самих сертификатов и браузеры. Тема item TLS: мониторинг сертификатов.
Сценарий F. UI открылся, API скриптов нет
/api_jsonrpc.php должен отвечать POST JSON-RPC. 404 — неверный root (попали в пустой vhost). 401 без тела — норма для пустого запроса. Для автоматизаций используйте token пользователя API, не пароль Super Admin в cron plaintext.
Как проверить, что проблема устранена
curl -sS -o /dev/null -w '%{http_code}\n' https://zabbix.example/
curl -sS -o /dev/null -w '%{http_code}\n' https://zabbix.example/api_jsonrpc.phpОжидание: 200 на UI (или 302 на login), 200 на API endpoint. В браузере: форма логина, после входа Dashboard без PHP warnings. Статус демона — отдельная проверка ss -lntp | grep 10051.
С хоста WS-042 ничего не требуется для «UI жив». Не путайте с агентом.
Если не помогло
- Только один клиент не открывает: прокси корпоративный, старый DNS cache, TLS inspection.
- HTTP 200, но пустая страница: JS/CSP, AdBlock режет
/assets/7.0, смотрите Network в браузере. - Медленный UI при живом HTTP: очередь и БД, не PHP. См. очередь.
- После логина сразу logout:
php sessionна NFS без lock, или разныеhttps/httpSecure cookie. setup.phpснова доступен: закройте location или удалите installer per package docs.
Профилактика
- Отдельный vhost только для Zabbix, TLS автоматический (внутренний CA), мониторинг самого
web.page.regexp/ HTTP agent на/. - Согласованные версии server/frontend/schema.
- Backup
zabbix.conf.phpвместе с секретами в vault, не в git. - PHP-FPM
pmнеmax_children=5на 200 пользователей UI. - Доступ к UI с jump host / VPN, не world на
0.0.0.0. Триггеры без работающего UI всё равно должны уходить в мессенджер — карта алертов.
FAQ
Frontend на другом хосте, чем server — нормально?
Да. Тогда PHP→БД и $ZBX_SERVER=10.0.20.50. Firewall: 5432/3306 только с фронта, 10051 для статуса. Не открывайте БД в LAN всем.
Какой PHP для 6.0 и 7.0?
Смотрите матрицу на сайте Zabbix для вашего minor. Не ставьте PHP 8.3 на 6.0, если в матрице его нет. Это типичный 500 после «обновили Ubuntu».
Нужен ли Apache, если уже nginx?
Нет. Один фронт. Пакет zabbix-nginx-conf vs zabbix-apache-conf — выберите один, второй disable.
Почему curl 200, а Chrome ERR_CERT?
Разные trust store. Корп CA в Windows есть, в curl на Linux нет. Для диагностики --cacert, не -k в проде скриптов.
Можно ли чинить UI, отключив auth?
Нет. Не оставляйте Allow from all без пароля. Для теста — IP allowlist jump host.
UI на HTTP только внутри — ок?
Только если сегмент изолирован и есть план TLS. Cookie сессии без Secure на «внутреннем HTTP» крадут одной XSS. Для 6.0/7.0 ставьте HTTPS на zabbix.example даже во внутренней сети.