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

4.4 KiB

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

sudo systemctl status nginx

Test Configuration

sudo nginx -t

Reload Configuration

sudo systemctl reload nginx

Restart Nginx

sudo systemctl restart nginx

View Access Logs

sudo tail -f /var/log/nginx/access.log

View Error Logs

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

curl http://localhost/

Access Backend API

curl http://localhost/api/health

Access RabbitMQ Management

curl http://localhost/rabbitmq/
# Or open in browser: http://localhost/rabbitmq/

Health Check

curl http://localhost/health

Development Workflow

  1. Start Docker Services (MongoDB & RabbitMQ):

    sudo docker-compose up -d
    
  2. Start Backend Server (Port 3000):

    cd server
    npm run dev
    
  3. Start Frontend Server (Port 5173):

    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:

    sudo nginx -t
    
  3. Permission Issues:

    sudo chown -R www-data:www-data /var/log/nginx/
    
  4. Port Conflicts:

    sudo netstat -tlnp | grep :80
    

Log Analysis

# 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.