This commit is contained in:
toom1996
2026-10-19 00:33:25 +08:00
parent 3860e731db
commit 5db90af73a
17 changed files with 853 additions and 5244 deletions

92
nginx/default.conf Normal file
View File

@ -0,0 +1,92 @@
# 蓝绿切换的入口:唯一对外端口 80,容器常驻、发布时从不重建。
# 上游地址不写死,全部来自 active/ 下的 map(由 deploy.sh 生成 + nginx -s reload)。
# 该目录挂的是仓库外的 .deploy/nginx,所以发布时不会把 git 工作区改脏。
# 用变量做 proxy_pass,槽容器不存在时 nginx 依然能启动(按请求时才解析)。
# 切换点:map $host $api_up { default "backend_a:8090"; } ...
include /etc/nginx/active/*.conf;
# Docker 内置 DNS:服务名 -> 容器 IP
resolver 127.0.0.11 valid=10s ipv6=off;
resolver_timeout 3s;
server {
listen 80;
server_name _;
# SSG 内部接口:公网一律 404,绝不从外部出口
location ~ ^/api/(internal/ssg/|v1/ssg/) {
return 404;
}
# 后端 API:proxy_pass 不带 URI,原样透传 /api/... 前缀(带斜杠会把前缀剥掉导致全站 404)
location /api/ {
proxy_pass http://$api_up;
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_connect_timeout 3s;
proxy_read_timeout 60s;
}
# Astro 构建产物文件名带内容哈希,可长期缓存
location /_astro/ {
proxy_pass http://$web_up;
proxy_set_header Host $host;
expires 1y;
}
# Astro node server:SSR 详情页与静态资源
location / {
proxy_pass http://$web_up;
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_read_timeout 60s;
}
# 部署脚本用来确认代理本身活着
location = /healthz {
access_log off;
return 200 "ok\n";
}
}
# 内部:web 容器的 SSR 取数走这里,永远指向当前活跃的后端槽
server {
listen 18090;
access_log off;
location / {
proxy_pass http://$api_up;
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 60s;
}
}
# 内部:前端构建期取 SSG 数据(只绑宿主回环,前端镜像 build 时用 host 网络访问)
server {
listen 127.0.0.1:18091;
access_log off;
location / {
proxy_pass http://$ssg_up;
proxy_set_header Host $host;
}
}
# 内部:管理后台(只绑宿主回环;远程访问用 SSH 隧道到 18092)
server {
listen 127.0.0.1:18092;
location / {
proxy_pass http://$admin_up;
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;
}
}