This is the multi-page printable view of this section. Click here to print.

Return to the regular view of this page.

Nginx

    Nginx web server configuration for Piglet Run.

    Overview

    Piglet Run uses Nginx as a reverse proxy and web server for all services.

    Configuration

    Main config: /etc/nginx/nginx.conf

    Site configs: /etc/nginx/conf.d/

    Default Configuration

    File: /etc/nginx/conf.d/piglet.conf

    # Piglet Run Nginx Configuration
    
    upstream vscode {
        server 127.0.0.1:8080;
    }
    
    upstream jupyter {
        server 127.0.0.1:8888;
    }
    
    upstream grafana {
        server 127.0.0.1:3000;
    }
    
    server {
        listen 80;
        server_name _;
    
        # Homepage
        location / {
            root /www/piglet;
            index index.html;
        }
    
        # VS Code Server
        location /code {
            proxy_pass http://vscode;
            proxy_http_version 1.1;
            proxy_set_header Upgrade $http_upgrade;
            proxy_set_header Connection "upgrade";
            proxy_set_header Host $host;
            proxy_set_header X-Real-IP $remote_addr;
        }
    
        # JupyterLab
        location /jupyter {
            proxy_pass http://jupyter;
            proxy_http_version 1.1;
            proxy_set_header Upgrade $http_upgrade;
            proxy_set_header Connection "upgrade";
            proxy_set_header Host $host;
        }
    
        # Grafana
        location /ui {
            proxy_pass http://grafana;
            proxy_set_header Host $host;
            proxy_set_header X-Real-IP $remote_addr;
        }
    }
    

    SSL Configuration

    File: /etc/nginx/conf.d/piglet-ssl.conf

    server {
        listen 443 ssl http2;
        server_name example.com;
    
        ssl_certificate /etc/piglet/ssl/cert.pem;
        ssl_certificate_key /etc/piglet/ssl/key.pem;
        ssl_protocols TLSv1.2 TLSv1.3;
        ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256;
        ssl_prefer_server_ciphers off;
    
        # ... location blocks ...
    }
    
    # Redirect HTTP to HTTPS
    server {
        listen 80;
        server_name example.com;
        return 301 https://$server_name$request_uri;
    }
    

    Service Management

    # Start Nginx
    pig start nginx
    
    # Stop Nginx
    pig stop nginx
    
    # Restart Nginx
    pig restart nginx
    
    # Reload configuration
    pig reload nginx
    
    # Test configuration
    nginx -t
    

    Custom Site Configuration

    Create custom site config:

    cat > /etc/nginx/conf.d/mysite.conf << 'EOF'
    server {
        listen 80;
        server_name mysite.example.com;
    
        root /www/mysite;
        index index.html;
    
        location / {
            try_files $uri $uri/ =404;
        }
    }
    EOF
    
    nginx -t && systemctl reload nginx
    

    Proxy Configuration

    WebSocket Support

    location /ws {
        proxy_pass http://backend;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
        proxy_read_timeout 86400;
    }
    

    Node.js Application

    location /app {
        proxy_pass http://127.0.0.1:3001;
        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;
    }
    

    Logging

    Access log: /var/log/nginx/access.log

    Error log: /var/log/nginx/error.log

    log_format main '$remote_addr - $remote_user [$time_local] "$request" '
                    '$status $body_bytes_sent "$http_referer" '
                    '"$http_user_agent" "$http_x_forwarded_for"';
    
    access_log /var/log/nginx/access.log main;
    

    Rate Limiting

    limit_req_zone $binary_remote_addr zone=api:10m rate=10r/s;
    
    location /api {
        limit_req zone=api burst=20 nodelay;
        proxy_pass http://backend;
    }
    

    Troubleshooting

    # Test configuration
    nginx -t
    
    # Check error log
    tail -f /var/log/nginx/error.log
    
    # Check access log
    tail -f /var/log/nginx/access.log
    
    # View connections
    ss -tlnp | grep nginx
    

    See Also