diff --git a/README.md b/README.md index 5a5f852..beed3b6 100644 --- a/README.md +++ b/README.md @@ -93,8 +93,10 @@ make venue ``` Сайт доступен по `https://evening-detective.crabs-games.art`; API и материалы -обслуживаются тем же прокси. Для подключения по LAN задайте постоянный IP ноутбука -в `VENUE_BIND_IP` в `venue/.env` и настройте локальный DNS, как описано ниже. +обслуживаются тем же прокси. Интерфейс и API также можно открыть без локального +DNS по `http://:`. Ссылки на материалы, QR-коды и +билеты при этом остаются на прежнем HTTPS-домене. Для подключения по LAN задайте +постоянный IP ноутбука в `VENUE_BIND_IP` в `venue/.env`. Приложение, база и RustFS подключены только к внутренней Docker-сети. Прокси дополнительно подключён к сети публикации порта. @@ -261,7 +263,8 @@ localStorage создаёт новое устройство. История по двух доменов должны приходить на локальный DNS, а клиенты — достигать ноутбука. Скрипты проекта не меняют роутер и не прошивают его. 5. В `venue/.env` задайте `VENUE_BIND_IP=<постоянный-IP-ноутбука>` и разрешите - входящие TCP 80/443 и TCP/UDP 53 из LAN в межсетевом экране ноутбука. + входящие TCP 80/443, TCP `VENUE_PORT` и TCP/UDP 53 из LAN в межсетевом экране + ноутбука. `VENUE_BIND_IP` должен быть конкретным IPv4-адресом ноутбука, не `0.0.0.0`: он используется и для публикации портов, и для DNS-ответов. Порты должны быть свободны. Для HTTPS менять `APP_BASE_URL` в `.env` не нужно: Compose-дополнение задаёт @@ -280,8 +283,9 @@ localStorage создаёт новое устройство. История по Интерфейс открывается по `https://evening-detective.crabs-games.art`, API — по `https://evening-detective-api.crabs-games.art`. Интерфейс использует свой `/api/`; -прежний API-домен также обслуживается локально. HTTP на портах 80 и прежнем -`VENUE_PORT` перенаправляется на HTTPS с сохранением пути и параметров. +прежний API-домен также обслуживается локально. На `VENUE_PORT` интерфейс и API +доступны по IP через HTTP без редиректа; запросы по доменным именам на порту 80 +перенаправляются на HTTPS с сохранением пути и параметров. CoreDNS публикуется только на `VENUE_BIND_IP:53` по UDP/TCP. Оба домена получают этот IPv4 локально; AAAA-запросы не получают внешние адреса. Для них интернет diff --git a/prod b/prod index f827e32..1400500 160000 --- a/prod +++ b/prod @@ -1 +1 @@ -Subproject commit f827e3280944791bc8db61f9eaeeaf2484edac6e +Subproject commit 1400500d504f40371dbecde776a91a3e1b7ddce8 diff --git a/tests/venue/https.py b/tests/venue/https.py index 532931a..b908048 100644 --- a/tests/venue/https.py +++ b/tests/venue/https.py @@ -236,6 +236,8 @@ with tempfile.TemporaryDirectory(prefix="venue-https-") as directory: assert request(domain, "/api/games/import", method="POST", body=b"test ZIP") == (200, None, "api:/api/games/import") assert request(ui, "/team-story/1?password=test") == (200, None, "spa:/team-story/1?password=test") assert request(api, "/docs/") == (200, None, "api:/docs/") + assert request("192.0.2.10", "/api/test/ping?value=1", tls=False) == (200, None, "api:/api/test/ping?value=1") + assert request("192.0.2.10", "/team-story/1?password=test", tls=False) == (200, None, "spa:/team-story/1?password=test") run("docker", "restart", proxy) run("docker", "exec", proxy, "nginx", "-t") assert request(ui, "/games") == (200, None, "spa:/games") diff --git a/venue/nginx.https.conf b/venue/nginx.https.conf index e1d8f8a..8460180 100644 --- a/venue/nginx.https.conf +++ b/venue/nginx.https.conf @@ -9,15 +9,38 @@ proxy_set_header X-Forwarded-Proto $scheme; proxy_read_timeout 120s; server { - listen 80; - server_name evening-detective.crabs-games.art; - return 308 https://evening-detective.crabs-games.art$request_uri; -} + listen 80 default_server; + server_name _; -server { - listen 80; - server_name evening-detective-api.crabs-games.art; - return 308 https://evening-detective-api.crabs-games.art$request_uri; + if ($host ~ ^(evening-detective\.crabs-games\.art|evening-detective-api\.crabs-games\.art)$) { + return 308 https://$host$request_uri; + } + + location = /api/games/import { + client_max_body_size 1g; + client_body_timeout 1800s; + proxy_read_timeout 1800s; + proxy_send_timeout 1800s; + proxy_request_buffering off; + proxy_pass http://evening_detective_server:8090; + } + + location ~ ^/api/games/[0-9]+/results-package/(apply|download)$ { + client_max_body_size 1g; + client_body_timeout 1800s; + proxy_read_timeout 1800s; + proxy_send_timeout 1800s; + proxy_request_buffering off; + proxy_pass http://evening_detective_server:8090; + } + + location /api/ { + proxy_pass http://evening_detective_server:8090; + } + + location / { + proxy_pass http://evening_detective_frontend:8080; + } } server {