Some checks failed
Backend CI / test (push) Waiting to run
Backend CI / build (push) Blocked by required conditions
Deploy Mnemo Cards / Deploy Backend (push) Waiting to run
Deploy Mnemo Cards / Deploy Web App (push) Blocked by required conditions
Deploy Mnemo Cards / Final Verification (push) Blocked by required conditions
Deploy Telegram Bot / Deploy Telegram Bot (push) Has been cancelled
This will show the exact reason for token verification failure
206 lines
9.8 KiB
Markdown
206 lines
9.8 KiB
Markdown
Причина сейчас не в нагрузке, а в битой и дублирующейся конфигурации nginx. Лог прямым текстом говорит, почему он периодически падает / не стартует.
|
||
|
||
Разберём по кускам.
|
||
|
||
⸻
|
||
|
||
1. Старые ошибки с портами
|
||
|
||
Вот это:
|
||
|
||
bind() to 0.0.0.0:80 failed (98: Unknown error)
|
||
bind() to 0.0.0.0:443 failed (98: Unknown error)
|
||
still could not bind()
|
||
|
||
Это означает: кто-то уже слушает 80/443, а новый процесс nginx пытается занять те же порты и падает с EADDRINUSE.
|
||
|
||
Типичный сценарий:
|
||
• уже запущен nginx (через systemd),
|
||
• ты запускаешь ещё один (например nginx -c ... руками),
|
||
• второй не может забиндиться и падает.
|
||
|
||
Но это полбеды. Сейчас у тебя ещё серьёзнее: конфиг.
|
||
|
||
⸻
|
||
|
||
2. Главная проблема: конфиг nginx сломан/подключён неправильно
|
||
|
||
Вот основное:
|
||
|
||
"server" directive is not allowed here in /root/mnemo_cards/tools/deploy/generated_configs/code.mnemo-cards.online.conf:5
|
||
...
|
||
"location" directive is not allowed here in /etc/nginx/sites-enabled/code.mnemo-cards.online.conf:55
|
||
"gzip" directive is duplicate in /etc/nginx/sites-enabled/code.mnemo-cards.online.conf:53
|
||
"limit_req_zone" directive is not allowed here in /etc/nginx/sites-enabled/vscode.mnemo-cards.online.conf:24
|
||
|
||
Эти сообщения означают:
|
||
1. server в “не том месте”
|
||
Файлы из /root/mnemo_cards/tools/deploy/generated_configs/*.conf подключены так, будто это не server-блоки, а часть верхнего уровня.
|
||
• Директива server { ... } допустима только внутри блока http { ... }.
|
||
• Если ты где-то делаешь include /root/.../generated_configs/*.conf; ВНЕ http {}, nginx и ругается:
|
||
"server" directive is not allowed here
|
||
2. location в “не том месте”
|
||
Сообщения:
|
||
|
||
"location" directive is not allowed here in /etc/nginx/sites-enabled/code.mnemo-cards.online.conf:55
|
||
"location" directive is not allowed here in /etc/nginx/sites-enabled/mnemo-cards.online.conf:53
|
||
|
||
Значит в этих файлах:
|
||
• либо location стоит вне server {},
|
||
• либо у тебя “поехали” скобки } (какой-то server блок раньше закрылся слишком рано).
|
||
|
||
3. дублирующийся gzip и limit_req_zone не там
|
||
|
||
"gzip" directive is duplicate in /etc/nginx/sites-enabled/code.mnemo-cards.online.conf:53
|
||
"limit_req_zone" directive is not allowed here in /etc/nginx/sites-enabled/vscode.mnemo-cards.online.conf:24
|
||
|
||
• gzip обычно задаётся один раз на уровне http {}.
|
||
Ты, скорее всего, прописал его и в nginx.conf, и ещё раз внутри vhost.
|
||
• limit_req_zone нельзя писать внутри server или location, только на уровне http.
|
||
|
||
4. конфликты доменов
|
||
|
||
conflicting server name "vscode.mnemo-cards.online" on 0.0.0.0:80, ignored
|
||
...
|
||
ignored
|
||
|
||
Это “мягкая” проблема: у тебя несколько server-блоков с одинаковым server_name и listen 80/443.
|
||
nginx один использует, остальные игнорирует. Не фатально, но говорит, что конфиг дублируется (скорее всего: и в /etc/nginx/sites-enabled, и в /root/.../generated_configs).
|
||
|
||
Итог: nginx периодически не может прочитать конфиг и/или ты пытаешься стартовать его с альтернативным конфигом, где все эти server и location подключены в неправильном месте. Отсюда и “то работает, то нет”.
|
||
|
||
⸻
|
||
|
||
3. Почему “иногда работает, иногда нет”
|
||
|
||
Скорее всего:
|
||
• Есть один “старый” рабочий nginx, запущенный с нормальным /etc/nginx/nginx.conf.
|
||
• Ты запускаешь свою тулзу /root/mnemo_cards/tools/deploy/..., которая:
|
||
• генерирует конфиги в /root/mnemo_cards/tools/deploy/generated_configs/*.conf,
|
||
• пробует сделать nginx -s reload с другим config-path или включает эти файлы как главные.
|
||
• nginx читает новый конфиг → натыкается на server/ location not allowed here → reload не удаётся, в лучшем случае остаётся старый воркер, в худшем — nginx падает и systemd его мучительно перезапускает.
|
||
• В логе при этом сыпятся emerg и bind() failed, а снаружи ты видишь “иногда сайты отваливаются”.
|
||
|
||
⸻
|
||
|
||
4. Что сейчас является непосредственной причиной “опять не работает”
|
||
|
||
Прямо из хвоста лога:
|
||
|
||
2025/11/23 03:24:43 [emerg] ... "server" directive is not allowed here in /root/mnemo_cards/tools/deploy/generated_configs/...
|
||
2025/11/23 03:24:43 [warn] ... conflicting server name "vscode.mnemo-cards.online" ...
|
||
|
||
Т.е. на текущий момент nginx не может нормально перечитать конфиг из-за:
|
||
• включения /root/mnemo_cards/tools/deploy/generated_configs/*.conf не в том месте;
|
||
• раздвоения конфигов (одни в /etc/nginx/sites-enabled/*.conf, другие в /root/.../generated_configs).
|
||
|
||
⸻
|
||
|
||
5. Что делать, чтобы это прекратилось
|
||
|
||
Шаг 1. Перестать запускать nginx “как попало”
|
||
1. Остановить nginx:
|
||
|
||
systemctl stop nginx
|
||
ps aux | grep nginx
|
||
# убедиться, что живых процессов nginx не осталось
|
||
|
||
2. Дальше всегда управлять только так:
|
||
|
||
nginx -t # проверить конфиг
|
||
systemctl start nginx
|
||
systemctl reload nginx
|
||
|
||
Никаких nginx -c /root/... и прочего.
|
||
|
||
⸻
|
||
|
||
Шаг 2. Навести порядок в структуре конфига
|
||
|
||
Базовый скелет /etc/nginx/nginx.conf должен быть примерно таким:
|
||
|
||
user www-data;
|
||
worker_processes auto;
|
||
pid /run/nginx.pid;
|
||
|
||
events {
|
||
worker_connections 4096;
|
||
}
|
||
|
||
http {
|
||
include /etc/nginx/mime.types;
|
||
default_type application/octet-stream;
|
||
|
||
sendfile on;
|
||
|
||
# глобальные gzip / limit_req_zone / и т.д.
|
||
# gzip on;
|
||
# limit_req_zone ...;
|
||
|
||
include /etc/nginx/conf.d/*.conf;
|
||
include /etc/nginx/sites-enabled/*.conf;
|
||
}
|
||
|
||
Критично:
|
||
• server {} — только внутри блока http {};
|
||
• location — только внутри server {};
|
||
• limit_req_zone и подобные — только на уровне http {}, не внутри server.
|
||
|
||
⸻
|
||
|
||
Шаг 3. Разобраться с generated_configs
|
||
|
||
Сейчас файлы вида:
|
||
• /root/mnemo_cards/tools/deploy/generated_configs/code.mnemo-cards.online.conf
|
||
• /root/mnemo_cards/tools/deploy/generated_configs/mnemo-cards.online.conf
|
||
• /root/mnemo_cards/tools/deploy/generated_configs/vscode.mnemo-cards.online.conf
|
||
|
||
подключаются так, что nginx видит там server не в http контексте.
|
||
|
||
Тебе нужно одно из:
|
||
• либо перестать включать эти файлы напрямую (пусть тулза генерирует сразу в /etc/nginx/sites-available/sites-enabled),
|
||
• либо включать их изнутри http {}:
|
||
|
||
http {
|
||
...
|
||
include /root/mnemo_cards/tools/deploy/generated_configs/*.conf;
|
||
}
|
||
|
||
|
||
|
||
Но не одновременно с их копиями в /etc/nginx/sites-enabled/, иначе будешь получать конфликтующие server_name vscode.mnemo-cards.online.
|
||
|
||
Сделай так:
|
||
1. Реши, где “истина” для vhost’ов:
|
||
• либо /etc/nginx/sites-enabled/*.conf,
|
||
• либо /root/.../generated_configs/*.conf.
|
||
2. Второй вариант выключи:
|
||
• удаляешь/комментируешь include на ненужный путь;
|
||
• или временно переименовываешь файлы (например, .conf.disabled).
|
||
|
||
⸻
|
||
|
||
Шаг 4. Починить структуру самих vhost-файлов
|
||
|
||
Внутри каждого *.conf из sites-enabled должно быть:
|
||
|
||
server {
|
||
listen 80;
|
||
server_name vscode.mnemo-cards.online;
|
||
|
||
# тут уже location'ы
|
||
location / {
|
||
...
|
||
}
|
||
}
|
||
|
||
Никаких location вне server, никаких limit_req_zone/gzip внутри отдельных vhost’ов (если они уже есть глобально).
|
||
|
||
⸻
|
||
|
||
TL;DR
|
||
|
||
Причина, почему “опять не работает”, по логу такая:
|
||
|
||
nginx сейчас либо не может корректно перезапуститься, либо работает с битой конфигурацией, потому что ты одновременно используешь автогенерённые конфиги из /root/mnemo_cards/tools/deploy/generated_configs/*.conf и ручные в /etc/nginx/sites-enabled/*.conf, причём часть из них подключена в неправильный контекст (server и location “не там”). Плюс периодически пытаешься поднять второй nginx поверх первого, откуда bind() failed (98).
|
||
|