log nginx 客户端请求大小_nginx

博主会将与Nginx有关的知识点总结到"nginx短篇系列"文章中,如果你对nginx不是特别了解,请按照顺序阅读"nginx短篇系列",以便站在前文的基础上理解新的知识点。

当我们访问nginx服务时,nginx会记录日志,nginx日志分两种,一种是访问日志,一种是错误日志,访问日志记录在"access.log"文件中,错误日志记录在"error.log"文件中,这篇文章我们只关注访问日志的使用,也就是"access.log"。

如果你编译安装了nginx,默认情况下,access.log日志会放在nginx安装路径的logs目录中,如果你是通过yum源安装的nginx,那么access.log的默认路径为/var/log/nginx/access.log,当然,无论你通过哪种方式安装nginx,我们都可以自定义日志文件的路径,想要自定义访问日志文件的路径非常简单,我们只需要借助一条配置指令即可,这条配置指令就是access_log指令,比如,我们想要将访问日志写入到/opt/access.log文件中,那么只需要进行如下配置即可:

Shell

access_log /opt/access.log;

1

access_log /opt/access.log;

access_log指令还有一些别的用法,不过我们暂且先放下不聊,我们先来仔细看看默认的访问日志是什么样子的。

首先,打开你的谷歌浏览器,访问nginx默认的index.html页面,在浏览器的地址栏中输入"http://10.1.1.72/index.html"进行访问,然后,打开logs/access.log,你会发现类似如下的日志:

Shell

10.1.1.1 - - [09/Feb/2019:22:41:28 +0800] "GET /index.html HTTP/1.1" 200 612 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3578.98 Safari/537.36"

1

10.1.1.1 - - [09/Feb/2019:22:41:28 +0800] "GET /index.html HTTP/1.1" 200 612 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3578.98 Safari/537.36"

如果你并没有仔细研究过nginx的访问日志,那么当你第一眼看到上述日志的时候,可能会有些懵逼,这一长串日志到底是什么意思呢?不要着急,我们慢慢聊。上述日志看似杂乱无章,其实是有一定的规律的,我们看到的日志之所以长成这个样子,都是因为一条配置指令决定的,这条配置指令就是"log_format"指令。

通过"log_format"指令可以指定访问日志都记录哪些内容,以怎样的格式记录这些内容,这样说可能不太容易理解,不如我们先来看一个简单的小示例,示例配置如下:

上述配置表示,我们通过"log_format"指令创建了一个"日志格式",这个"日志格式"的名字是"testformat","testformat"日志格式都会记录哪些内容呢?"testformat"日志格式会将"remote_addr"变量和"http_user_agent"变量中的内容记录到日志中,并且使用" - "作为分隔符将两个变量的内容分隔开,同时,使用双引号""将http_user_agent变量的内容引起,nginx中有很多内置变量,"remote_addr"变量和"http_user_agent"变量就是这些内置变量中的一员,使用"$变量名"即可调用变量,这些变量通常与http协议的请求和响应有关系,所以我们可以利用这些变量做很多事情,比如,利用它们记录访问日志。聪明如你,一定想到了,日志中记录什么内容,是由我们决定的,我们在日志格式中设置了A变量、B变量、C变量,那么日志文件中就会记录A变量的值,B变量的值,以及C变量的值。

比如:

如果我们设置的日志格式是"A变量 -- B变量 -- C变量",那么在日志中记录的就是"A值 -- B值 -- C值"。

如果我们设置的日志格式是"C变量 # A变量 - G变量 # B变量",那么在日志中记录的就是"C值 # A值 - G值 # B值"。

也就是说,记录哪些变量,以什么样的顺序记录这些变量,用什么符号将这些变量的值分隔开,都可以通过"log_format"这条配置指令进行控制。

看到此处,我们再回过头来看刚才的问题,为什么默认情况下我们看到的访问日志长成那个样子呢?这是因为,nginx有一个默认的日志格式,当我们没有在配置文件中明确定义自己的日志格式时,nginx会使用这个默认预定义的日志格式记录日志,这个日志格式的名字叫做"combined","combined"日志格式的具体配置如下:

