返回列表

利用 Nginx 静态托管完美解耦 favicon、robots 和 sitemap

2026-07-08 Nginx 静态托管 运维

将网站全网公共的基础静态资源(图标、爬虫协议、站点地图)剥离出后端业务项目,直接交由 Nginx 在最外层网关进行精确匹配托管,能够大幅降低后端无意义的路由解析与 404 渲染开销。

一、 准备静态文件

根据 Linux 运维规范,将静态资源统一收拢到 /var/www/static/ 目录下。直接使用 sudo 权限创建,文件默认会保持安全的 755(目录)和 644(文件)只读状态,无需手动修改 chownchmod

1. 创建公共静态目录

sudo mkdir -p /var/www/static

并将你的 favicon.ico 图标文件直接复制或移动到该目录下。

2. 创建 robots.txt

sudo vim /var/www/static/robots.txt

写入以下标准配置:

User-agent: *
Allow: /

Disallow: /api/
Disallow: /admin/

Sitemap: https://steggy.cn/sitemap.xml

3. 创建 sitemap.xml

sudo vim /var/www/static/sitemap.xml

写入基础站点地图:

<?xml version="1.0" encoding="UTF-8"?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
  <url>
    <loc>https://steggy.cn/</loc>
    <changefreq>daily</changefreq>
    <priority>1.0</priority>
  </url>
  <url>
    <loc>https://steggy.cn/about</loc>
    <changefreq>weekly</changefreq>
    <priority>0.8</priority>
  </url>
</urlset>

二、 配置 Nginx 精确匹配拦截

打开你的 Nginx 网站配置文件(通常位于 /etc/nginx/sites-available/default/etc/nginx/conf.d/ 下),在对应的 server { ... } 块内加入以下配置。

通过 = 精确匹配,Nginx 会以最高优先级在最外层截获请求,不再透传给后端应用。

server {
    server_name steggy.cn;

    # ... 原本的 SSL 证书及其他基础配置 ...

    # 1. 精确拦截站点图标请求
    location = /favicon.ico {
        root /var/www/static;
        access_log off;        # 关闭访问日志,防止图标请求刷屏
        log_not_found off;     # 关闭文件未找到时的错误日志
        expires 30d;           # 强缓存 30 天
    }

    # 2. 精确拦截蜘蛛协议请求
    location = /robots.txt {
        root /var/www/static;
        access_log off;        # 关闭爬虫频繁请求的日志记录
        log_not_found off;
        expires 7d;            # 缓存 7 天
    }

    # 3. 精确拦截站点地图请求
    location = /sitemap.xml {
        root /var/www/static;
        access_log off;
        log_not_found off;
        expires 1d;            # 缓存 1 天
    }

    # 4. 后端核心业务反向代理
    location / {
        proxy_pass http://localhost:5000; 
        # ... 其他 proxy_set_header 配置 ...
    }
}

三、 平滑重载与验证

配置完成后,采用平滑重载(reload)确保在线业务零中断。

# 1. 检查 Nginx 配置文件语法
sudo nginx -t

# 2. 语法无误后平滑重载
sudo systemctl reload nginx

验证成果

  1. 浏览器测试: 访问 https://steggy.cn/robots.txt,应能秒级正常渲染文本。
  2. 日志核对: 频繁刷新上述三个静态页面后,检查后端应用的业务访问日志。后端日志中应当没有任何相关记录,说明流量已在 Nginx 层被完美拦截并处理。