# Kioku MCP Server — nginx reverse proxy (HTTPS via Tailscale or self-signed cert) # # Copy to: /etc/nginx/sites-available/kioku # Enable: sudo ln -s /etc/nginx/sites-available/kioku /etc/nginx/sites-enabled/kioku # Reload: sudo nginx -t && sudo systemctl reload nginx server { listen 443 ssl; listen [::]:443 ssl; # Tailscale hostname or internal IP server_name kioku.internal; ssl_certificate /etc/ssl/kioku/kioku.crt; ssl_certificate_key /etc/ssl/kioku/kioku.key; ssl_protocols TLSv1.2 TLSv1.3; ssl_ciphers HIGH:!aNULL:!MD5; client_max_body_size 1m; location /mcp { proxy_pass http://127.0.0.1:5173; proxy_http_version 1.1; 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; # Streamable HTTP may use SSE: disable buffering so events arrive immediately. proxy_buffering off; proxy_cache off; proxy_read_timeout 300s; proxy_send_timeout 300s; # Preserve streamed content without proxy compression/buffering. proxy_set_header Accept-Encoding ""; } # Public and minimal: use for process liveness only. location = /health/live { proxy_pass http://127.0.0.1:5173/health/live; proxy_buffering off; } # Kioku enforces its bearer token here; use for traffic readiness. location = /health/ready { proxy_pass http://127.0.0.1:5173/health/ready; proxy_set_header Authorization $http_authorization; proxy_buffering off; } } # Redirect HTTP → HTTPS server { listen 80; listen [::]:80; server_name kioku.internal; return 301 https://$host$request_uri; }