guanghulab/server/nginx/awen-domain-proxy.conf
2026-05-10 13:12:44 +08:00

105 lines
4.6 KiB
Plaintext

# ═══════════════════════════════════════════════════════════
# Awen 域名反向代理配置 · 新加坡中转
# ═══════════════════════════════════════════════════════════
#
# 编号: ZY-SVR-NGX-AWEN
# 中转服务器: ZY-SVR-002 (43.134.16.246 · 新加坡)
# 后端服务器: ZY-SVR-AWEN (广州 · Awen实际服务)
# 守护: 铸渊 · ICE-GL-ZY001
# 版权: 国作登字-2026-A-00037559
#
# 架构:
# 用户浏览器 → Awen域名(DNS→新加坡IP)
# → ZY-SVR-002 Nginx(本配置·反向代理)
# → Awen广州服务器(实际服务)
#
# 域名未备案解决方案:
# 域名DNS A记录指向新加坡IP → 无需中国大陆ICP备案
# 新加坡Nginx将请求反向代理到广州后端
# 延迟约30-50ms · 对Web应用可接受
#
# 占位符由 deploy workflow 自动替换:
# AWEN_DOMAIN_PLACEHOLDER ← GitHub Secret: AWEN_DOMAIN
# AWEN_BACKEND_HOST_PLACEHOLDER ← GitHub Secret: AWEN_BACKEND_HOST
# AWEN_BACKEND_PORT_PLACEHOLDER ← GitHub Secret: AWEN_BACKEND_PORT
# ═══════════════════════════════════════════════════════════
# ─── Awen 域名 · 反向代理到广州后端 ───
server {
listen 80;
server_name AWEN_DOMAIN_PLACEHOLDER;
# ─── 安全头 ───
add_header X-Frame-Options "SAMEORIGIN" always;
add_header X-Content-Type-Options "nosniff" always;
add_header X-XSS-Protection "1; mode=block" always;
add_header X-Server-Identity "ZY-SVR-002" always;
add_header X-Proxy-Mode "awen-reverse-proxy" always;
# ─── 请求体大小限制 (允许文件上传) ───
client_max_body_size 50m;
# ─── 主路由 · 反向代理到广州后端 ───
location / {
proxy_pass http://AWEN_BACKEND_HOST_PLACEHOLDER:AWEN_BACKEND_PORT_PLACEHOLDER;
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_set_header X-Forwarded-Host $host;
# ─── WebSocket 支持 ───
# 使用硬编码 "upgrade" 而非 map 变量,与 zhuyuan-sovereign.conf 保持一致
# 后端会忽略非 WebSocket 请求的 Connection: upgrade 头
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
# ─── 超时设置 (跨境延迟考虑 · 新加坡↔广州) ───
proxy_connect_timeout 15s;
proxy_read_timeout 120s;
proxy_send_timeout 60s;
# ─── 缓冲设置 ───
proxy_buffering on;
proxy_buffer_size 16k;
proxy_buffers 4 32k;
proxy_busy_buffers_size 64k;
# ─── 错误处理 · 后端不可达时返回友好页面 ───
proxy_intercept_errors on;
error_page 502 503 504 /awen_backend_unavailable.html;
}
# ─── 健康检查端点 (不记录日志 · 减少噪音) ───
location = /health {
proxy_pass http://AWEN_BACKEND_HOST_PLACEHOLDER:AWEN_BACKEND_PORT_PLACEHOLDER/health;
proxy_http_version 1.1;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_connect_timeout 5s;
proxy_read_timeout 10s;
access_log off;
}
# ─── Let's Encrypt 证书验证路径 ───
location /.well-known/acme-challenge/ {
root /var/www/certbot;
allow all;
}
# ─── 后端不可达时的友好错误页 ───
location = /awen_backend_unavailable.html {
internal;
default_type text/html;
return 502 '<!DOCTYPE html><html><head><meta charset="utf-8"><title>Service Temporarily Unavailable</title><style>body{font-family:sans-serif;text-align:center;padding:80px 20px;background:#f7f7f7}h1{color:#333}p{color:#666}</style></head><body><h1>503 Service Temporarily Unavailable</h1><p>The backend server is currently unreachable. Please try again later.</p><p style="font-size:12px;color:#999">Proxy: ZY-SVR-002 (Singapore) → Backend: Guangzhou</p></body></html>';
}
# ─── 访问日志 · 独立文件便于监控 ───
access_log /opt/zhuyuan/data/logs/nginx-awen-proxy.log;
error_log /opt/zhuyuan/data/logs/nginx-awen-proxy-error.log;
}