Skip to main content

Reverse Proxy Setup

For production deployments, place Gatwy behind a reverse proxy to use a trusted TLS certificate. Gatwy listens on port 7443 by default.

Nginx

server {
listen 443 ssl http2;
server_name gatwy.example.com;

ssl_certificate /etc/letsencrypt/live/gatwy.example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/gatwy.example.com/privkey.pem;

location / {
proxy_pass https://localhost:7443;
proxy_ssl_verify off;
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;

# WebSocket support — required for all remote sessions
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_read_timeout 86400;
}
}

Caddy

gatwy.example.com {
reverse_proxy localhost:7443 {
transport http {
tls_insecure_skip_verify
}
}
}

Caddy automatically provisions and renews Let's Encrypt certificates.

Traefik

services:
gatwy:
image: ghcr.io/kotoxie/gatwy:latest
labels:
- "traefik.enable=true"
- "traefik.http.routers.gatwy.rule=Host(`gatwy.example.com`)"
- "traefik.http.routers.gatwy.tls.certresolver=letsencrypt"
- "traefik.http.services.gatwy.loadbalancer.server.scheme=https"
- "traefik.http.services.gatwy.loadbalancer.server.port=7443"
WebSocket Required

Always enable WebSocket (Upgrade header) support in your reverse proxy. All remote sessions (RDP, SSH, VNC, etc.) use WebSockets — without it, connections will fail immediately.

Using Your Own Certificate Directly

If you prefer not to use a reverse proxy, mount your certificate directly into Gatwy:

environment:
- TLS_CERT_PATH=/app/certs/cert.pem
- TLS_KEY_PATH=/app/certs/key.pem
volumes:
- ./certs:/app/certs:ro