Shell

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

1

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

如你所见,log_format配置指令的默认值就是这个名为"combined"的日志格式,这个日志格式中记录了上述变量,那么这些变量分别代表了什么意思呢?我们来总结一下(此处先大致了解一下,不用纠结细节):

Shell

$remote_addr变量:记录了客户端的IP地址(普通情况下)。

$remote_user变量:当nginx开启了用户认证功能后,此变量记录了客户端使用了哪个用户进行了认证。

$time_local变量:记录了当前日志条目的时间。

$request变量:记录了当前http请求的方法、url和http协议版本。

$status变量:记录了当前http请求的响应状态,即响应的状态码,比如200、404等响应码,都记录在此变量中。

$body_bytes_sent变量:记录了nginx响应客户端请求时,发送到客户端的字节数,不包含响应头的大小。

$http_referer变量:记录了当前请求是从哪个页面过来的,比如你点了A页面中的超链接才产生了这个请求,那么此变量中就记录了A页面的url。

$http_user_agent变量:记录了客户端的软件信息,比如,浏览器的名称和版本号。

1

2

3

4

5

6

7

8

$remote_addr变量:记录了客户端的IP地址(普通情况下)。

$remote_user变量:当nginx开启了用户认证功能后,此变量记录了客户端使用了哪个用户进行了认证。

$time_local变量:记录了当前日志条目的时间。

$request变量:记录了当前http请求的方法、url和http协议版本。

$status变量:记录了当前http请求的响应状态,即响应的状态码,比如200、404等响应码,都记录在此变量中。

$body_bytes_sent变量:记录了nginx响应客户端请求时,发送到客户端的字节数,不包含响应头的大小。

$http_referer变量:记录了当前请求是从哪个页面过来的,比如你点了A页面中的超链接才产生了这个请求,那么此变量中就记录了A页面的url。

$http_user_agent变量:记录了客户端的软件信息,比如,浏览器的名称和版本号。

这些变量并非一定会有对应的值,如果变量没有对应的值,那么日志中会使用 "-" 作为默认值进行占位。

你可能会有疑问,nginx中都有哪些变量能够使用呢?这些变量又都是什么含义呢?你可以从如下官网链接中找到答案:

上述链接为官网提供的变量列表,我们能够从上述链接中找到能够使用的变量,其实,你需要搞明白一点,"变量"与"配置指令"一样,都是隶属于某个"模块"的,如果你想要使用某个"变量",则必须先确保你的nginx中包含了对应的"模块",不是所有"模块"都提供了可用的"变量",很多模块压根就没有对应的变量可用,在之前的文章中,我们已经总结了怎样通过官方手册找到"模块"的详细信息,以及"模块"都包含了哪些"指令",事实上你可以使用同样的方法,找到"模块"都包含了哪些可用的"变量",举一反三的时候到了,如果你找到了具体方法,欢迎在评论区留言,给出你的答案。

聊完这些,再次打开access.log日志文件,是不是觉得那些日志顺眼多了。

其实,"log_format"配置指令只负责定义"日志格式",如果想要使用对应的"日志格式",还需要与"access_log"指令结合起来使用,才能真正的实现我们的目的,也就是说,"log_format"负责定义日志格式,"access_log"负责使用定义好的日志格式。这样说不太容易理解,不如来看一个配置示例,如下:

Shell

log_format testformat '···一些变量的组合···';

access_log /opt/access.log testformat;

1

2

log_format testformat '···一些变量的组合···';

access_log /opt/access.log testformat;

上例中,我们使用"log_format"指令定义了一个名为"testformat"的日志格式,然后使用"access_log"指令引用了"testformat"日志格式,"access_log /opt/access.log testformat"表示使用"testformat"日志格式记录日志,日志记录在"/opt/access.log"文件中。

