TinyAuth for Nginx
TinyAuth는 로그인 화면으로 앱을 보호하는 가장 간단한 방법입니다
설치
이제 기존 docker-compose.yml 파일에 TinyAuth를 추가하거나 새 파일을 만들 때입니다. 새 파일을 만드는 경우 services: 섹션을 추가하는 것을 잊지 마세요. 설정은 다음과 같이 간단할 수 있습니다:
tinyauth:
container_name: tinyauth
hostname: tinyauth
image: ghcr.io/maposia/remnawave-tinyauth:latest
restart: always
ports:
- '127.0.0.1:3002:3002'
networks:
- remnawave-network
environment:
- PORT=3002
- APP_URL=https://tinyauth.example.com
- USERS=your-username-password-hash
- SECRET=some-random-32-chars-string
volumes:
- ./data:/data
# USERS와 SECRET을 얻으려면 아래를 읽으세요
변수 구성
사용자의 첫 번째 해시를 생성하려면 다음 명령을 사용하세요
docker run -it --rm ghcr.io/maposia/remnawave-tinyauth:latest user create --interactive
실행 후 사용자 이름과 비밀번호를 입력하라는 메시지가 표시됩니다. output format-docker도 선택해야 합니다
그 후 사용자가 생성되었다는 메시지와 docker-compose.yml의 USERS 환경 변수에 사용해야 하는 username:passwordHash가 표시됩니다
컨테이너를 시작한 후 다음 명령으로 실행 중인 tinyAuth 컨테이너를 사용하여 사용자의 해시를 생성할 수 있습니다.
docker exec -it tinyauth ./tinyauth user create --interactive
FILE 동등 항목이 있는 모든 구성 옵션(예: USERS 및 USERS_FILE)은 환경 변수 대신 파일을 사용할 수 있습니다.
USERS= 쉼표로 구분된 tinyauth 사용자 목록. (필수)
USERS_FILE= tinyauth 사용자 목록이 포함된 파일.
모든 환경 변수는 공식 문서 https://tinyauth.app/docs/reference/configuration 에서 확인할 수 있습니다
SECRET 환경 변수를 생성하려면 openssl rand -base64 32 | tr -dc 'a-zA-Z0-9' | head -c 32를 사용하세요.
구성
다음으로 필요한 경로를 보호하기 위해 nginx.conf를 구성해야 합니다.
upstream tinyauth {
server 127.0.0.1:3002;
}
server {
server_name tinyauth.example.com;
listen 443 ssl;
http2 on;
ssl_certificate "/etc/nginx/ssl/tinyauth.example.com/fullchain.pem";
ssl_certificate_key "/etc/nginx/ssl/tinyauth.example.com/privkey.pem";
ssl_trusted_certificate "/etc/nginx/ssl/tinyauth.example.com/fullchain.pem";
location / {
proxy_pass http://tinyauth;
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;
proxy_set_header X-Forwarded-Host $host;
proxy_set_header X-Forwarded-Port $server_port;
proxy_send_timeout 60s;
proxy_read_timeout 60s;
}
}
server {
server_name panel.remnawave.com;
listen 443 ssl;
http2 on;
ssl_certificate "/etc/nginx/ssl/panel.remnawave.com/fullchain.pem";
ssl_certificate_key "/etc/nginx/ssl/panel.remnawave.com/privkey.pem";
ssl_trusted_certificate "/etc/nginx/ssl/panel.remnawave.com/fullchain.pem";
location / {
auth_request /tinyauth;
error_page 401 = @tinyauth_login;
proxy_http_version 1.1;
proxy_pass http://remnawave;
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;
proxy_set_header X-Forwarded-Host $host;
proxy_set_header X-Forwarded-Port $server_port;
proxy_send_timeout 60s;
proxy_read_timeout 60s;
}
location /tinyauth {
proxy_pass http://tinyauth/api/auth/nginx;
proxy_pass_request_body off;
proxy_set_header Content-Length "";
proxy_set_header x-forwarded-proto $scheme;
proxy_set_header x-forwarded-host $http_host;
proxy_set_header x-forwarded-uri $request_uri;
}
location @tinyauth_login {
return 302 https://tinyauth.example.com/login?redirect_uri=$scheme://$http_host$request_uri;
}
#http://tinyauth.example.com을 자신의 앱 URL로 교체하세요
컨테이너 실행
그 후 nginx를 재시작하고 tinyAuth를 실행합니다
docker compose down && docker compose up -d && docker compose logs -f
중요: 01.12.2025 이전에 tinyAuth를 사용하고 업데이트했다면 버전 3에서 버전 4로 전환한 것입니다.
v3에서 v4로 업데이트
v4부터 Tinyauth는 세션을 저장하기 위해 SQLite 데이터베이스를 사용하는 상태 저장 애플리케이션입니다. 이 변경은 보안을 향상시킵니다. Docker 설정의 경우 다음 볼륨을 포함하세요:
services:
tinyauth:
volumes:
- ./data:/data
API 키 발급
API에 대한 요청의 X-Api-Key 헤더에 Basic base64(username:password)를 사용할 수 있습니다.
예시: X-Api-Key: Basic dXNlcm5hbWU6cGFzc3dvcmQ=