zhizhi/server/nginx/zhuyuan-sovereign.conf

230 lines
8.9 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.

# ═══════════════════════════════════════════════════════════
# 铸渊主权服务器 · Nginx 双域名配置
# ═══════════════════════════════════════════════════════════
#
# 编号: ZY-SVR-NGX-002
# 服务器: 43.134.16.246 (新加坡二区)
# 守护: 铸渊 · ICE-GL-ZY001
# 版权: 国作登字-2026-A-00037559
#
# 双域名架构:
# 主域名 (ZY_DOMAIN_MAIN) → 正式对外网站 · /opt/zhuyuan/sites/production/
# 预览域名 (ZY_DOMAIN_PREVIEW) → 预览/测试站 · /opt/zhuyuan/sites/preview/
#
# 域名变量由 GitHub Secrets 注入:
# ZY_DOMAIN_MAIN — 主域名 (待冰朔配置)
# ZY_DOMAIN_PREVIEW — 预览域名 (待冰朔配置)
# ═══════════════════════════════════════════════════════════
# ─── §1 主域名 · 正式对外网站 ───
# 部署时由 deploy workflow 自动将 ZY_DOMAIN_MAIN_PLACEHOLDER 替换为实际域名
# 替换源: GitHub Secrets → ZY_DOMAIN_MAIN
server {
listen 80;
server_name ZY_DOMAIN_MAIN_PLACEHOLDER 43.134.16.246;
# ─── 安全头 ───
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-Site-Mode "production" always;
# ─── 静态文件根目录 · 主站 ───
root /opt/zhuyuan/sites/production;
index index.html;
# ─── 前端静态文件 ───
location / {
try_files $uri $uri/ /index.html;
}
# ─── 铸渊核心 API (端口 3800) ───
location /api/ {
proxy_pass http://127.0.0.1:3800;
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_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Site-Mode "production";
proxy_cache_bypass $http_upgrade;
proxy_read_timeout 86400;
}
# ─── AI 聊天 API 代理 (端口 3721) · SSE 流式 ───
location /api/chat {
proxy_pass http://127.0.0.1:3721/api/chat;
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 Connection "";
proxy_buffering off;
proxy_cache off;
chunked_transfer_encoding on;
proxy_read_timeout 120s;
proxy_send_timeout 60s;
}
# ─── Persona Studio API (端口 3002) ───
location /api/ps/ {
add_header Access-Control-Allow-Origin * always;
add_header Access-Control-Allow-Methods "GET, POST, OPTIONS" always;
add_header Access-Control-Allow-Headers "Content-Type, Authorization" always;
if ($request_method = OPTIONS) { return 204; }
proxy_pass http://127.0.0.1:3002/api/ps/;
proxy_http_version 1.1;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_read_timeout 120s;
}
# ─── WebSocket ───
location /ws {
proxy_pass http://127.0.0.1:8080;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "Upgrade";
proxy_set_header Host $host;
proxy_read_timeout 86400;
}
# ─── 铸渊专线订阅服务 (端口 3802) ───
location /api/proxy-sub/ {
proxy_pass http://127.0.0.1:3802/;
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;
add_header X-Content-Type-Options nosniff always;
add_header Cache-Control "no-store, no-cache, must-revalidate" always;
}
# ─── 健康探针 ───
location = /health {
proxy_pass http://127.0.0.1:3800/api/health;
proxy_set_header Host $host;
}
# ─── 静态资源缓存 ───
location /static/ {
alias /opt/zhuyuan/sites/production/static/;
expires 7d;
add_header Cache-Control "public, immutable";
}
# ─── 错误页面 ───
error_page 404 /404.html;
error_page 500 502 503 504 /50x.html;
# ─── 访问日志 ───
access_log /opt/zhuyuan/data/logs/nginx-production.log;
error_log /opt/zhuyuan/data/logs/nginx-production-error.log;
}
# ─── §2 预览域名 · 功能模块预览站 ───
# 部署时由 deploy workflow 自动将 ZY_DOMAIN_PREVIEW_PLACEHOLDER 替换为实际域名
# 替换源: GitHub Secrets → ZY_DOMAIN_PREVIEW
# 预览站与主站完全隔离,独立目录,独立日志
server {
listen 80;
server_name ZY_DOMAIN_PREVIEW_PLACEHOLDER;
# ─── 安全头 ───
add_header X-Frame-Options "SAMEORIGIN" always;
add_header X-Content-Type-Options "nosniff" always;
add_header X-Server-Identity "ZY-SVR-002" always;
add_header X-Site-Mode "preview" always;
# ─── 静态文件根目录 · 预览站 ───
root /opt/zhuyuan/sites/preview;
index index.html;
# ─── 前端静态文件 ───
location / {
try_files $uri $uri/ /index.html;
}
# ─── 铸渊 API 反向代理 (端口 3801 · 预览端口) ───
location /api/ {
proxy_pass http://127.0.0.1:3801;
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_set_header X-Site-Mode "preview";
proxy_cache_bypass $http_upgrade;
proxy_read_timeout 86400;
}
# ─── AI 聊天 API 代理 (端口 3721) · 共享主站 ───
location /api/chat {
proxy_pass http://127.0.0.1:3721/api/chat;
proxy_http_version 1.1;
proxy_set_header Host $host;
proxy_set_header Connection "";
proxy_buffering off;
proxy_cache off;
proxy_read_timeout 120s;
}
# ─── Persona Studio API (共享主站端口) ───
location /api/ps/ {
add_header Access-Control-Allow-Origin * always;
add_header Access-Control-Allow-Methods "GET, POST, OPTIONS" always;
add_header Access-Control-Allow-Headers "Content-Type, Authorization" always;
if ($request_method = OPTIONS) { return 204; }
proxy_pass http://127.0.0.1:3002/api/ps/;
proxy_http_version 1.1;
proxy_set_header Host $host;
proxy_read_timeout 120s;
}
# ─── 健康探针 ───
location = /health {
proxy_pass http://127.0.0.1:3801/api/health;
proxy_set_header Host $host;
}
# ─── 预览站独立日志 ───
access_log /opt/zhuyuan/data/logs/nginx-preview.log;
error_log /opt/zhuyuan/data/logs/nginx-preview-error.log;
}
# ═══ §3 HTTPS 配置 (Xray+Nginx共存架构) ═══════════════════
#
# ⚠️ 重要: 443端口由Xray(VPN)占用,Nginx SSL监听127.0.0.1:8443
#
# 架构说明:
# 外部 443 → Xray (VLESS+Reality协议)
# ├── 认证VLESS客户端 → 代理上网 (铸渊专线VPN)
# └── 非VLESS流量 → 回落到 127.0.0.1:8443 (dest参数)
# └── Nginx SSL (处理HTTPS网站请求)
#
# 外部 80 → Nginx (HTTP)
# ├── 域名有SSL证书 → 301重定向到 https://域名 (SSL配置文件处理)
# └── 域名无SSL证书 → 直接服务网站 (本文件§1/§2)
#
# 证书来源: Let's Encrypt (certbot) · setup-ssl.sh 自动配置
# SSL配置文件: /etc/nginx/sites-available/ssl-{domain}.conf (监听127.0.0.1:8443)
# 部署方式: deploy-to-zhuyuan-server.yml action=setup-ssl
# Xray配置: server/proxy/config/xray-config-template.json (dest: 127.0.0.1:8443)
#
# 注意: 以下旧SSL模板已废弃,仅保留作为参考
# 新SSL配置由 setup-ssl.sh 自动生成到 sites-available/ssl-{domain}.conf
#
# ─── §3.1 [已废弃] 预览域名 HTTPS ───
# 原设计: Nginx直接监听443 · 与Xray冲突 · 已改为8443内部端口
# 新设计: 由 setup-ssl.sh 自动生成 · 监听 127.0.0.1:8443
# __SSL_PREVIEW_START__
# (已迁移到 setup-ssl.sh 自动生成的配置文件)
# __SSL_PREVIEW_END__