Загрузка данных
Вот краткая выжимка — можно копировать целиком в другую нейросеть.
Контекст: сервер srvais, Astra Linux, Nginx + Docker Compose (Yii2-приложение ПФДО)
Симптомы, с которых начали:
502 Bad Gateway на https://dop.edu35.ru / https://dop2.edu35.ru
CORS-ошибки в браузере на запросах к https://api-dop.edu35.ru/v2/...
Форма входа не работала, данные не подгружались
Инфраструктура:
Хост-nginx (/etc/nginx/) слушает 443, проксирует по доменам:
dop2.edu35.ru → 172.17.0.1:8000 (SPA + основное Yii2-приложение)
api-dop.edu35.ru → 172.17.0.1:8001 (API-приложение Yii2, /www/pfdo/api/)
files-dop.edu35.ru → 172.17.0.1:8002 (файлы)
Docker Compose-проект: /www/pfdo-services/docker-compose.yml (+ .override.yml), сеть pfdo-services_pfdo (172.18.0.0/16)
Контейнеры: pfdo-php (PHP-FPM 8.3), pfdo-nginx (nginx внутри Docker, слушает 8000/8001/8002), pfdo-percona (MySQL 5.7), pfdo-redis, pfdo-rabbitmq, pfdo-amqproxy, pfdo-elasticsearch, pfdo-clickhouse, очереди php-queue, php-inlerno, php-enrollment-queue
Код основного приложения: /www/pfdo/ (SPA + Yii2 web/), API: /www/pfdo/api/
Файлы: /www/files/
Проблемы и что было сделано
1. 502 Bad Gateway — РЕШЕНО
Причина: compose-стек был частично остановлен 6 месяцев назад. Контейнер pfdo-php — Exited (127) 6 months ago, pfdo-nginx — в цикле Restarting с ошибкой nginx: [emerg] host not found in upstream "php" in /etc/nginx/conf.d/pfdo.conf:23. Из-за этого порт 8000 не слушался, host-nginx получал Connection refused.
Решение:
bash
cd /www/pfdo-services
docker-compose down
docker-compose up -d
Поднялось 22 контейнера, все в одной сети pfdo-services_pfdo.
2. CORS — РЕШЕНО
Причина: два источника CORS-заголовков конфликтовали:
Yii2-контроллеры в /www/pfdo/api/modules/v2/ отдавали 'Origin' => ['*'] + 'Access-Control-Allow-Credentials' => false
Host-nginx добавлял свои CORS-заголовки → дублирование → браузер блокировал
Решение:
В PHP-контроллерах заменили 'Origin' => ['*'] на 'Origin' => ['https://dop2.edu35.ru'] и 'Access-Control-Allow-Credentials' => false на true. Файлы:
/www/pfdo/api/modules/v2/controllers/GuestAbstractRestController.php (основной для main-page)
/www/pfdo/api/modules/v2/controllers/AbstractRestController.php
/www/pfdo/api/modules/v3/modules/V3RestController.php
/www/pfdo/api/modules/v3/modules/telegram/controllers/TelegramAuthController.php
Из host-nginx CORS-заголовки убрали (их там не осталось после правок)
Сбросили OPcache: docker exec pfdo-php php -r "opcache_reset();", перезапустили pfdo-php
Перезапустили host-nginx: sudo systemctl restart nginx
Отключили лишний конфиг /etc/nginx/conf.d/pfdo-sss.conf (устаревшие пути к сертификатам)
3. Сетевая блокировка (главная скрытая причина CORS-ошибок) — РЕШЕНО
Причина: с компьютера пользователя (192.168.16.14) TCP-запросы к api-dop.edu35.ru:443 (95.53.248.189) не проходили. В tcpdump на сервере SYN приходил на eth3, но сервер не отвечал. Маршрут к 192.168.16.0/24 идёт через eth1, а SYN приходил на eth3 → rp_filter=1 (strict) дропал пакеты.
Решение:
bash
sudo sysctl -w net.ipv4.conf.all.rp_filter=2
sudo sysctl -w net.ipv4.conf.default.rp_filter=2
sudo sysctl -w net.ipv4.conf.eth1.rp_filter=2
sudo sysctl -w net.ipv4.conf.eth2.rp_filter=2
sudo sysctl -w net.ipv4.conf.eth3.rp_filter=2
Сохранить в /etc/sysctl.d/99-rp-filter.conf. После этого браузер начал ходить в API, форма входа заработала.
4. Остаётся НЕ РЕШЕНО: чекбокс «С инструкцией ознакомлен» не ставится
Текущее состояние:
Вход работает (VOLODGA / оператор), страница /app/faq/checklist открывается
Все API-запросы в DevTools → Network возвращают 200 (department, configuration, unit-accounts, service-type, news, view-required и т.д.)
В консоли только NavigationDuplicated (безобидное предупреждение Vue Router) и favicon.ico 502
При клике на чекбокс запрос на сервер не уходит — ни в api.log, ни в app500.log нет записей с faq/checklist/instruction
Чекбокс, предположительно, disabled до выполнения условия (например, «инструкция должна быть открыта/прочитана»)
Ссылка «Инструкция "Мониторинг достижения результатов оказания услуг"» — не проверяли, открывается ли
Что нужно проверить:
DevTools → Network (очистить) → кликнуть на чекбокс и на ссылку инструкции → смотреть, уходят ли запросы и с каким статусом
DevTools → Elements → <input type="checkbox"> — есть ли disabled?
Кликнуть на ссылку инструкции — открывается ли PDF/модалка/что-то? Какой запрос уходит?
Если запрос уходит с 500 — посмотреть URL и Response
5. Известная нерешённая проблема: внешний Elasticsearch недоступен
ELASTIC_SEARCH_HOST=172.16.208.36:9200 из контейнера pfdo-php — No route to host. Приложение падает с 500 на эндпоинте /v2/main-page/search/es-programs. Есть локальный контейнер pfdo-elasticsearch (Up), но приложение на него не переключено.
Где задаётся ELASTIC_SEARCH_HOST — не найдено. Искать в:
/www/pfdo/.env
/www/pfdo/api/.env
/www/pfdo/config/params-local.php
/www/pfdo/api/config/api.php
Потенциальное решение: переключить на pfdo-elasticsearch:9200 (если в локальном ES есть индексы pfdo_master_*), либо восстановить доступ к 172.16.208.36.
6. Прочие мелочи
pfdo-php запускается от UID 1000 (ais), монтирует /www/pfdo → /application, /www/files → /files
restart: unless-stopped у всех сервисов
Логи Yii2: /application/runtime/logs/ — app.log, api.log, app500.log, commands.log
app500.log пишет ошибки 500, но сам текст исключения находится выше дампа $_SERVER — нужно искать grep -B2 -A30 "Exception\|Error"
В pfdo-php нет ping, но есть bash и curl
firewalld активен, зоны: public (eth3, разрешены http/https), trusted (eth1/eth2), docker (br-*, docker0)
Итог
Проблема Статус
502 Bad Gateway на dop2.edu35.ru ✅ Решено
CORS на api-dop.edu35.ru ✅ Решено
Сеть: rp_filter блокировал трафик от 192.168.16.0/24 ✅ Решено
Авторизация и вход в портал ✅ Работает
Чекбокс «С инструкцией ознакомлен» ❌ Не решено (прикладная проблема, запрос не уходит на сервер)
Внешний Elasticsearch 172.16.208.36:9200 ❌ Не решено (No route to host, ломает поиск)
favicon.ico 502 ⚠️ Мелочь, не критично
NavigationDuplicated ⚠️ Безобидное предупреждение Vue Router
Следующий шаг для новой нейросети: разобраться, почему чекбокс «С инструкцией ознакомлен» не ставится. Проверить в DevTools, уходит ли запрос при клике (скорее всего, нет), и есть ли disabled на <input type="checkbox">. Параллельно решить проблему с Elasticsearch — переключить на локальный pfdo-elasticsearch:9200 или восстановить доступ к внешнему 172.16.208.36:9200.