- Introduce Nginx service in docker-compose for handling HTTP/HTTPS traffic. - Configure Nginx with SSL support and health checks for Grafana and Prometheus. - Update env.template to include SERVER_IP and STATUS_PAGE_PASSWORD variables. - Enhance Ansible playbook with tasks for Nginx installation, SSL certificate generation, and configuration management.
107 lines
3.6 KiB
Markdown
107 lines
3.6 KiB
Markdown
# Nginx Reverse Proxy Configuration
|
||
|
||
## Обзор
|
||
|
||
Данная конфигурация nginx обеспечивает безопасный доступ к сервисам мониторинга через HTTPS с самоподписанными SSL сертификатами.
|
||
|
||
## Архитектура
|
||
|
||
```
|
||
Интернет → Nginx (443) →
|
||
├→ /grafana → Grafana (3000)
|
||
├→ /prometheus → Prometheus (9090)
|
||
├→ /status → Status page (с Basic Auth)
|
||
└→ / → Redirect to /grafana
|
||
```
|
||
|
||
## Структура файлов
|
||
|
||
```
|
||
infra/nginx/
|
||
├── nginx.conf # Основная конфигурация nginx
|
||
├── ssl/ # SSL сертификаты (создаются автоматически)
|
||
│ ├── cert.pem # SSL сертификат
|
||
│ └── key.pem # Приватный ключ
|
||
├── conf.d/ # Конфигурации location'ов
|
||
│ ├── grafana.conf # Конфиг для Grafana
|
||
│ ├── prometheus.conf # Конфиг для Prometheus
|
||
│ └── status.conf # Конфиг для status page
|
||
└── .htpasswd # Basic Auth для status page
|
||
```
|
||
|
||
## Доступ к сервисам
|
||
|
||
### Grafana
|
||
- **URL**: `https://your-server-ip/grafana/`
|
||
- **Аутентификация**: Grafana admin credentials
|
||
- **Особенности**: Настроен для работы через sub-path
|
||
|
||
### Prometheus
|
||
- **URL**: `https://your-server-ip/prometheus/`
|
||
- **Особенности**: Полный доступ к Prometheus UI
|
||
|
||
### Status Page
|
||
- **URL**: `https://your-server-ip/status`
|
||
- **Аутентификация**: Basic Auth (admin/admin123 по умолчанию)
|
||
- **Особенности**: Показывает статус nginx (заготовка для Uptime Kuma)
|
||
|
||
## Переменные окружения
|
||
|
||
Добавьте в ваш `.env` файл:
|
||
|
||
```bash
|
||
# Server Configuration
|
||
SERVER_IP=your_server_ip_here
|
||
|
||
# Status Page Configuration
|
||
STATUS_PAGE_PASSWORD=admin123
|
||
```
|
||
|
||
## Безопасность
|
||
|
||
- **SSL/TLS**: Самоподписанные сертификаты (365 дней)
|
||
- **Rate Limiting**: 10 req/s для API, 1 req/s для status page
|
||
- **Security Headers**: X-Frame-Options, X-Content-Type-Options, CSP
|
||
- **Basic Auth**: Для status page
|
||
- **Fail2ban**: Интеграция с nginx логами
|
||
|
||
## Мониторинг
|
||
|
||
- **Health Check**: `https://your-server-ip/nginx-health`
|
||
- **Nginx Status**: `https://your-server-ip/nginx_status` (только локальные сети)
|
||
- **Logs**: `/var/log/nginx/access.log`, `/var/log/nginx/error.log`
|
||
|
||
## Развертывание
|
||
|
||
Конфигурация автоматически развертывается через Ansible playbook:
|
||
|
||
```bash
|
||
ansible-playbook -i inventory.ini playbook.yml
|
||
```
|
||
|
||
## Устранение неполадок
|
||
|
||
### Проверка конфигурации nginx
|
||
```bash
|
||
nginx -t
|
||
```
|
||
|
||
### Проверка SSL сертификатов
|
||
```bash
|
||
openssl x509 -in /etc/nginx/ssl/cert.pem -text -noout
|
||
```
|
||
|
||
### Проверка доступности сервисов
|
||
```bash
|
||
curl -k https://your-server-ip/grafana/api/health
|
||
curl -k https://your-server-ip/prometheus/-/healthy
|
||
curl -k https://your-server-ip/nginx-health
|
||
```
|
||
|
||
## Будущие улучшения
|
||
|
||
- Интеграция с Uptime Kuma для status page
|
||
- Let's Encrypt сертификаты вместо самоподписанных
|
||
- Дополнительные security headers
|
||
- Мониторинг nginx метрик в Prometheus
|