戏里戏外

Nginx 静态资源代理与日志优化配置

2024-11-06#Nginx

在 Nginx 配置中,有时我们需要对某些特定文件(如 favicon.icorobots.txt)关闭访问日志(access_log)和错误日志(error_log)记录,以减少不必要的日志输出。

通常的做法是使用 location 指令匹配这些文件,并通过 access_log offlog_not_found off 来关闭日志记录。例如:

server {
    # ...

    # 主要路由配置
    location / {
        proxy_pass http://127.0.0.1:30021; # 前端项目
        proxy_hide_header X-Powered-By;
    }

    location = /favicon.ico { access_log off; log_not_found off; }
    location = /robots.txt  { access_log off; log_not_found off; }
}

然而,这种配置方式存在一个问题:当访问 /favicon.ico/robots.txt 时会直接返回 404 错误,因为这些文件应该通过代理服务器获取。

为了解决这个问题,我们可以使用命名位置(named location)@app 来复用代理配置:

server {
    # ...

    # 定义可复用的命名位置配置
   location @app {
       proxy_pass http://127.0.0.1:30021;        # 将请求代理到本地 30021 端口
       proxy_hide_header X-Powered-By;           # 隐藏后端服务器信息,提高安全性
   }

    # 主要路由配置
    location / {
       proxy_pass http://127.0.0.1:30021; # frontend project
       proxy_hide_header X-Powered-By;
       try_files $uri @app;    # 先尝试访问文件,如果不存在则代理到后端应用
    }

   location = /favicon.ico { access_log off; log_not_found off; }
    # favicon.ico 处理
   location = /favicon.ico {
       access_log off;         # 关闭访问日志
       log_not_found off;      # 关闭 404 错误日志
       try_files $uri @app;    # 本地不存在则从代理获取
   }

   location = /robots.txt  { access_log off; log_not_found off; }
    # robots.txt 处理
   location = /robots.txt {
       access_log off;         # 关闭访问日志
       log_not_found off;      # 关闭 404 错误日志
       try_files $uri @app;    # 本地不存在则从代理获取
   }
}

通过这种配置方式,不仅可以关闭这些文件的日志记录,还能确保它们能够正确地从代理服务器获取内容。