# 反向代理設定 本文件說明如何在 Nginx、Traefik、Caddy 等反向代理後部署 ConvertX-CN。 --- ## 必要環境變數 透過反向代理存取時,請設定: ```yaml environment: - TRUST_PROXY=true # 信任 X-Forwarded-* headers - HTTP_ALLOWED=false # Proxy 已處理 HTTPS ``` --- ## Nginx ### 基本配置 ```nginx # /etc/nginx/sites-available/convertx server { listen 80; server_name convertx.example.com; return 301 https://$server_name$request_uri; } server { listen 443 ssl http2; server_name convertx.example.com; # SSL 憑證(Let's Encrypt) ssl_certificate /etc/letsencrypt/live/convertx.example.com/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/convertx.example.com/privkey.pem; # SSL 安全設定 ssl_protocols TLSv1.2 TLSv1.3; ssl_prefer_server_ciphers on; ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256; # 檔案上傳大小限制 client_max_body_size 500M; # 超時設定(大檔案轉換需要) proxy_read_timeout 3600s; proxy_send_timeout 3600s; location / { proxy_pass http://127.0.0.1:3000; proxy_http_version 1.1; # 必要的 headers 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 支援 proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade"; } } ``` ### 啟用設定 ```bash sudo ln -s /etc/nginx/sites-available/convertx /etc/nginx/sites-enabled/ sudo nginx -t sudo systemctl reload nginx ``` --- ## Traefik ### Docker Labels 方式 ```yaml # docker-compose.yml services: convertx: image: convertx/convertx-cn:latest container_name: convertx-cn restart: unless-stopped volumes: - ./data:/app/data environment: - JWT_SECRET=${JWT_SECRET} - TRUST_PROXY=true - HTTP_ALLOWED=false labels: - "traefik.enable=true" - "traefik.http.routers.convertx.rule=Host(`convertx.example.com`)" - "traefik.http.routers.convertx.entrypoints=websecure" - "traefik.http.routers.convertx.tls=true" - "traefik.http.routers.convertx.tls.certresolver=letsencrypt" - "traefik.http.services.convertx.loadbalancer.server.port=3000" networks: - traefik-network networks: traefik-network: external: true ``` ### 動態配置檔 ```yaml # traefik/dynamic/convertx.yml http: routers: convertx: rule: "Host(`convertx.example.com`)" service: convertx entryPoints: - websecure tls: certResolver: letsencrypt services: convertx: loadBalancer: servers: - url: "http://127.0.0.1:3000" ``` --- ## Caddy ### 基本配置 ``` convertx.example.com { reverse_proxy localhost:3000 { header_up X-Real-IP {remote_host} header_up X-Forwarded-Proto {scheme} } request_body { max_size 500MB } } ``` ### 子路徑部署 ``` example.com { handle_path /convertx/* { reverse_proxy localhost:3000 } } ``` 記得設定環境變數: ```yaml environment: - WEBROOT=/convertx ``` --- ## Cloudflare Tunnel ### 1. 建立 Tunnel ```bash cloudflared tunnel create convertx ``` ### 2. 配置 ```yaml # ~/.cloudflared/config.yml tunnel: credentials-file: ~/.cloudflared/.json ingress: - hostname: convertx.example.com service: http://localhost:3000 - service: http_status:404 ``` ### 3. 啟動 ```bash cloudflared tunnel run convertx ``` ### 4. 環境變數 ```yaml environment: - TRUST_PROXY=true - HTTP_ALLOWED=false ``` --- ## 子路徑部署 如需在子路徑部署(如 `https://example.com/convertx`): ### 1. 設定環境變數 ```yaml environment: - WEBROOT=/convertx ``` ### 2. Nginx 配置 ```nginx location /convertx/ { proxy_pass http://localhost:3000/; # ... 其他 proxy 設定 } ``` ### 3. Caddy 配置 ``` example.com { handle_path /convertx/* { reverse_proxy localhost:3000 } } ``` --- ## HTTPS 憑證 ### Let's Encrypt(推薦) 使用 Certbot 自動取得憑證: ```bash sudo apt install certbot python3-certbot-nginx sudo certbot --nginx -d convertx.example.com ``` ### 自簽憑證(測試用) ```bash openssl req -x509 -nodes -days 365 -newkey rsa:2048 \ -keyout /etc/nginx/ssl/convertx.key \ -out /etc/nginx/ssl/convertx.crt ``` --- ## 疑難排解 ### 登入後被踢回登入頁 1. 確認 `TRUST_PROXY=true` 2. 確認反向代理正確傳送 `X-Forwarded-Proto` header ### 上傳檔案失敗 1. 調高 `client_max_body_size`(Nginx) 2. 調高 `request_body max_size`(Caddy) 3. 調高超時設定 ### WebSocket 連線失敗 確認反向代理正確處理 WebSocket: ```nginx proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade"; ``` --- ## 相關文件 - [Docker 部署](docker.md) - [安全性設定](../configuration/security.md) - [環境變數](../configuration/environment-variables.md)