proxy: set up reverse proxy
This commit is contained in:
parent
f9684532bd
commit
2119b8c666
4 changed files with 93 additions and 0 deletions
33
proxy/nginx/conf.d/grafana.conf
Normal file
33
proxy/nginx/conf.d/grafana.conf
Normal file
|
@ -0,0 +1,33 @@
|
||||||
|
# HTTP configuration
|
||||||
|
# -- Redirect all HTTP requests to HTTPS port
|
||||||
|
|
||||||
|
server {
|
||||||
|
listen 80; # HTTP port
|
||||||
|
server_name grafana.systemsobscure.net;
|
||||||
|
location / {
|
||||||
|
return 301 https://$host$request_uri; # Variable is a placeholder for all requests to the server name
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
# HTTPS configuration
|
||||||
|
|
||||||
|
server {
|
||||||
|
listen 443 ssl;
|
||||||
|
server_name grafana.systemsobscure.net;
|
||||||
|
|
||||||
|
# SSL configuration
|
||||||
|
ssl_certificate /etc/letsencrypt/live/systemsobscure.net/fullchain.pem
|
||||||
|
ssl_certificate_key /etc/letsencrypt/live/systemsobscure.net/privkey.pem;
|
||||||
|
|
||||||
|
# Security headers
|
||||||
|
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;
|
||||||
|
|
||||||
|
# Proxy Configuration
|
||||||
|
location / {
|
||||||
|
proxy_pass http://grafana:3000;
|
||||||
|
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;
|
||||||
|
}
|
||||||
|
}
|
16
proxy/nginx/docker-compose.yml
Normal file
16
proxy/nginx/docker-compose.yml
Normal file
|
@ -0,0 +1,16 @@
|
||||||
|
services:
|
||||||
|
nginx:
|
||||||
|
image: nginx:latest
|
||||||
|
ports:
|
||||||
|
- "80:80"
|
||||||
|
- "443:443"
|
||||||
|
volumes:
|
||||||
|
- ./conf.d:/etc/nginx/conf.d
|
||||||
|
- /etc/letsencrypt:/etc/letsencrypt:ro
|
||||||
|
restart: unless-stopped
|
||||||
|
networks:
|
||||||
|
- web
|
||||||
|
|
||||||
|
networks:
|
||||||
|
web:
|
||||||
|
external: true
|
|
@ -23,3 +23,39 @@ can scrape. Node Exporter is one of these - it exposes hardware and OS metrics
|
||||||
|
|
||||||
Loki is for storing and displaying logs. This is part of Grafana. Promtail (also
|
Loki is for storing and displaying logs. This is part of Grafana. Promtail (also
|
||||||
part of Grafana) is for collecting the logs.
|
part of Grafana) is for collecting the logs.
|
||||||
|
|
||||||
|
## Explaining reverse proxy
|
||||||
|
|
||||||
|
Yes, that's correct. Let me break down how the overall system works at the top level:
|
||||||
|
|
||||||
|
Nginx (Your Reverse Proxy)
|
||||||
|
|
||||||
|
Listens on public ports 80 (HTTP) and 443 (HTTPS)
|
||||||
|
Has separate config files in conf.d/ for each service
|
||||||
|
Each config file (like grafana.conf) specifies:
|
||||||
|
|
||||||
|
The domain name (grafana.systemsobscure.net)
|
||||||
|
HTTPS certificate configuration
|
||||||
|
Redirection from HTTP to HTTPS
|
||||||
|
Which internal service and port to route requests to (e.g., grafana:3000)
|
||||||
|
|
||||||
|
Docker Networks
|
||||||
|
|
||||||
|
A shared external network (typically called "web") connects Nginx to all your services
|
||||||
|
Each service also has its own internal network for service-specific communication
|
||||||
|
|
||||||
|
Services (Grafana, etc.)
|
||||||
|
|
||||||
|
Run on their own internal ports (Grafana on 3000, etc.)
|
||||||
|
Connect to the shared "web" network so Nginx can reach them
|
||||||
|
Are NOT directly exposed to the internet
|
||||||
|
|
||||||
|
The flow works like this:
|
||||||
|
|
||||||
|
User requests grafana.systemsobscure.net
|
||||||
|
Request hits your server on port 80/443
|
||||||
|
Nginx receives it, finds the matching server_name in conf.d
|
||||||
|
Nginx forwards the request to the internal Grafana container on port 3000
|
||||||
|
Response flows back through the same path
|
||||||
|
|
||||||
|
This setup keeps your services secure by only exposing them through the Nginx proxy, which handles all SSL termination and access control.
|
||||||
|
|
|
@ -41,8 +41,16 @@ services:
|
||||||
- GF_USERS_ALLOW_SIGN_UP=false
|
- GF_USERS_ALLOW_SIGN_UP=false
|
||||||
ports:
|
ports:
|
||||||
- "3000:3000" # For local testing; remove in production with nginx
|
- "3000:3000" # For local testing; remove in production with nginx
|
||||||
|
networks:
|
||||||
|
- default
|
||||||
|
- web
|
||||||
|
|
||||||
volumes:
|
volumes:
|
||||||
prometheus_data:
|
prometheus_data:
|
||||||
loki_data:
|
loki_data:
|
||||||
grafana_data:
|
grafana_data:
|
||||||
|
|
||||||
|
networks:
|
||||||
|
default:
|
||||||
|
web:
|
||||||
|
external: true
|
||||||
|
|
Loading…
Add table
Reference in a new issue