配置 Nginx 错误和访问日志

2023-10-29

Nginx 是一个开源的、高性能的 HTTP 和反向代理服务器负责处理互联网上一些最大网站的负载。管理时NGINX对于 Web 服务器,您将执行的最常见的任务之一是检查日志文件。

了解如何配置和读取日志在排除服务器或应用程序问题时非常有用,因为它们提供了详细的调试信息。

Nginx 将其事件记录写入两种类型的日志中:访问日志和错误日志。访问日志写入有关客户端请求的信息,错误日志写入有关服务器和应用程序问题的信息。

本文概述了如何配置和读取 Nginx 访问和错误日​​志。

配置访问日志#

每当处理客户端请求时,Nginx 都会在访问日志中生成一个新事件。每个事件记录都包含一个时间戳,并包含有关客户端和所请求资源的各种信息。访问日志可以向您显示访问者的位置、他们访问的页面、他们在页面上花费的时间等等。

The log_format指令允许您定义记录消息的格式。这access_log指令启用并设置日志文件的位置和使用的格式。

最基本的语法access_log指令如下:

access_log log_file log_format;

Where log_file是日志文件的完整路径,并且log_format是日志文件使用的格式。

可以在以下任一位置启用访问日志http, server, or location指令块。

默认情况下,访问日志在全局启用http主 Nginx 配置文件中的指令。

/etc/nginx/nginx.conf
http {
  ...
  access_log  /var/log/nginx/access.log;
  ...
}

为了更好的可读性,建议为每个服务器块设置单独的访问日志文件。这access_log指令中设置的server指令会覆盖其中的一组指令http(更高级别)指令。

/etc/nginx/conf.d/domain.com.conf
http {
  ...
  access_log  /var/log/nginx/access.log;
  ...

  server {
    server_name domain.com
    access_log  /var/log/nginx/domain.access.log;
    ...
  }
}

如果没有指定日志格式,Nginx 使用预定义的combined格式如下:

log_format combined '$remote_addr - $remote_user [$time_local] '
                    '"$request" $status $body_bytes_sent '
                    '"$http_referer" "$http_user_agent"';

要更改日志记录格式,请覆盖默认设置或定义新设置。例如定义一个名为的新日志记录格式custom这将延长combined格式与显示的值X-Forwarded-Forheader中添加以下定义http or server指示:

log_format  custom  '$remote_addr - $remote_user [$time_local] "$request" '
                    '$status $body_bytes_sent "$http_referer" '
                    '"$http_user_agent" "$http_x_forwarded_for"';

要使用新格式,请在日志文件后指定其名称,如下所示:

access_log  /var/log/nginx/access.log custom;

虽然访问日志提供了非常有用的信息,但它会占用磁盘空间并可能影响服务器性能。如果您的服务器资源不足并且网站繁忙,您可能需要禁用访问日志。为此,请设置access_log指示off:

access_log  off;

配置错误日志#

Nginx 将有关应用程序和一般服务器错误的消息写入错误日志文件中。如果您在 Web 应用程序中遇到错误,错误日志是解决问题的首要位置。

The error_log指令启用并设置错误日志的位置和严重性级别。它采用以下形式,并且可以在http, server, or location block:

error_log log_file log_level

The log_level参数设置日志记录的级别。以下是按严重程度列出的级别(从低到高):

  • debug- 调试消息。
  • info- 信息性消息。
  • notice- 通知。
  • warn- 警告。
  • error- 处理请求时出错。
  • crit- 关键问题。需要立即采取行动。
  • alert- 警报。必须立即采取行动。
  • emerg- 紧急情况。系统处于无法使用的状态。

每个日志级别都包含更高级别。例如,如果将日志级别设置为warn,Nginx 也会记录error, crit, alert, and emerg消息。

当。。。的时候log_level未指定参数,默认为error.

默认情况下,error_log指令定义在http主 nginx.conf 文件中的指令:

/etc/nginx/nginx.conf
http {
  ...
  error_log  /var/log/nginx/error.log;
  ...
}

与访问日志相同,建议为每个服务器块设置单独的错误日志文件,这会覆盖从更高级别继承的设置。

例如,将domain.com的错误日志设置为warn你会使用:

http {
  ...
  error_log  /var/log/nginx/error.log;
  ...

  server {
    server_name domain.com
    error_log  /var/log/nginx/domain.error.log warn;
    ...
  }
}

每当修改配置文件时,都必须重启 Nginx 服务以使更改生效。

日志文件的位置#

默认情况下,在大多数 Linux 发行版上,例如Ubuntu , CentOS , and Debian,访问和错误日​​志位于/var/log/nginx目录。

阅读和理解 Nginx 日志文件#

您可以使用标准命令打开并解析日志文件,例如cat , less , grep , cut , awk, 等等。

