Загрузка данных


Вот краткая выжимка — можно копировать целиком в другую нейросеть.

Контекст: сервер 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.