nginx
This commit is contained in:
@@ -0,0 +1,18 @@
|
||||
# Часть 1/2 — включается всегда, с самого первого деплоя (см.
|
||||
# deploy-nginx.yml). Обслуживает ACME-challenge для certbot и редиректит
|
||||
# всё остальное на HTTPS. netrunner-ssl.conf (сами сервисы) деплой
|
||||
# включает отдельно, только когда сертификат уже существует — иначе nginx
|
||||
# откажется стартовать (ssl_certificate на несуществующий файл).
|
||||
server {
|
||||
listen 80;
|
||||
listen [::]:80;
|
||||
server_name grafana.netrunner-vpn.com vault.netrunner-vpn.com;
|
||||
|
||||
location /.well-known/acme-challenge/ {
|
||||
root /var/www/certbot;
|
||||
}
|
||||
|
||||
location / {
|
||||
return 301 https://$host$request_uri;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,91 @@
|
||||
# Часть 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";
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user