# Часть 2/2 — деплой (deploy-nginx.yml) включает этот файл ТОЛЬКО когда на # сервере уже есть сертификат /etc/letsencrypt/live/grafana.netrunner-vpn.com/ # (иначе nginx -t упадёт: ssl_certificate на несуществующий файл). До первого # `certbot certonly` этот файл лежит на диске, но не подключён — только # netrunner-http.conf, обслуживающий ACME-challenge. # # Обе площадки закрыты HTTP Basic Auth (доп. пароль ДО того, как запрос # вообще дойдёт до Grafana/Vaultwarden) — см. deploy-nginx.yml про # .htpasswd. Для Vaultwarden basic auth намеренно НЕ накрывает /api, # /identity, /notifications — мобильные и десктоп-клиенты Bitwarden, а # также браузерное расширение, не умеют проходить Basic Auth на этих # путях (только сама веб-морда на "/" людьми открывается руками), # закрыть их означало бы сломать синхронизацию всем клиентам. server { listen 443 ssl; listen [::]:443 ssl; http2 on; server_name grafana.netrunner-vpn.com; # Сертификат лежит в папке ПЕРВОГО домена из -d при выпуске (grafana...), # даже несмотря на то что SAN-сертификат покрывает оба домена — так у # certbot всегда, это не опечатка. ssl_certificate /etc/letsencrypt/live/grafana.netrunner-vpn.com/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/grafana.netrunner-vpn.com/privkey.pem; auth_basic "Restricted"; auth_basic_user_file /etc/nginx/.htpasswd; location / { proxy_pass http://127.0.0.1:3030; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; # Grafana Live (websocket) — используется для live-обновления панелей. proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade"; } } server { listen 443 ssl; listen [::]:443 ssl; http2 on; server_name vault.netrunner-vpn.com; ssl_certificate /etc/letsencrypt/live/grafana.netrunner-vpn.com/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/grafana.netrunner-vpn.com/privkey.pem; client_max_body_size 525M; # вложения Vaultwarden # Веб-морда ("/") — единственное место, которое реально открывают руками # в браузере, поэтому единственное место с доп. паролем. location / { auth_basic "Restricted"; auth_basic_user_file /etc/nginx/.htpasswd; proxy_pass http://127.0.0.1:8081; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; } # API/логин/синхронизация — сюда ходят мобильные приложения, десктоп-клиент # и браузерное расширение напрямую, без Basic Auth (клиенты Bitwarden его # на этих путях не поддерживают — добавить сюда auth_basic значило бы # сломать синхронизацию всем, кроме веб-морды). location ~ ^/(api|identity)/ { proxy_pass http://127.0.0.1:8081; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; } # Websocket-уведомления о синхронизации между устройствами — тоже без # Basic Auth (по той же причине) и с апгрейдом соединения. location /notifications/hub { proxy_pass http://127.0.0.1:8081; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade"; } }