server { listen 80; listen [::]:80; server_name _; root /usr/share/nginx/html; index index.html; client_max_body_size 100M; access_log /var/log/nginx/access.log; error_log /var/log/nginx/error.log; location = /health { proxy_pass http://backend:8111/health; proxy_http_version 1.1; proxy_set_header Host $host; proxy_connect_timeout 10s; proxy_read_timeout 30s; } location ^~ /docs { proxy_pass http://backend:8111; proxy_http_version 1.1; 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; } location = /openapi.json { proxy_pass http://backend:8111/openapi.json; proxy_http_version 1.1; proxy_set_header Host $host; } location ^~ /api/ { proxy_pass http://backend:8111; proxy_http_version 1.1; 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_connect_timeout 10s; proxy_send_timeout 120s; proxy_read_timeout 120s; } location ^~ /minio/zkxw/ { proxy_pass http://minio:9000/zkxw/; proxy_http_version 1.1; # 预签名 URL 按 MINIO_ENDPOINT(minio:9000)签名,Host 须与签名一致 proxy_set_header Host minio:9000; 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_request_buffering off; proxy_buffering off; proxy_read_timeout 600s; proxy_send_timeout 600s; proxy_connect_timeout 10s; add_header Access-Control-Allow-Origin * always; add_header Access-Control-Allow-Methods "GET, HEAD, OPTIONS" always; add_header Access-Control-Allow-Headers "DNT,User-Agent,Keep-Alive,Content-Type,Authorization,Range,If-Modified-Since,Cache-Control" always; if ($request_method = OPTIONS) { add_header Content-Length 0; add_header Content-Type text/plain; return 204; } } # OA H5(mobile-oa-h5,vite base=/oa-h5/) location = /oa-h5 { return 301 /oa-h5/; } location ^~ /oa-h5/ { root /usr/share/nginx/html; try_files $uri $uri/ /oa-h5/index.html; add_header Cache-Control "no-cache" always; } location / { try_files $uri $uri/ /index.html; } location ~* \.(js|css|png|jpg|jpeg|gif|ico|svg|woff|woff2|ttf|eot)$ { expires 30d; add_header Cache-Control "public, immutable" always; add_header X-Content-Type-Options nosniff always; access_log off; } location ~* \.html$ { add_header Cache-Control "no-cache, no-store, must-revalidate" always; add_header Pragma "no-cache" always; add_header Expires "0" always; } location ~ /\. { deny all; access_log off; log_not_found off; } }