在nginx中,log_format指令和access_log指令的默认值如下:

Shell

log_format combined '···各变量省略···';

access_log logs/access.log combined;

1

2

log_format combined '···各变量省略···';

access_log logs/access.log combined;

正是因为上述默认配置,决定了我们看到的日志的样子,如果你使用了yum源的方式安装了nginx,默认情况下你会在配置文件中找到一个名为"main"的日志格式,默认就是使用这个"main"日志格式记录访问日志的。

不过有一点仍然需要注意,那就是"log_format"指令和"access_log"指令所处的上下文位置。

"log_format"指令只能配置在"http块"中。

"access_log"指令可以配置在如下上下文中:

http, server, location, if in location, limit_except

"access_log"指令还有一些其他的参数我们没有聊到,不过最基础的参数我们已经总结完了,其他参数等用到的时候再行总结也不迟,关于nginx的访问日志,就先暂时总结到这里,希望能够对你有所帮助。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/334796.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Linux 下如何查询 tomcat 的安装目录

在命令终端输入如下命令: [roothtlwk0001host ~]# sudo find / -name *tomcat*

rxjava 背压_背压加载文件– RxJava常见问题解答

rxjava 背压事实证明,将文件作为流进行处理非常有效且方便。 许多人似乎忘记了,自Java 8(3年以上!)以来,我们可以很容易地将任何文件变成一行代码: String filePath "foobar.txt"; …

linux 卸载nfs device is busy,umount.nfs: device is busy解决办法

.NET Core全新的配置管理[共9篇]提到“配置”二字,我想绝大部分.NET开发人员脑海中会立马浮现出两个特殊文件的身影,那就是我们再熟悉不过的app.config和web.config,多年以来我们已经习惯了将结构化的配置信息定义在这两 ...Windows无法安装到G…

php 时间加法函数_php 时间加减

date_default_timezone_set(PRC); //默认时区echo"今天:",date("Y-m-d",time()),"";echo "今天:",date("Y-m-d",strtotime("18 june2008")),"";echo "昨天:",date("Y-m-d",strtoti…

如何用xapmm测试php_如何在Xampp中运行PHP程序?

成为经过认证的专业PHP是最流行的web后端编程语言。PHP代码将作为web服务器模块或命令行界面运行。要运行PHP for the web,您需要安装像Apache这样的web服务器,还需要像MyS成为经过认证的专业PHP是最流行的web后端编程语言。PHP代码将作为web服务器模块或…

中文标点符号大全

文章目录常见的中文标点符号标点符号的位置中文的标点符号包括句号,逗号,感叹号,问号,引号,冒号等等,接下来分享常见的中文标点符号名称。常见的中文标点符号 句号 。 用于句子末尾,表示陈述语气…

linux 查看链接最终目标,linux学习笔记7-链接

hard link and soft link硬链接:一个文件两个不同的进入,相当于一个教室两个门,从哪个门进都进到同一个教室硬链接特征:1、拥有相同的 i节点 和相同的存储block快,可以看做是同一个文件2、可通过i节点识别,…

apache.camel_Apache Camel 2.20发布–新增功能

apache.camelApache Camel 2.20已于今天发布,并且像往常一样,我受命撰写有关此出色新版本及其亮点的博客。 该版本具有以下重点。 1)Java 9技术预览支持 我们已经开始支持Java 9的工作,此版本称为技术预览。 源代码在Java 9上…

操作无法完成(错误 0x000006ba),Windows 11 PDF打印机无法使用解决办法

操作无法完成(错误 0x000006ba),Windows 11 PDF打印机无法使用解决办法 解决方式一 先重启一次电脑,看看是否可以解决问题。 解决方式二 重新启动 Printer Spooler 服务

java 头像 微信群_java怎么生成带用户微信头像的图片,并把这张图片发送给用户。...

