doc: журнал сессии 2026-10-10 + справочник по публичной точке на ВМ (TLS, замеры, ошибки)

This commit is contained in:
Repinoid
2026-10-10 13:42:22 +03:00
parent 6800d1abf3
commit ee5503f9ac
2 changed files with 235 additions and 0 deletions
@@ -0,0 +1,95 @@
# Публичная точка SQS на ВМ 213 — как устроено (справочник, 2026-10-10)
> Текущее состояние и конфигурация. Хронология и ошибки — в `HISTORY/2026-10-10-session-log.md`.
> Проверено снаружи: `https://sqs.sinefo.ru/health` → 200.
## 1. Схема
```
клиент (AWS SDK, SigV4)
│ https://sqs.sinefo.ru (443, TLS Let's Encrypt)
▼
[ ВМ 213: главный nginx ] conf.d/sqs-sinefo.conf
│ proxy_pass http://127.0.0.1:4100 ; Host $http_host
▼
[ shared-sqs ] ~/sqs-test/shared-sqs (Go, memory-only)
```
ВМ: публичный `5.172.178.213` (NAT), внутренний `10.10.102.21`, hostname `naeel-vm`.
## 2. Файлы
| Что | Где |
|---|---|
| Vhost nginx (80 ACME+редирект, 443 TLS) | `/etc/nginx/conf.d/sqs-sinefo.conf` (ВМ) |
| Сертификат | `/etc/letsencrypt/live/sqs.sinefo.ru/{fullchain,privkey}.pem` |
| ACME-webroot | `/var/www/acme/.well-known/acme-challenge/` |
| Бинарник/лог/креды | `~/sqs-test/shared-sqs`, `~/sqs-test/sqs.log` |
| Бэкапы nginx | `/etc/nginx/conf.d.bak-*` |
## 3. Конфиг vhost (эталон)
```nginx
server {
listen 80;
server_name sqs.sinefo.ru;
location /.well-known/acme-challenge/ { root /var/www/acme; }
location / { return 301 https://$host$request_uri; }
}
server {
listen 443 ssl;
server_name sqs.sinefo.ru;
ssl_certificate /etc/letsencrypt/live/sqs.sinefo.ru/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/sqs.sinefo.ru/privkey.pem;
include /etc/letsencrypt/options-ssl-nginx.conf;
client_max_body_size 10m;
proxy_request_buffering off;
location / {
proxy_pass http://127.0.0.1:4100;
proxy_http_version 1.1;
proxy_set_header Host $http_host; # ВАЖНО: не $host — иначе SigV4 не сойдётся
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_read_timeout 120s;
proxy_send_timeout 120s;
}
}
```
## 4. Критичные условия (иначе не работает)
1. **`Host $http_host`** — SigV4 подписывает заголовок `Host` целиком (с портом).
`$host` порт отбрасывает → `SignatureDoesNotMatch`. Сервис берёт хост из запроса:
`app/auth/auth_middleware.go:315-317`.
2. **DNS:** `sqs.sinefo.ru A 5.172.178.213`; делегирование `sinefo.ru` → `ns3/ns4.ngcloud.ru`.
Сертификат выдаётся только когда домен резолвится (HTTP-01 через главный nginx, порт 80).
3. **Порт 8443 на 213 занят** DNAT-ом транзита (`→ 95.179.252.111:443`) — не использовать.
4. Проксирование тел — `proxy_request_buffering off`; лимит SQS 256 КБ.
## 5. Замеры (2026-10-10) — болезнь managed-шлюза НЕ воспроизводится
- HTTP 30× (1КБ–256КБ): 30/30 200, max 0.99 с.
- HTTPS 10× (26КБ–260КБ): 10/10 200, 0.7–3.2 с.
- Long-poll `WaitTimeSeconds=20` → 20.3 с, 200.
Гипотеза мануала (Шаг 1) подтверждена: 0 зависаний ~51 с, 0 таймаутов 31–33 с.
## 6. Управление
```bash
# запуск SQS на ВМ
cd ~/sqs-test && setsid nohup env SHARED_SQS_SEED_DEMO=true \
./shared-sqs --admin-token=dev-token-123 --port=4100 --loglevel=info > sqs.log 2>&1 </dev/null &
# креды демо-тенанта
grep "seed: создан тенант" ~/sqs-test/sqs.log | tail -1
# проверка
curl -sS https://sqs.sinefo.ru/health
```
## 7. Известный дефект
`QueueUrl` в ответах = `http://region.host:port/<tenantID>/<queue>` (плейсхолдеры — нет `goaws.yaml`).
Причина: `app/gosqs/tenant_helpers.go:29-37` (схема `http://`, формат `{region}.{host}:{port}`;
Host/Port/Region только из `app/conf/goaws.yaml`, env-переменных нет). Клиенты с `endpoint_url`
не страдают (используют путь), клиенты без него — сломаны.