技术实践4 分钟阅读

用 Nginx 托管静态网站时值得检查的细节

静态网站部署并不复杂,但根目录、缓存、错误页和日志等小细节,往往决定了它能否长期稳定运行。

把 HTML、CSS 和图片放进服务器目录,再让 Nginx 对外提供访问,看起来是最简单的网站部署方式。但页面能打开只是起点,路径、错误处理和缓存等细节,更影响日后的维护体验。

先确认根目录和入口文件

最先要核对的是站点配置指向的根目录,而不是凭印象把文件上传到某个 wwwroot 文件夹。宝塔等面板可能为每个域名建立不同目录。应查看配置中的 root,再检查该目录下是否直接存在首页和静态资源,而不是多套了一层打包目录。

入口文件通常是 index.html。如果访问域名首页正常,进入文章路径却出现空白或下载文件,就要继续检查文件名大小写、相对链接以及目录层级。Linux 区分大小写,本地系统里不易暴露的 Logo.pnglogo.png 问题,上线后会立刻出现。

理清 index、try_files 和 404

传统多页面静态站和单页应用对路径的处理不同。前者希望请求 /about/ 时找到对应目录中的入口文件,找不到就返回真实的 404;后者则可能需要把前端路由交给同一个首页。配置 try_files 前应先判断站点属于哪一种,不能为了“所有链接都能打开”而把任何不存在的地址都返回首页。

真实的 404 状态对搜索引擎和排查死链都很重要。可以准备一个带返回首页入口的 404.html,但要确认状态码仍是 404,而非页面像报错、实际返回 200 的“软 404”。部署后可用一个正常地址和一个随机地址验证。

给缓存和压缩留出更新空间

HTML 与带版本号的静态资源适合采用不同缓存策略。首页、文章页可能经常修改,缓存时间宜保守;文件名含内容哈希或版本号的 CSS、JavaScript 和图片则可以缓存更久。若资源文件名长期不变,却设置了很长缓存,更新样式后访问者可能仍看到旧版本。

文本类内容通常适合开启 gzip 或 Brotli 压缩,能明显减少 HTML、CSS、JavaScript 和 SVG 的传输量。图片多数已经压缩,再重复处理收益不大。开启后还应通过浏览器开发者工具检查响应头与传输大小。

补上基础安全头,但不要照搬模板

纯静态站没有数据库,并不代表可以完全忽略安全设置。至少应避免目录列表意外暴露,并根据实际情况考虑防止 MIME 类型嗅探、限制页面被第三方框架嵌入,以及设置合适的来源策略。如果整站已经正确启用 HTTPS,还可以评估是否加入严格传输策略。

安全头不是越多越好。尤其是内容安全策略,写得过严会让字体、统计脚本或图片无法加载,写得过松又失去意义。应先盘点页面使用的外部资源,观察浏览器控制台,再逐步收紧。严格传输策略也应在证书续期和子域名都准备妥当后启用。

用日志完成上线后的闭环

访问日志能回答哪些页面被请求、哪些资源频繁返回 404;错误日志则能帮助定位权限、路径和配置加载问题。静态站上线后的前几天,我会重点查看缺失的图片、错误的旧链接以及异常集中的扫描请求。日志也需要轮转和保留期限,避免小网站运行几个月后被日志占满磁盘。

最后一个习惯是:修改任何 Nginx 配置前先做一份带日期的备份,修改后先执行语法验证,确认通过再平滑加载,并立刻检查首页、文章页、404、HTTPS 和静态资源。不要一次改动过多项目;每次只解决一个明确问题,出现异常时才容易回退。静态网站的优势正是简单,而一套克制、可验证的配置,才能把这种简单真正保留下来。