展开全部这个是要一个图片中嵌套另外一张图片你可以62616964757a686964616fe59b9ee7ad9431333431336163试试下面这段代码import java.awt.Color;import java.awt.Font;import java.awt.Graphics2D;import java.awt.image.BufferedImage;import java.io.File;import java.io.IOE…

MyEclipse 的 TCP/IP Monitor 的使用

文章目录步骤 1:新建 web02 工程步骤 2:在 WebRoot 下创建 add_employee.html步骤 3:部署项目步骤 4:启动服务器步骤 5:打开 TCP/IP Monitor步骤 6:增加新的监视器步骤 7:启动监视器步骤 8&…

ubuntu linux mac地址,Ubuntu下修改mac地址

说明,本文翻译自man macchanger,若遇到不能理解的地方请参考man文档概述macchanger是linux下用于查看和修改网络接口mac地址的工具使用方法macchanger [options] device选项-e, --ending不要修改vendor-a, --another设置为一个同类型的MAC,同…

openwrt固定速率_固定速率与固定延迟– RxJava常见问题解答

openwrt固定速率如果您使用的是纯Java,从版本5开始,我们有一个方便的调度程序类,该类允许以固定速率或固定延迟运行任务: import java.util.concurrent.Executors; import java.util.concurrent.ScheduledExecutorService;Schedu…

如何处理表单中的中文(中文编码/解码问题)

浏览器会如何对表单中的数据进行编码? 当表单采用 post 方式提交时&#xff0c;浏览器会按照打开该表单所在的页面的编码来对表单中的数据进行编码。 在 html 文件当中设置字符编码集&#xff08;即字符编码格式&#xff09; <meta http-equiv"content-type" …

linux 进城 管道丢数据,linux – 使用命名管道与bash – 数据丢失的问题

有人在线搜索,发现简单的“教程”使用命名管道.但是,当我做任何后台工作时,我似乎失去了大量的数据.[[编辑&#xff1a;找到一个更简单的解决方案,看到回复帖子.所以我提出的问题现在是学术性的 – 万一有人想要一个工作服务器]]使用Ubuntu 10.04与Linux 2.6.32-25-generic#45-…

wso2 安装_WSO2注册表安装简介

wso2 安装这篇文章基于有关注册表安装及其工作原理等常见问题。以下是人们提出的主要问题&#xff1a; 1&#xff09;。 安装如何工作&#xff1f; 2&#xff09;。 Config Registry和Governance Registry有什么区别&#xff1f; 3&#xff09;。 可以将H2以外的数据库用于本…

Servlet配置错误处理页面/配置错误页面

写一个错误处理页面 error.html <html> <head> <meta http-equiv"Content-Type" content"text/html; charsetUTF-8"> <title>Insert title here</title> </head> <body style"font-size:30px;color:red;&quo…

azdb文件怎么打开_AZDBExplorerSvcs.dll

我该如何安装从金山毒霸下载的DLL文件&#xff1f;一&#xff1a;1、从金山毒霸下载压缩文件。2、将DLL文件解压到电脑上的某个地方。3、把该文件跟要求使用它的程序放在同一路径上。注意32位程序需要使用32位的DLL文件&#xff0c;64位程序需要使用64位的DLL文件。否则会出现0…

linux添加windows网络打印机,Linux Mint如何添加windows分享的网络打印机?

1.安装sambasudo apt-get install samba2.找到系统打印机选项通过 Menu-->>控制中心-->>系统管理找到 Printers选项&#xff0c;双击打开。3.核对windows打印机名并添加在如上图的画面中&#xff0c;点击 “Network Printer”&#xff0c;再点击“windows Printer …

5菜鸟教程_excel图文教程:应用PQ工具进行数据整理

编按&#xff1a;哈喽&#xff0c;大家好&#xff01;在日常工作中&#xff0c;我们经常会与数据打交道&#xff0c;那整理数据自然也是一件习以为常的事。但就是这么一件天天都会做的事&#xff0c;却让很多人压力山大&#xff0c;这不&#xff0c;又有一位小伙伴遇到问题了&a…