以下是访问日志文件中的示例记录,它使用默认的组合 Nginx 日志格式:

192.168.33.1 - - [15/Oct/2019:19:41:46 +0000] "GET / HTTP/1.1" 200 396 "-" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.120 Safari/537.36"

我们来分析一下记录的每个字段的含义:

  • $remote_addr - 192.168.33.1- 发出请求的客户端的 IP 地址。
  • $remote_user - -- HTTP 认证用户。当未设置用户名时,该字段显示-.
  • [$time_local] - [15/Oct/2019:19:41:46 +0000]- 本地服务器时间。
  • "$request" - "GET / HTTP/1.1"- 请求类型、路径和协议。
  • $status - 200- 服务器响应代码。
  • $body_bytes_sent - 396- 服务器响应的大小(以字节为单位)。
  • "$http_referer" - "-"- 推荐的 URL。
  • "$http_user_agent" - Mozilla/5.0 ...- 客户端的用户代理(Web 浏览器)。

Use the tail实时查看日志文件的命令:

tail -f  access.log 

结论#

日志文件为您提供有关服务器问题以及访问者如何与您的网站交互的有用信息。

Nginx 允许您根据需要配置访问日志和错误日志。

如果您有任何问题或反馈,请随时发表评论。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

配置 Nginx 错误和访问日志 的相关文章

  • 如何配置 nginx 重写规则以使 CakePHP 在 CentOS 上运行?

    大家好 请帮帮我 我正在尝试在运行 Nginx 和 Fact CGI 的 Centos 服务器上设置 cakephp 环境 我已经在服务器上运行了一个 WordPress 站点和一个 phpmyadmin 站点 因此我已经正确配置了 PHP
  • 为什么将域连接到“Shopify”需要 CNAME 和 A 记录?

    为什么将域连接到 Shopify 需要CNAME and ARecord ref https help shopify com en manual domains add a domain using existing domains co
  • 通过 PHP 脚本重新启动 Nginx

    我目前正在努力使我的 WordPress 插件与 nginx 兼容 该插件需要访问 conf文件在wp content uploads目录 以便它可以添加所需的规则 目前 它更新了 htaccess文件位于同一目录中 更改立即生效 无需干预
  • Nginx - 特定位置的另一个根

    我在下面有一些静态 html 文件 var www project1 该项目的 Nginx 配置是 server name www project1 com project1 com root var www project1 locati
  • nginx 代理到子目录中的远程 Node.js Express 应用程序

    我完全陷入了这样一种情况 我想在一台服务器上拥有多个节点应用程序 通过让应用程序在不同的端口上运行 我可以正常工作 我可以通过输入 IP 地址和端口来访问应用程序 我想通过使用不同的子目录来代理来自 nginx 服务器的应用程序 如下所示
  • 如何列出 nginx 中的所有虚拟主机

    有没有一个命令可以列出 CentOS 上 nginx 下运行的所有虚拟主机或服务器 我想将结果通过管道传输到文本文件以用于报告目的 我正在寻找与我用于 Apache 的命令类似的命令 apachectl S 2 gt 1 grep 端口 8
  • Flask+Nginx+uWSGI:导入错误:没有名为站点的模块

    我安装为http www reinbach com uwsgi nginx flask virtualenv mac os x html http www reinbach com uwsgi nginx flask virtualenv
  • Nginx 在子文件夹中重写 (404)

    我有一个网站主机NGINX曾经工作正常的服务器删除index php在 nginx 站点配置中使用try files 但现在我要在上面添加一个博客 其中 URL 将是www foo com blog 我可以访问博客并使用index php
  • 从 git repo 拉取后出现白屏死机(React JS、Nginx)

    每当我从 master 分支执行 git pull 到服务器上时 我所有的 React 文件似乎都消失了 屏幕变成白色 我发现的临时解决方法是 删除浏览器 cookie 缓存和站点历史记录 然后关闭浏览器并重试 删除node modules
  • 如何在 nginx 反向代理后面安全地检测 CakePHP 中的 SSL?

    CakePHP 我见过的所有版本 检查 SERVER HTTPS 查看请求是否是通过 HTTPS 而不是普通 HTTP 发出的 我使用 nginx 作为负载均衡器 后面是 Apache 应用程序服务器 由于 SSL 连接在负载均衡器处终止
  • 致命错误:未捕获错误:调用未定义的函数 bcadd()

    安装 eduTrac SIS 并访问 仪表板 后出现此错误 Ubuntu 16 4 PHP 7 0 php7 0 fpm Apache2 Nginx URL 给出错误 500 并显示 nginx error log FastCGI 在 st
  • Capistrano + Thin + nginx 不允许用户使用 sudo howto?

    我有一个这样的场景 我想使用 capistrano 部署 ruby on Rails 应用程序 Web 应用程序位于瘦集群上 配置文件存储在 etc thin 下 etc init d thin 中还有一个初始化脚本 因此每当我的服务器需要
  • oauth2-proxy 身份验证调用在 kubernetes 集群上运行缓慢,并带有 nginx 入口的身份验证注释

    我们使用以下描述的方法在 K8S 集群上保护了一些服务的安全这一页 https kubernetes github io ingress nginx examples auth oauth external auth 具体来说 我们有 ng
  • Dokku:从应用程序监听多个端口

    我正在使用 dokku 部署一个节点应用程序 带有express js 我的应用程序由 2 个 Express js 应用程序组成 它们监听两个不同的端口 一个是主应用程序 另一个是网络界面kue 一个简单的 Node js 作业队列 当我
  • 部署解耦的前端+后端应用程序

    我使用两个完全解耦的组件编写了一个网络应用程序 一个基于 Place Framework 并服务以下请求的 API 类型 api 任何客户 基于解耦的前端AngularJS建造使用grunt build 现在 前端与API但我希望这两个单元
  • 静态资源和非静态资源有什么区别?

    我主要是一名前端开发人员 设计师 但最近我一直在探索端到端解决方案 昨天 我使用平均堆栈完成了一个 TODO 应用程序 并想开始探索我的 VPS 的部署选项 话虽这么说 有人建议我使用 nginx 作为反向代理来提供静态资源 不幸的是 我陷
  • 使用 Django 管理界面的 Node.js 应用程序

    我想使用 node js 构建一个新应用程序 但它需要相当多的后端管理 而我宁愿不必构建 我在 django 中有一些现有代码 并且非常喜欢用于处理后端管理的内置管理界面 我是否可以使用 nginx 之类的东西将所有流量定向到我的 node
  • nginx 502 错误网关

    当使用 Spawn fcgi 生成 php5 cgi 时 我收到 502 Bad Gateway with nginx 我使用它来跨越服务器启动上的实例 并在 rc local 中使用以下行 usr bin spawn fcgi a 127
  • Nginx 位置、别名、重写、根

    我正在通过 proxypass 提供 foo bar 服务 并希望继续这样做 但是 我想从 var www mystatic baz swf 等静态地提供 foo bar baz swf 服务 我希望我能做类似的事情 location fo
  • 通过 ESI:include 设置 Cookie,如何?

    我正在尝试使用 esi 在我的网站上创建忍者缓存 这个想法是 该网站大部分是静态的 我只需要在用户是否登录时做一些花哨的事情 所以我试图在页面A上放置一个 并在页面B的应用程序中设置触发器 这样我就可以将页面 A 缓存在 varnish 上

