BareGit
events
{
    worker_connections 1024;
}

http
{
    limit_conn_zone $binary_remote_addr zone=nethack_connections:10m;
    limit_req_zone $binary_remote_addr zone=nethack_requests:10m rate=30r/s;

    upstream nethack_mcp
    {
        server 127.0.0.1:8765;
        keepalive 32;
    }

    server
    {
        listen 80;
        server_name nethack.example;
        return 308 https://nethack.example$request_uri;
    }

    server
    {
        listen 443 ssl;
        server_name nethack.example;

        ssl_certificate /etc/letsencrypt/live/nethack.example/fullchain.pem;
        ssl_certificate_key /etc/letsencrypt/live/nethack.example/privkey.pem;
        server_tokens off;
        client_max_body_size 1m;

        location /
        {
            limit_conn nethack_connections 32;
            limit_req zone=nethack_requests burst=60 nodelay;

            proxy_pass http://nethack_mcp;
            proxy_http_version 1.1;
            proxy_set_header Connection "";
            proxy_read_timeout 30s;
        }
    }
}