gpt4 book ai didi

http - 如何从 nginx docker 图像记录 http 请求正文?

转载 作者:行者123 更新时间:2023-12-02 21:17:20 32 4
gpt4 key购买 nike

我有一个带有 nginx 的 docker 镜像。

我想记录传入的请求。

我的 docker-compose 文件:

nginx:
container_name: my-nginx
image: nginx
ports:
- "80:80"
- "443:443"
volumes:
- ./nginx.conf:/etc/nginx/conf.d/default.conf
- ./access.log:/var/log/nginx/test.com.access.log

我的 nginx 配置:

server {
listen 80;
listen 443 default_server ssl;
access_log /var/log/nginx/test.com.access.log;

location / {
proxy_pass http://myapp:8080;
proxy_buffering off;
}
}

当我尝试用以下配置替换 access_log 指令时:

log_format testlog '$remote_addr - $remote_user [$time_local] '
'"$request" $status $bytes_sent '
'"$http_referer" "$http_user_agent" "$request_body"';
access_log /var/log/nginx/test.com.access.log testlog;

我得到:

nginx-reverse-proxy | 2018/04/06 11:50:00 [emerg] 1#1: "log_format" directive is not allowed here in /etc/nginx/conf.d/default.conf:10
nginx-reverse-proxy | nginx: [emerg] "log_format" directive is not allowed here in /etc/nginx/conf.d/default.conf:10

最佳答案

将 log_format 放在 server{} block 之外,因为并非每个指令都可以到达任何地方。简单地:

log_format testlog '$remote_addr - $remote_user [$time_local] '
'"$request" $status $bytes_sent '
'"$http_referer" "$http_user_agent" "$request_body"';

server {
listen 80;
listen 443 default_server ssl;
access_log /var/log/nginx/test.com.access.log;

location / {
proxy_pass http://myapp:8080;
proxy_buffering off;
}
}

记录在此处:http://nginx.org/en/docs/http/ngx_http_log_module.html#log_format “上下文:http”

http 上下文是顶级 block ,包含您的 server block 的那个(通常您看不到它,因为它在另一个文件中,其中包括您的.conf)

关于http - 如何从 nginx docker 图像记录 http 请求正文?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49691359/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com