doc: журнал сессии 2026-10-10 + справочник по публичной точке на ВМ (TLS, замеры, ошибки)
This commit is contained in:
@@ -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`
|
||||
не страдают (используют путь), клиенты без него — сломаны.
|
||||
Reference in New Issue
Block a user