fastcheck/NGINX_PROXY.md
2026-04-08 13:58:46 -04:00

196 lines
4.4 KiB
Markdown

# Nginx Proxy Configuration for Duxiter
This document describes the nginx proxy setup for the Duxiter application.
## Overview
Nginx is configured as a reverse proxy to handle:
- Frontend requests (React/Vite development server)
- Backend API requests (Node.js/Express server)
- RabbitMQ Management Interface
- Static asset caching and compression
- Security headers and health checks
## Configuration Details
### Proxy Routes
| Route | Destination | Purpose |
|-------|-------------|----------|
| `/` | `http://localhost:5173` | Frontend (React/Vite) |
| `/api/` | `http://localhost:3000/` | Backend API |
| `/rabbitmq/` | `http://localhost:15672/` | RabbitMQ Management |
| `/health` | Built-in endpoint | Health check |
### Port Configuration
- **Nginx**: Port 80 (main entry point)
- **Frontend**: Port 5173 (Vite dev server)
- **Backend**: Port 3000 (Node.js/Express)
- **RabbitMQ Management**: Port 15672
- **MongoDB**: Port 27017 (direct access)
## Features
### Security Headers
- X-Frame-Options: SAMEORIGIN
- X-XSS-Protection: 1; mode=block
- X-Content-Type-Options: nosniff
- Referrer-Policy: no-referrer-when-downgrade
- Content-Security-Policy: default-src 'self' http: https: data: blob: 'unsafe-inline'
### Performance Optimizations
- **Gzip Compression**: Enabled for text-based content
- **Static Asset Caching**: 1-year cache for static files
- **WebSocket Support**: Enabled for real-time features
- **Long Timeout**: 86400 seconds for long-running requests
### Health Monitoring
- Health check endpoint: `http://localhost/health`
- Returns: `200 OK` with "healthy" response
## Management Commands
### Check Nginx Status
```bash
sudo systemctl status nginx
```
### Test Configuration
```bash
sudo nginx -t
```
### Reload Configuration
```bash
sudo systemctl reload nginx
```
### Restart Nginx
```bash
sudo systemctl restart nginx
```
### View Access Logs
```bash
sudo tail -f /var/log/nginx/access.log
```
### View Error Logs
```bash
sudo tail -f /var/log/nginx/error.log
```
## Configuration Files
- **Main Config**: `/etc/nginx/sites-available/duxiter`
- **Enabled Site**: `/etc/nginx/sites-enabled/duxiter` (symlink)
- **Main Nginx Config**: `/etc/nginx/nginx.conf`
## Usage Examples
### Access Frontend
```bash
curl http://localhost/
```
### Access Backend API
```bash
curl http://localhost/api/health
```
### Access RabbitMQ Management
```bash
curl http://localhost/rabbitmq/
# Or open in browser: http://localhost/rabbitmq/
```
### Health Check
```bash
curl http://localhost/health
```
## Development Workflow
1. **Start Docker Services** (MongoDB & RabbitMQ):
```bash
sudo docker-compose up -d
```
2. **Start Backend Server** (Port 3000):
```bash
cd server
npm run dev
```
3. **Start Frontend Server** (Port 5173):
```bash
npm run dev
```
4. **Access Application**:
- Main App: `http://localhost/`
- API: `http://localhost/api/`
- RabbitMQ: `http://localhost/rabbitmq/`
- Health: `http://localhost/health`
## Troubleshooting
### Common Issues
1. **502 Bad Gateway**:
- Check if backend services are running
- Verify port configurations
- Check nginx error logs
2. **Configuration Errors**:
```bash
sudo nginx -t
```
3. **Permission Issues**:
```bash
sudo chown -R www-data:www-data /var/log/nginx/
```
4. **Port Conflicts**:
```bash
sudo netstat -tlnp | grep :80
```
### Log Analysis
```bash
# Real-time access logs
sudo tail -f /var/log/nginx/access.log
# Real-time error logs
sudo tail -f /var/log/nginx/error.log
# Filter specific errors
sudo grep "error" /var/log/nginx/error.log
```
## Security Considerations
1. **HTTPS**: Consider adding SSL/TLS for production
2. **Rate Limiting**: Add rate limiting for API endpoints
3. **Access Control**: Implement IP whitelisting if needed
4. **Headers**: Security headers are already configured
5. **Logs**: Monitor access and error logs regularly
## Performance Tuning
1. **Worker Processes**: Adjust based on CPU cores
2. **Connection Limits**: Configure based on expected load
3. **Buffer Sizes**: Tune for your specific use case
4. **Cache Settings**: Optimize cache headers for static content
## Integration with Docker Services
The nginx proxy works seamlessly with the Docker services:
- **MongoDB**: Direct connection on port 27017
- **RabbitMQ**: Management UI proxied through `/rabbitmq/`
- **Application**: Frontend and backend proxied appropriately
For more information about Docker services, see `DOCKER_SERVICES.md`.