随机推荐

  • 如何在 Python 中创建和读取列表

    Python 是一种流行的编程语言 具有广泛的应用范围 包括数据科学 Web 开发和自动化 Python 中最基本 最重要的数据结构之一是列表 列表是值或项目的集合 可以是任何数据类型 包括字符串 整数 浮点数 甚至其他列表 在本文中 我们
  • 如何在 MacOS 上安装 Golang

    Go 是 Google 于 2009 年开发的一种编译型编程语言 由于其性能 可读性和简单性 它在软件开发行业中广受欢迎 Go 是一种通用编程语言 它的代码片段感觉很自然 与 C 或 Java 等其他语言相比 它可以用更少的代码行编写 Go
  • 什么是 Apache Prefork、Worker 和 Event MPM(多处理模块)

    Apache 是最流行的 Linux Web 服务器 大多数Linux系统管理员的学习阶段都是从Apache httpd Web服务器开始的 甚至我在学习过程中也使用过Apache Web服务器 在初始级别 系统管理员使用 Apache 他
  • 如何在 Debian 8 上安装 Ansible (Jessie)

    Ansible 是一种自动化工具 用于从单台计算机管理多个远程主机 它为您提供了针对大量远程主机的轻松配置 例如 您在多台机器上执行相同的任务 Ansible 为您提供了自动执行这些任务的选项 本教程将帮助您在 Debian 8 Jessi
  • Ubuntu 和 Debian Linux 中的 12 个 Apt 命令示例

    apt 命令是 Linux 操作系统中最强大 最通用的工具之一 它为用户提供了一个功能强大且易于使用的包管理系统 可用于轻松管理和安装软件 使用 apt 命令 用户可以快速轻松地从系统中搜索 安装 升级和卸载软件应用程序 本指南详细概述了
  • Linux 中的排序命令及实例

    The sort Linux 中的命令是 GNU Coreutils 包的一部分 此命令用于按升序 降序对指定文件或标准输入中的文本行进行排序 排序后的输出可以写入文件或显示在标准输出上 这 sort 命令是一个简单而强大的工具 可用于各种
  • 使用.nvmrc指定节点版本

    您可以使用特定的 Node js 版本锁定您的应用程序 这将帮助您隔离 Node js 应用程序的依赖关系 因此您可以在任何系统上快速安装所需的软件包 在本教程中 您将学习使用 nvmrc 文件指定 node js 版本的简单过程 使用 n
  • 如何在 Apache 中启用过期标头

    Apache 是一种高度灵活 功能强大且开源的 HTTP 服务器软件 广泛用于托管网站 它的功能之一是操作响应中的 HTTP 标头 该功能可以显着提高网站的性能 在这些操作中 启用 过期标头 是管理网站缓存行为的有效技术 本质上 过期标头告
  • 如何在 Ubuntu 20.04 上安装 Zoom

    Zoom 应用程序是当今最流行的应用程序之一 Zoom 云会议应用程序通过互联网上的实时消息传递和内容共享提供简化的视频会议 Zoom 客户端允许您无需登录应用程序即可加入会议 要开始新会议 您需要登录该应用程序 访问zoom us创建帐户
  • 如何在 Linux 中重命名文件和目录

    重命名文件是您经常需要在 Linux 系统上执行的最基本任务之一 您可以使用 GUI 文件管理器或通过命令行终端重命名文件 重命名单个文件很容易 但一次重命名多个文件可能是一个挑战 特别是对于 Linux 新手来说 在本教程中 我们将向您展
  • Linux 中的 Tr 命令及示例

    tr是 Linux 和 Unix 系统中的一个命令行实用程序 用于翻译 删除和压缩标准输入中的字符 并将结果写入标准输出 The tr命令可以执行删除重复字符 将大写转换为小写以及基本字符替换和删除等操作 通常 它通过管道与其他命令结合使用
  • Python 列表反转

    在 Python 中使用列表时 有时可能需要反转列表的元素 反转列表意味着列表的第一个元素成为最后一个元素 第二个元素成为倒数第二个元素 最后一个元素成为第一个元素 依此类推 在 Python 中 有几种不同的方法可以反转列表 具体取决于您
  • 如何在 CentOS 7 上安装 Java

    Java 是世界上最流行的编程语言之一 用于构建不同类型的应用程序和系统 本教程介绍如何在 CentOS 7 上安装 Java 的各种版本和实现 我们将向您展示如何安装 OpenJDK 以及 Oracle Java 先决条件 在继续本教程之
  • 如何在Ubuntu 18.04上配置MySQL主从复制

    MySQL 复制是一个允许数据从一台数据库服务器自动复制到一台或多台服务器的过程 MySQL 支持多种复制拓扑 其中主 从拓扑是最著名的拓扑之一 其中一台数据库服务器充当主服务器 而一台或多台服务器充当从服务器 默认情况下 复制是异步的 主
  • 在 CentOS 7 上安装 Odoo 12

    Odoo 是世界上最受欢迎的一体化商业软件 它提供一系列业务应用程序 包括 CRM 网站 电子商务 计费 会计 制造 仓库 项目管理 库存等等 所有这些都无缝集成 在本教程中 我们将向您展示如何安装Odoo12 来自 CentOS 7 计算
  • 如何在 Debian 9 上安装 Google Chrome 网络浏览器

    谷歌浏览器是世界上最流行的网络浏览器 它是专为现代网络打造的快速 直观且安全的浏览器 Chrome 不是开源浏览器 它不包含在默认的 Debian 存储库中 它是基于Chromium Debian 存储库中提供的开源浏览器 在本教程中 我们
  • 如何在 Ubuntu 20.04 上安装 VLC 媒体播放器

    VLC 是最流行的开源多媒体播放器之一 它是跨平台的 几乎可以播放所有多媒体文件以及 DVD 音频 CD 和不同的流媒体协议 本文介绍如何在 Ubuntu 20 04 上安装 VLC 媒体播放器 VLC 可以通过 Snapcraft 商店作
  • 如何在Linux中检查内核版本

    内核是操作系统的核心组件 它管理系统的资源 是计算机硬件和软件之间的桥梁 您可能需要了解 GNU Linux 操作系统上运行的内核版本的原因有多种 也许您正在调试与硬件相关的问题或了解影响旧内核版本的新安全漏洞 并且您想了解您的内核是否容易
  • 如何在 Ubuntu 18.04 上安装 Memcached

    Memcached 是一个免费开源的高性能内存键值数据存储 它最常用于通过缓存数据库调用结果中的各种对象来加速应用程序 在本教程中 我们将介绍在 Ubuntu 18 04 上安装和配置最新版本 Memcached 的过程 相同的说明适用于
  • 配置 Nginx 错误和访问日志

    Nginx 是一个开源的 高性能的 HTTP 和反向代理服务器负责处理互联网上一些最大网站的负载 管理时NGINX对于 Web 服务器 您将执行的最常见的任务之一是检查日志文件 了解如何配置和读取日志在排除服务器或应用程序问题时非常有用 因