| name | web-server-setup |
| description | 安装配置 nginx 静态文件服务器,用于展示 Claude Code 生成的富内容(表格、图表、报告等)。当用户说"装nginx"、"配web服务"、"setup web server"时触发。 |
Web Server 配置
本机 nginx 静态文件服务器,用于 serve Claude Code 生成的 HTML 内容。
架构
Claude Code 生成 HTML → /var/www/cc/ → 本机 nginx :80 → hk-jmp nginx 反代 → GCP ALB → https://cc.higcp.com/
目录结构
/var/www/cc/
├── index.html # 文件列表首页
├── pages/ # Claude 生成的富内容页面
│ ├── gpu-comparison-20260213.html
│ └── benchmark-results.html
└── assets/ # 静态资源(CSS/JS/图片)
└── style.css
安装
scripts/setup-nginx.sh
脚本会:
- 安装 nginx(如果没装)
- 创建
/var/www/cc/ 目录结构
- 部署 nginx 配置到
/etc/nginx/sites-available/cc
- 启用站点并重启 nginx
生成页面
Claude Code 在需要展示复杂内容时:
- 生成 HTML 文件到
/var/www/cc/pages/
- 文件名格式:
{topic}-{YYYYMMDD-HHmmss}.html
- 在 Discord 消息中发送链接:
https://cc.higcp.com/pages/{filename}
nginx 配置要点
- 监听 80 端口
- root:
/var/www/cc/
- autoindex off(目录列表已关闭,防止枚举页面)
- 允许跨域(Discord embed 预览)
- gzip 压缩
- 安全: server_tokens off, X-Content-Type-Options, X-Frame-Options, CSP, 只允许 GET/HEAD, 隐藏文件 404
安全模型
基础防护(默认):
- autoindex 关闭,无法浏览目录
- 只有知道完整文件名才能访问
- nginx 安全 headers + 只允许 GET/HEAD
可选:IAP 登录保护
询问用户是否需要 Google 账号登录保护。如果需要,执行以下步骤:
- 创建带 IAP 的 backend service:
gcloud compute backend-services create cc-bs-iap --global \
--project=PROJECT --protocol=HTTP --health-checks=hc-http-80 \
--load-balancing-scheme=EXTERNAL_MANAGED
gcloud compute backend-services add-backend cc-bs-iap --global \
--project=PROJECT --instance-group=INSTANCE_GROUP \
--instance-group-zone=ZONE --balancing-mode=UTILIZATION
- 开启 IAP 并授权用户:
gcloud iap web enable --resource-type=backend-services \
--service=cc-bs-iap --project=PROJECT
gcloud iap web add-iam-policy-binding --resource-type=backend-services \
--service=cc-bs-iap --project=PROJECT \
--member=user:EMAIL --role=roles/iap.httpsResourceAccessor
- URL map 按路径分流(
/pages/* 走 IAP,其余公开):
gcloud compute url-maps add-path-matcher ALB_NAME --project=PROJECT \
--path-matcher-name=cc-paths --default-service=cc-bs \
--path-rules="/pages/*=cc-bs-iap"
效果:
/ 和 /assets/* — 公开(Discord OG 爬虫可访问)
/pages/* — 需 Google 账号登录(IAP 拦截)
- IAP 传播需要 5-10 分钟