# ============================================================================= # 企微智能IT支持服务台 — Nginx 配置(生产环境 — 2026-07-08 三端正常基准) # ============================================================================= # 状态:坐席端 /itagent/ + 管理端 /itadmin/ + 员工端 /itdesk/ 三端正常 events { worker_connections 1024; } http { include /etc/nginx/mime.types; default_type application/octet-stream; log_format main '$remote_addr - $remote_user [$time_local] "$request" ' '$status $body_bytes_sent "$http_referer" ' '"$http_user_agent"'; access_log /var/log/nginx/access.log main; error_log /var/log/nginx/error.log warn; set_real_ip_from 10.0.0.0/8; set_real_ip_from 172.16.0.0/12; set_real_ip_from 192.168.0.0/16; set_real_ip_from 10.212.0.0/16; real_ip_header X-Forwarded-For; real_ip_recursive on; sendfile on; tcp_nopush on; tcp_nodelay on; keepalive_timeout 65; types_hash_max_size 2048; client_max_body_size 50m; gzip on; gzip_vary on; gzip_min_length 1024; gzip_types text/plain text/css text/xml text/javascript application/javascript application/xml+rss application/json application/ld+json; upstream backend_api { server backend:8000; } server { listen 80; server_name itsupport.servyou.com.cn; location /.well-known/acme-challenge/ { root /usr/share/nginx/html; } location /h5/ { root /usr/share/nginx/html; index index.html; try_files $uri /h5/index.html; } location /h5/api/ { proxy_pass http://backend:8000/; proxy_http_version 1.1; proxy_redirect off; 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 Connection ""; proxy_connect_timeout 60s; proxy_send_timeout 300s; proxy_read_timeout 300s; } location / { return 301 https://$host$request_uri; } } server { listen 443 ssl; http2 on; server_name itsupport.servyou.com.cn; ssl_certificate /etc/nginx/ssl/itsupport.servyou.com.cn.crt; ssl_certificate_key /etc/nginx/ssl/itsupport.servyou.com.cn.key; ssl_protocols TLSv1.2 TLSv1.3; ssl_ciphers HIGH:!aNULL:!MD5; ssl_prefer_server_ciphers on; ssl_session_cache shared:SSL:10m; ssl_session_timeout 1d; add_header X-Content-Type-Options "nosniff" always; add_header X-Frame-Options "SAMEORIGIN" always; add_header X-XSS-Protection "1; mode=block" always; add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always; add_header Referrer-Policy "strict-origin-when-cross-origin" always; server_tokens off; location = /health { access_log off; return 200 "healthy\n"; add_header Content-Type text/plain; } # === 员工端 — H5 直接服务,不能 301 重定向(OAuth 回调依赖此路径)=== location /itdesk/ { alias /usr/share/nginx/html/h5/; index index.html; try_files $uri $uri/ /index.html; } # === 坐席工作台 === location /itagent/ { add_header Cache-Control "no-cache, no-store, must-revalidate" always; add_header Pragma "no-cache" always; add_header Expires "0" always; alias /usr/share/nginx/html/itagent/; index index.html; try_files $uri $uri/ /index.html; } # === 管理后台 === location /itadmin/ { alias /usr/share/nginx/html/itadmin/; index index.html; try_files $uri /itadmin/index.html; } # === 统一入口(已弃用)=== location /itportal/ { alias /usr/share/nginx/html/itportal/; index index.html; try_files $uri /itportal/index.html; } # === 后端 API — /api/ 前缀由 proxy_pass 尾部斜杠剥离 === location /api/ { proxy_pass http://backend_api/; proxy_http_version 1.1; proxy_redirect off; 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 Connection ""; proxy_connect_timeout 60s; proxy_send_timeout 300s; proxy_read_timeout 300s; } # === WebSocket — 不能带尾部斜杠 === location /ws/ { access_log off; proxy_pass http://backend_api; 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_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_read_timeout 86400s; } # === H5 静态文件 === location /h5/ { root /usr/share/nginx/html; index index.html; try_files $uri /h5/index.html; } # === H5 API 代理 === location /h5/api/ { proxy_pass http://backend:8000/; proxy_http_version 1.1; proxy_redirect off; 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 Connection ""; proxy_connect_timeout 60s; proxy_send_timeout 300s; proxy_read_timeout 300s; } # === 根路径 → H5 员工端 === location = / { return 302 /h5/; } } }