zhizhi/server/nginx/awen-domain-proxy.conf

111 lines
4.8 KiB
Plaintext
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# ═══════════════════════════════════════════════════════════
# 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 支持 ───
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection $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;
}
# ─── WebSocket 升级映射 ───
# 注意: 此 map 块必须位于 http {} 上下文 (不在 server {} 内)
# 如果 nginx.conf 或其他配置文件已定义 $connection_upgrade
# 部署 workflow 会自动检测并移除本段避免冲突
map $http_upgrade $connection_upgrade {
default upgrade;
'' close;
}