Tinyauth

리버스 프록시

tinyauth를 리버스 프록시 뒤에서 운영하는 방법

tinyauth는 기본적으로 리버스 프록시 뒤에서 운영되도록 설계됐어요. 클라이언트의 실제 IP 주소와 프로토콜을 올바르게 식별하기 위해 server.trust_proxy를 설정해야 해요.

# config.yaml
server:
  trust_proxy: true
  • server.trust_proxy: 리버스 프록시 헤더를 신뢰할지 여부를 설정해요. 기본값은 false예요.
    • true: 모든 프록시 헤더를 신뢰해요. 완전히 신뢰할 수 있는 네트워크에서만 사용하세요.
    • false: 프록시 헤더를 신뢰하지 않아요.
    • '127.0.0.1': 지정된 IP 주소의 프록시만 신뢰해요.
    • 1 또는 2: 지정된 홉 수만큼의 프록시를 신뢰해요.
Caution

server.trust_proxy를 올바르게 구성하지 않으면 IP 스푸핑 취약점이 발생할 수 있어요. 프로덕션 환경에서는 true 대신 구체적인 프록시 IP 주소 범위를 지정하는 것을 권장해요.


예시

Nginx

Nginx를 리버스 프록시로 사용하는 경우의 설정 예시예요.

프로덕션 환경에서는 server.trust_proxy에 프록시의 IP 주소를 직접 지정하는 것을 권장해요.

# config.yaml
server:
  # Nginx가 같은 호스트에서 실행되는 경우
  trust_proxy: '127.0.0.1'
# /etc/nginx/conf.d/tinyauth.conf
server {
    listen 443 ssl;
    server_name auth.example.com;

    ssl_certificate     /etc/nginx/ssl/cert.pem;
    ssl_certificate_key /etc/nginx/ssl/key.pem;

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

Caddy

Caddy를 리버스 프록시로 사용하는 경우의 설정 예시예요. Caddy는 자동으로 HTTPS 인증서를 발급하고 X-Forwarded-* 헤더를 설정해 줘요.

Docker 네트워크에서 Caddy가 실행되는 경우, Caddy 컨테이너의 IP 대역을 지정해요.

# config.yaml
server:
  # Docker 브릿지 네트워크 대역
  trust_proxy: '172.18.0.0/16'
# Caddyfile
auth.example.com {
    reverse_proxy localhost:8080
}