这个项目用于管理和部署多个静态HTML文件到远程服务器,并通过nginx主配置文件提供统一的案例管理。项目采用主配置文件架构,所有静态案例项目都通过 case.coderboot.xyz 域名的不同路径进行访问。
- ✅ 主配置文件架构 - 使用单一nginx配置管理所有静态案例
- ✅ 路径分离访问 - 通过不同路径区分各个案例项目
- ✅ 自动化部署脚本 - 智能检测和创建主配置文件
- ✅ 响应式主页设计 - 动态加载案例列表
- ✅ RESTful API接口 - 提供JSON格式的页面列表
- ✅ nginx性能优化 - gzip压缩、缓存策略
- ✅ 安全头部配置 - 完整的Web安全防护
- ✅ 完整的错误处理 - 优雅的错误页面
- ✅ 版本控制管理 - Git管理和SSH密钥安全
case.coderboot.xyz (主域名)
├── /showpage/ # ShowPage 案例
├── /postereditor/ # PostEditor 案例 (规划中)
├── /案例3/ # 未来案例
└── /案例N/ # ...更多案例
nginx/
├── sites-available/
│ ├── case.conf # 主配置文件 (管理所有静态案例)
│ └── echo.conf # 独立服务配置
└── sites-enabled/
├── case.conf -> ../sites-available/case.conf
└── echo.conf -> ../sites-available/echo.conf
showpage/
├── case.example.conf # nginx配置文件示例
├── deploy.sh # 自动部署脚本
├── README.md # 项目说明文档
├── SSH_SETUP.md # SSH密钥设置指南
├── DEPLOYMENT_VALIDATION.md # 部署验证流程文档
├── promptbase-link-refly-guizang-v2-claude4.html # HTML页面1
├── arxivlicense-link-refly-guizang-v2-claude4.html # HTML页面2
├── openevals-link-sumbuddy-refly-guizang-v3-claude4.html # HTML页面3
├── openevals-link-refly-guizang-v3-claude4.html # HTML页面4
└── openevals-link-refly-guizang-v2-claude4.html # HTML页面5
项目包含了一个完整的nginx配置文件示例 case.example.conf,这个文件包含:
- 🔧 完整配置:包含所有必要的location块、安全头部、缓存策略
- 📝 详细注释:每个配置项都有详细的中文注释说明
- 🚀 部署指南:包含完整的使用说明和部署步骤
- 🔒 安全配置:防止XSS、点击劫持等安全威胁
- ⚡ 性能优化:gzip压缩、智能缓存策略
- 📈 扩展支持:为未来案例预留了配置模板
# 复制配置文件到nginx目录
sudo cp case.example.conf /etc/nginx/sites-available/case.conf
# 启用配置
sudo ln -sf /etc/nginx/sites-available/case.conf /etc/nginx/sites-enabled/case.conf
# 测试配置
sudo nginx -t
# 重载nginx
sudo systemctl reload nginx此配置文件是项目架构的核心,建议在手动部署或故障排除时参考使用。
项目最初尝试使用nginx的 alias 指令,但遇到了路径解析和配置复杂性问题。最终采用了更可靠的符号链接 + root配置方案:
# 容易出现路径解析错误的配置
location /showpage/ {
alias /root/www/showpage/;
try_files $uri $uri/ /showpage/index.html; # 易错的路径引用
}# 更可靠的配置方式
server {
root /var/www/html; # 全局root设置
}
location /showpage {
try_files $uri $uri/ $uri/index.html =404; # 简洁的路径处理
}实现原理:
- 文件实际存储:
/root/www/showpage/ - 符号链接映射:
/var/www/html/showpage -> /root/www/showpage - nginx配置:使用
root /var/www/html统一处理所有location
技术优势:
- 🔧 配置简洁:避免复杂的alias路径映射
- 🚀 路径可靠:不会出现try_files的路径解析错误
- 🔒 权限清晰:文件保持在
/root/www下由root管理 - 📈 易于扩展:新案例只需创建符号链接和添加location块
- 服务器地址: 114.55.150.44
- 用户名: root
- SSH别名: aliyun-ecs-showpage(需配置)
- 部署目录: /root/www/showpage (文件实际存储位置)
- nginx映射: /var/www/html/showpage (通过符号链接)
- 访问域名: case.coderboot.xyz/showpage
- 主配置文件: /etc/nginx/sites-available/case.conf
项目使用SSH密钥认证进行安全连接:
- 私钥:
~/.ssh/aliyun_ecs_id_rsa - 公钥:
~/.ssh/aliyun_ecs_id_rsa.pub - SSH配置:
~/.ssh/config中的aliyun-ecs-showpage别名 - 设置指南:
SSH_SETUP.md
- 确保本地已安装SSH客户端
- 确保可以通过SSH密钥登录到远程服务器(避免密码输入)
- 远程服务器已安装nginx
项目提供两种部署脚本:
适用于首次部署或手动控制配置更新:
chmod +x deploy.sh && ./deploy.sh自动检测HTML文件并动态更新配置,适用于日常开发和新页面添加:
chmod +x deploy-enhanced.sh && ./deploy-enhanced.sh增强版特性:
- 🔍 自动检测:自动扫描本地所有
*.html文件 - 📝 智能提取:自动从HTML文件中提取页面标题
- 🔄 动态更新:自动更新nginx配置中的页面列表API
- 🎨 美观主页:自动生成包含所有页面的美观索引页面
- ⚡ 一键部署:无需手动更新配置文件
-
设置SSH密钥认证(推荐):
按照以下步骤设置SSH密钥:
# 生成专用SSH密钥对 ssh-keygen -t rsa -b 4096 -f ~/.ssh/aliyun_ecs_id_rsa -C "showpage-deploy@aliyun-ecs" # 上传公钥到服务器 ssh-copy-id -i ~/.ssh/aliyun_ecs_id_rsa.pub aliyun-ecs-showpage
📖 详细设置说明:请参考
SSH_SETUP.md文档获取完整的SSH密钥设置指南,包含SSH客户端配置等步骤。📋 部署验证流程:请参考
DEPLOYMENT_VALIDATION.md文档获取完整的部署验证流程和技术问题解决方案。 -
运行部署脚本:
# 推荐:使用增强版部署脚本 chmod +x deploy-enhanced.sh && ./deploy-enhanced.sh # 或者:使用基础部署脚本 chmod +x deploy.sh && ./deploy.sh
- 创建HTML文件:在项目根目录中创建新的HTML文件
- 本地测试:在浏览器中打开文件进行本地测试
- 版本控制:
git add your-new-page.html git commit -m "添加新页面: your-new-page.html" git push origin main
使用增强版部署脚本进行一键部署:
chmod +x deploy-enhanced.sh && ./deploy-enhanced.sh增强版脚本会自动:
- ✅ 检测新的HTML文件
- ✅ 提取页面标题(从
<title>标签) - ✅ 更新nginx配置中的API页面列表
- ✅ 上传所有文件到服务器
- ✅ 更新服务器配置并重载nginx
- ✅ 生成包含新页面的美观索引页面
- 访问主页:http://case.coderboot.xyz/showpage/
- 访问新页面:http://case.coderboot.xyz/showpage/your-new-page.html
- 检查API:http://case.coderboot.xyz/showpage/api/pages
如果需要手动更新配置:
- 编辑
case.example.conf中的页面列表 - 使用基础部署脚本:
./deploy.sh
- 🎯 文件命名:使用描述性的文件名,便于识别
- 📝 页面标题:确保HTML文件包含清晰的
<title>标签 - 🔄 增量部署:推荐使用增强版脚本进行日常部署
- 📋 版本控制:所有新页面都应提交到Git仓库
- 🧪 本地测试:部署前在本地浏览器中测试页面
部署脚本会自动执行以下操作:
- ✅ 创建远程目录 - 在服务器上创建
/root/www/showpage目录 - ✅ 上传HTML文件 - 将所有
*.html文件上传到服务器 - ✅ 设置文件权限 - 设置适当的文件权限和所有者
- ✅ 检查主配置文件 - 智能检测
/etc/nginx/sites-available/case.conf是否存在 - ✅ 创建/更新主配置 - 自动创建或保持现有的主配置文件(使用符号链接方案)
- ✅ 创建符号链接 - 建立
/var/www/html/showpage -> /root/www/showpage映射 - ✅ 启用网站配置 - 创建软链接到
sites-enabled目录 - ✅ 测试nginx配置 - 验证配置文件语法正确
- ✅ 重载nginx服务 - 应用新的配置
- ✅ 创建索引页面 - 生成美观的案例导航主页
/etc/nginx/sites-available/case.conf 是核心配置文件,包含以下功能:
- 监听80端口
- 服务器名称:
case.coderboot.xyz - 主域名管理所有静态案例
- 应用路径:
/showpage - 文件实际目录:
/root/www/showpage(通过符号链接映射) - nginx访问路径:
/var/www/html/showpage(符号链接指向实际目录) - 默认首页:
index.html - API端点:
/showpage/api/pages
项目采用符号链接方案解决nginx alias配置的复杂性:
- 文件存储:实际文件存储在
/root/www/showpage/ - 访问映射:nginx通过符号链接
/var/www/html/showpage -> /root/www/showpage访问文件 - 配置优势:使用
root /var/www/html+location /showpage替代复杂的alias配置 - 维护便利:文件权限由
root:root管理,避免权限问题
- Gzip压缩:启用文件压缩,减少传输大小
- 缓存策略:静态文件缓存30天,HTML文件不缓存
- 安全头部:设置各种安全相关的HTTP头部
- 模块化设计:新案例可轻松添加到主配置文件
- 路径隔离:每个案例通过独立路径访问
- 统一管理:所有静态案例使用同一配置文件
部署完成后,您可以通过以下方式访问:
- URL: http://case.coderboot.xyz/showpage/
- 功能: 显示所有页面的导航界面,动态加载案例信息
- 🏠 主页导航: http://case.coderboot.xyz/showpage/
- 📄 PromptBase页面: http://case.coderboot.xyz/showpage/promptbase-link-refly-guizang-v2-claude4.html
- 📄 ArxivLicense页面: http://case.coderboot.xyz/showpage/arxivlicense-link-refly-guizang-v2-claude4.html
- 📄 OpenEvals Sumbuddy页面: http://case.coderboot.xyz/showpage/openevals-link-sumbuddy-refly-guizang-v3-claude4.html
- 📄 OpenEvals v3页面: http://case.coderboot.xyz/showpage/openevals-link-refly-guizang-v3-claude4.html
- 📄 OpenEvals v2页面: http://case.coderboot.xyz/showpage/openevals-link-refly-guizang-v2-claude4.html
当需要添加新的静态案例项目时,按照以下步骤操作:
# 创建新案例目录
mkdir /root/www/新案例名称
# 上传案例文件到目录# 创建符号链接(关键步骤)
ln -sf /root/www/新案例名称 /var/www/html/新案例名称在 /etc/nginx/sites-available/case.conf 中添加新的location块:
# ========== 新案例名称 ==========
# 新案例应用路径
# 文件实际路径:/root/www/新案例名称 (通过符号链接映射)
# 重要:需要先创建符号链接 ln -sf /root/www/新案例名称 /var/www/html/新案例名称
location /新案例路径 {
# 使用root + try_files的方式,避免nginx alias配置的坑
try_files $uri $uri/ $uri/index.html =404;
# 安全头部配置 (复制现有的安全头配置)
add_header X-Frame-Options "SAMEORIGIN" always;
add_header X-XSS-Protection "1; mode=block" always;
add_header X-Content-Type-Options "nosniff" always;
add_header Referrer-Policy "no-referrer-when-downgrade" always;
add_header Content-Security-Policy "default-src 'self' http: https: data: blob: 'unsafe-inline'" always;
}
# 新案例API接口 (可选)
location /新案例路径/api/pages {
default_type application/json;
return 200 '{"pages": [...]}';
}nginx -t && systemctl reload nginx如果需要手动执行操作,可以参考以下命令:
# 使用SSH别名(推荐)
scp *.html aliyun-ecs-showpage:/root/www/showpage/
# 或使用IP地址
scp *.html [email protected]:/root/www/showpage/# 使用SSH别名(推荐)
ssh aliyun-ecs-showpage
# 编辑主配置文件
vim /etc/nginx/sites-available/case.conf
# 测试配置
nginx -t
# 重新加载配置
systemctl reload nginxln -sf /etc/nginx/sites-available/case.conf /etc/nginx/sites-enabled/case.conf
nginx -t
systemctl reload nginx-
SSH连接失败
- 检查服务器IP地址和端口
- 确认SSH密钥配置正确
- 验证服务器防火墙设置
-
文件上传失败
- 检查目标目录权限
- 确认磁盘空间足够
- 验证文件路径正确
-
nginx配置错误
- 使用
nginx -t测试配置 - 检查主配置文件语法
- 查看错误日志:
tail -f /var/log/nginx/error.log
- 使用
-
域名无法访问
- 确认域名DNS解析正确
- 检查防火墙80端口开放
- 验证nginx服务运行状态:
systemctl status nginx
-
新案例无法访问
- 检查主配置文件中的location路径
- 确认案例目录权限正确
- 验证nginx配置重新加载
# nginx访问日志
tail -f /var/log/nginx/case.coderboot.xyz.access.log
# nginx错误日志
tail -f /var/log/nginx/case.coderboot.xyz.error.log
# nginx服务状态
systemctl status nginx
# 检查主配置文件
nginx -T | grep -A 50 "case.coderboot.xyz"- 单一主配置文件管理所有静态案例
- 避免多个配置文件的冲突和维护复杂性
- 统一的域名和访问入口
- 新案例只需添加location块到主配置
- 标准化的案例结构和API接口
- 自动化的部署流程
- SSH密钥认证,避免密码泄露风险
- 完整的Web安全头部配置
- 文件权限和访问控制
- Gzip压缩减少传输大小
- 智能缓存策略提高访问速度
- 针对静态文件的专门优化
©️ 2025 ShowPage Project - 基于nginx主配置文件的静态案例管理系统