# ═══════════════════════════════════════════════════════════ # Nginx 服务器站点配置模板(纯服务器部署,非 Docker 场景) # ═══════════════════════════════════════════════════════════ # # 适用场景:speccore deploy 的 ssh 类型部署,前端构建产物 # 上传到 Nginx 服务器静态目录,后端以进程/服务方式跑在 # 同一台(或另一台)服务器上。 # # 用法: # 1. 复制本文件到服务器: /etc/nginx/conf.d/.conf # (或 /etc/nginx/sites-available/ + sites-enabled 软链) # 2. 替换 {{占位符}} # 3. 校验并重载: sudo nginx -t && sudo nginx -s reload # # 与 PROJECT.yaml 的对应关系(ssh 类型部署): # remote_dir → 下方 root 指向的目录 # script → sudo nginx -s reload(部署完成后重载配置) # # 占位符说明: # {{DOMAIN}} 站点域名(或服务器 IP) # {{APP_DIR}} 静态资源目录(= remote_dir,如 /var/www/html/admin-web) # {{BACKEND_HOST}} 后端地址(同机为 127.0.0.1:8080,跨机为内网 IP:端口) # ═══════════════════════════════════════════════════════════ # ── HTTP(开发/测试环境,或 HTTPS 前的重定向入口)── server { listen 80; server_name {{DOMAIN}}; # 有证书后启用 HTTPS,取消注释并将整块 HTTP 改为重定向: # return 301 https://$host$request_uri; include /etc/nginx/conf.d/_site-common.conf; } # ── HTTPS(生产环境,证书就绪后启用)── # server { # listen 443 ssl http2; # server_name {{DOMAIN}}; # # ssl_certificate /etc/nginx/ssl/{{DOMAIN}}.pem; # ssl_certificate_key /etc/nginx/ssl/{{DOMAIN}}.key; # ssl_protocols TLSv1.2 TLSv1.3; # ssl_session_cache shared:SSL:10m; # # include /etc/nginx/conf.d/_site-common.conf; # } # ── 站点公共配置(HTTP/HTTPS 共用,独立成文件避免重复)── # 保存为 /etc/nginx/conf.d/_site-common.conf 后 include, # 或直接展开合并进上方 server 块。 # 静态资源根目录(= PROJECT.yaml 中 ssh 类型的 remote_dir) root {{APP_DIR}}; index index.html; # gzip 压缩(减少传输体积) gzip on; gzip_min_length 1k; gzip_comp_level 5; gzip_types text/plain text/css application/javascript application/json image/svg+xml; # ── 前端路由(SPA 应用)── location / { try_files $uri $uri/ /index.html; } # ── 静态资源长期缓存 ── location ~* \.(js|css|png|jpg|jpeg|gif|ico|svg|woff|woff2)$ { expires 1y; add_header Cache-Control "public, immutable"; } # ── API 反向代理到后端(同机后端)── location /api/ { proxy_pass http://{{BACKEND_HOST}}/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_set_header X-Forwarded-Proto $scheme; proxy_connect_timeout 10s; proxy_read_timeout 60s; } # ── WebSocket 升级(后端含长连接/推送时启用)── # location /ws { # proxy_pass http://{{BACKEND_HOST}}; # proxy_http_version 1.1; # proxy_set_header Upgrade $http_upgrade; # proxy_set_header Connection "upgrade"; # proxy_read_timeout 3600s; # } # ── 后端健康检查端点透传(部署后验证用)── # location = /healthz { # proxy_pass http://{{BACKEND_HOST}}/actuator/health; # access_log off; # } # ── 禁止访问隐藏文件 ── location ~ /\. { deny all; }