server { listen 80; server_name _; charset utf-8; client_max_body_size 100m; # 健康检查(宿主机 nginx 探活用) location /health { return 200 "ok\n"; add_header Content-Type text/plain; } # 版本管理 — 必须在通用 /api/ 之前 location /api/v1/updates/ { proxy_pass http://update-service:8084/api/v1/updates/; 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_read_timeout 60s; } location /api/v1/rn/ { proxy_pass http://update-service:8084/api/v1/rn/; 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_read_timeout 120s; } # IM HTTP — 必须在通用 /api/ 之前 location /api/im/ { proxy_pass http://im-service:8082/api/im/; 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_read_timeout 60s; } # IM WebSocket location /ws/im { proxy_pass http://im-service:8082/ws/im; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade"; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_read_timeout 3600s; } # License — 必须在通用 /api/ 之前 location /api/license/ { proxy_pass http://license-service:8085/api/license/; 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_read_timeout 60s; } # 文件上传下载 location /file/ { proxy_pass http://file-service:8086/file/; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; client_max_body_size 500m; proxy_read_timeout 300s; proxy_send_timeout 300s; } # 核心 API(兜底,在所有具体 /api/xxx/ 之后) location /api/ { proxy_pass http://tenant-service:9001/api/; 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_read_timeout 60s; } location /actuator/ { proxy_pass http://tenant-service:9001/actuator/; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; } # 控制台前端(兜底路由,必须最后) # sub_filter 替换前端 JS bundle 中硬编码的公有平台地址为私有部署地址 location / { proxy_pass http://tenant-web:80; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header Accept-Encoding ""; sub_filter 'wss://im.dev.xuqinmin.com/ws/im' 'wss://$host/ws/im'; sub_filter 'https://im.dev.xuqinmin.com' 'https://$host'; sub_filter 'https://dev.xuqinmin.com' 'https://$host'; sub_filter_once off; sub_filter_types text/html text/javascript application/javascript; } }