Nginx access日志配置

log_format  main    '$remote_addr - $remote_user [$time_local] "$request" '
                    '$status $body_bytes_sent "$http_referer" '
                    '"$http_user_agent" "$http_x_forwarded_for"'
                    '$upstream_addr $upstream_response_time $request_time ';
access_log  logs/access.log   main;

常见的日志变量参考

$remote_addr, $http_x_forwarded_for记录客户端IP地址
$remote_user记录客户端用户名称
$request记录请求的URL和HTTP协议(GET,POST,DEL,等)
$status记录请求状态
$body_bytes_sent发送给客户端的字节数,不包括响应头的大小; 该变量与Apache模块mod_log_config里的“%B”参数兼容。
$bytes_sent发送给客户端的总字节数。
$connection连接的序列号。
$connection_requests当前通过一个连接获得的请求数量。
$upstream_addr映射后的地址
$upstream_connect_time跟后端server建立连接的时间,如果是到后端使用了加密的协议,该时间将包括握手的时间。
$upstream_header_time接收后端server响应头的时间。
$upstream_response_time从Nginx向后端建立连接开始到接受完数据然后关闭连接为止的时间。
$msec日志写入时间。单位为秒,精度是毫秒。
$pipe如果请求是通过HTTP流水线(pipelined)发送,pipe值为“p”,否则为“.”。
$http_referer记录从哪个页面链接访问过来的
$http_user_agent记录客户端浏览器相关信息
$request_length请求的长度(包括请求行,请求头和请求正文)。
$request_time请求处理时间,单位为秒,精度毫秒; 从读入客户端的第一个字节开始,直到把最后一个字符发送给客户端后进行日志写入为止。
$time_iso8601ISO8601标准格式下的本地时间。
$time_local通用日志格式下的本地时间。
### Nginx 日志配置教程 Nginx日志功能可以通过 `access_log` 和 `error_log` 指令进行配置,分别用于记录访问日志和错误日志。以下详细介绍如何配置 Nginx日志功能。 #### 1. 配置访问日志 (`access_log`) Nginx 的访问日志默认存储在 `logs/access.log` 文件中,使用的是 `main` 日志格式。可以通过 `log_format` 定义自定义的日志格式,并将其应用到不同的虚拟主机或路径中[^5]。 - **定义日志格式**: 在 Nginx 配置文件中定义一个自定义的日志格式,例如: ```nginx log_format custom '$remote_addr - $remote_user [$time_local] "$request" ' '$status $body_bytes_sent "$http_referer" ' '"$http_user_agent" "$http_x_forwarded_for"'; ``` - **应用日志格式**: 将自定义的日志格式应用到具体的 `server` 或 `location` 块中: ```nginx server { listen 80; server_name example.com; access_log /var/log/nginx/example.com.access.log custom; location / { proxy_pass http://backend; } } ``` #### 2. 配置错误日志 (`error_log`) 错误日志记录了 Nginx 运行过程中发生的错误信息。可以通过 `error_log` 指令指定错误日志的路径和日志级别[^4]。 - **错误日志级别**: 错误日志支持以下级别(从低到高):`debug`、`info`、`notice`、`warn`、`error`、`crit`、`alert`、`emerg`。例如: ```nginx error_log /var/log/nginx/error.log warn; ``` - **多虚拟主机错误日志分离**: 如果需要为每个虚拟主机单独配置错误日志,可以在 `server` 块中定义: ```nginx server { listen 80; server_name static.example.com; error_log /var/log/nginx/static-error.log debug; location /static/ { root /usr/share/nginx/html; } } ``` #### 3. JSON 格式日志输出 如果需要将访问日志以 JSON 格式输出,可以通过自定义日志格式实现。例如: ```nginx log_format json '{"@timestamp":"$time_iso8601",' '"host":"$server_name",' '"client":"$remote_addr",' '"size":$body_bytes_sent,' '"request":"$request",' '"status":$status,' '"referer":"$http_referer",' '"user_agent":"$http_user_agent"}'; access_log /var/log/nginx/access.log json; ``` #### 4. Ingress Nginx 日志配置 在 Kubernetes 环境中,Ingress Nginx日志可以通过注解进行配置[^3]。例如: - **启用访问日志**: 在 Ingress 资源中添加以下注解: ```yaml annotations: nginx.ingress.kubernetes.io/enable-access-log: "true" ``` - **自定义日志路径**: 可以为特定域名设置独立的日志文件: ```yaml annotations: nginx.ingress.kubernetes.io/configuration-snippet: | access_log /var/log/nginx/test.example.com.access.log upstreaminfo if=$loggable; error_log /var/log/nginx/test.example.com.error.log; ``` #### 5. Docker 环境中的日志配置 如果通过 Docker 启动 Nginx,可以挂载日志目录到宿主机[^1]。例如,在 `docker-compose.yml` 中配置如下: ```yaml volumes: - ./nginx/logs:/var/log/nginx ``` 这会将容器内的 `/var/log/nginx` 目录映射到宿主机的 `./nginx/logs` 目录。 --- ### 注意事项 - 确保日志目录具有正确的权限,否则可能会导致日志无法写入的问题[^4]。 - 在生产环境中,建议定期清理或轮转日志文件,以避免磁盘空间不足。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值