如何在此 nginx 配置中仅关闭某个 url 的访问日志?

Ant*_*ong 8 nginx amazon-ecs

这是nginx配置

server {
    listen $PORT;

    location ~ ^/documents/(.*)$ {
        proxy_pass http://127.0.0.1:5000/$1;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }

    location = /favicon.ico {
        return 204;
        access_log    off;
        log_not_found off;
    }
}
Run Code Online (Sandbox Code Playgroud)

url 有两种用例/documents/

POST 到/documents/进行一些处理或

GET/documents/ping被 AWS ELB 用作健康检查

在 cloudwatch 日志中,我得到了一堆 ping 条目

在此输入图像描述

要求 nginx 不记录 ping 的最简单方法是什么?

Tim*_*Tim 12

这是一个简单的方法 - 添加此位置块。

 location ~ /documents/ping {
    proxy_pass http://127.0.0.1:5000/$1;
    proxy_set_header Host $host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

    access_log    off;
    log_not_found off;
}
Run Code Online (Sandbox Code Playgroud)

可能有更清洁的方法。一种是将两个块的共享内容定义为一个文件并将其包含在内,但对于一次性的我不会打扰。

注意 -不要使用 if 语句,除非你无法控制。

更新

如果你想做一个包含做这样的事情

location ~ ^/documents/(.*)$ {
  include /path/to/fragment.conf;
}

 location /documents/ping {
  include /path/to/fragment.conf;

  access_log    off;
  log_not_found off;
}
Run Code Online (Sandbox Code Playgroud)

在文件fragment.conf中

  proxy_pass http://127.0.0.1:5000/$1;
  proxy_set_header Host $host;
  proxy_set_header X-Real-IP $remote_addr;
  proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
Run Code Online (Sandbox Code Playgroud)

同意 ~ 没有必要,但我认为它也不会造成伤害。