问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

关于nginx的描述,哪一种是错误的,access

发布网友 发布时间:2022-02-27 01:31

我来回答

1个回答

热心网友 时间:2022-02-27 03:00

nginx配置中有关日志的配置主要是围绕着下面两个指令:
1、error_log
2、access_log:记录访问日志
首先要强调的一点是,如果access日志和error日志都是常量文件名(因为access支持变量文件名,后续会讲到),那么nginx进程会缓存文件描述符直到进程结束。
什么时候日志的fd会改变呢?
1)进程重启
2)收到了NGX_REOPEN_SIGNAL信号,会产生新的日志文件
其他情况下,日志的fd不变,所以当进程运行中,删除了日志文件的话,并不会生成新的日志文件,且日志都会丢失
下面详细讲一下这两个指令的来龙去脉
一:先说error_log:
nginx有两个模块支持error_log指令:
一个是 ngx_errlog_mole ,这个模块只有一个指令,就是error_log ,配置类型为:NGX_MAIN_CONF,回调函数为:ngx_error_log;
另一个是 ngx_http_core_mole,这个模块中也有指令:error_log ,配置类型为:NGX_HTTP_MAIN_CONF|NGX_HTTP_SRV_CONF|NGX_HTTP_LOC_CONF,回调函数为:ngx_http_core_error_log。

static ngx_command_t ngx_errlog_commands[] = {

{ngx_string("error_log"),
NGX_MAIN_CONF|NGX_CONF_1MORE,
ngx_error_log,
0,
0,
NULL},

ngx_null_command
};

static ngx_command_t ngx_http_core_commands[] = {
{ ngx_string("error_log"),
NGX_HTTP_MAIN_CONF|NGX_HTTP_SRV_CONF|NGX_HTTP_LOC_CONF|NGX_CONF_1MORE,
ngx_http_core_error_log,
NGX_HTTP_LOC_CONF_OFFSET,
0,
NULL },
}

这样会产生几个疑问:
1:为什么需要两个相同的指令实现相同的功能。
2:两个指令的类型均支持NGX_HTTP_MAIN_CONF ,那么在main中配置的error_log到底使用的是哪一个
3:两者的作用关系。
下面来解释一下:
nginx在进行模块注册时,会发现 ngx_errlog_mole 模块是先于 ngx_http_core_mole 模块注册的 。
在nginx在解析配置文件的时候 ,见到 error_log,会按照注册模块的顺序查找指令,这样,会先找到ngx_errlog_mole模块,如果此时,error_log是在main配置的,那么和ngx_errlog_mole模块error_log的NGX_HTTP_MAIN_CONF match,执行ngx_error_log。
如果error_log是在http{}配置的,也会按照注册模块的顺序查找指令,找到ngx_errlog_mole模块的error_log,发现type是NGX_HTTP_MAIN_CONF,不match,继续往下找,找到ngx_http_core_mole的error_log,type是NGX_HTTP_MAIN_CONF|NGX_HTTP_SRV_CONF|NGX_HTTP_LOC_CONF ,match后执行ngx_http_core_error_log。
上面提到了ngx_error_log 和 ngx_http_core_error_log两个函数,这两个函数的功能基本一致,但是因为两个配置作用域不同,所以配置存储位置不同:ngx_errlog_mole存储在cycle->new_log,ngx_http_core_mole存储在http core模块数据结构ngx_http_core_loc_conf_s的error_log(在此简写成:clcf->error_log)。
clcf->error_log是http模块中的,其主要记录和http请求相关的日志。
cycle->new_log主要记录如进程启动,event等。
但是主进程启动的时候,此时还没有读取配置文件,即没有指定日志打印在哪里。nginx这时候虽然可以将一些出错内容或者结果输到标准输出,但是如果要记录一些系统初始化情况,socket监听状况,还是需要写到日志文件中去的。在nginx的main函数中,首先会调用ngx_log_init 函数,默认日志文件为:安装路径/logs/error.log,如果这个文件没有权限访问的话,会直接报错退出。在mian函数结尾处,在ngx_master_process_cycle函数调用之前,会close掉这个日志文件。
如果只在main配置了error_log,http{}中没有设置,那么clcf->error_log赋值为clcf->error_log,如下:

static char *
ngx_http_core_merge_loc_conf(ngx_conf_t *cf, void *parent, void *child)
{
ngx_http_core_loc_conf_t *prev = parent;
ngx_http_core_loc_conf_t *conf = child;

。。。。。。

if (conf->error_log == NULL) {
if (prev->error_log) {
conf->error_log = prev->error_log;
} else {
conf->error_log = &cf->cycle->new_log;
}
}

。。。。。。
}

那为什么不把两个指令合并到一起呢。
首先看一下模块注册顺序:

ngx_mole_t *ngx_moles[] = {
&ngx_core_mole,
&ngx_errlog_mole,
&ngx_conf_mole,
&ngx_events_mole,
&ngx_event_core_mole,
&ngx_rtsig_mole,
&ngx_epoll_mole,
&ngx_regex_mole,
&ngx_http_mole,
&ngx_http_core_mole,
&ngx_http_log_mole,
......
}

可见ngx_errlog_mole 和 ngx_http_core_mole中间有n多模块。这些模块是独立于http的,而且需要日志的打印,这些日志肯定是需要记录的。
则此模块不可省,那么考虑把ngx_http_core_mole的error_log合并过来呢,想想也不行,为什么呢?
想想ngx_errlog_mole将error_log信息存在哪里,想想ngx_http_core_mole的error_log信息存在哪里。
在调用ngx_error_log时候,把针对不同server或者location的error_log信息存储在哪里。(模块之间不能深度耦合)
为了两个模块互不影响,这是个好办法呀!
二:access_log
接下来看一下access_log,access_log指令是属于ngx_http_log_mole模块。
ngx_http_log_mole有三个指令:

static ngx_command_t ngx_http_log_commands[] = {

{ ngx_string("log_format"),
NGX_HTTP_MAIN_CONF|NGX_HTTP_SRV_CONF|NGX_HTTP_LOC_CONF|NGX_CONF_2MORE,
ngx_http_log_set_format,
NGX_HTTP_MAIN_CONF_OFFSET,
0,
NULL },

{ ngx_string("access_log"),
NGX_HTTP_MAIN_CONF|NGX_HTTP_SRV_CONF|NGX_HTTP_LOC_CONF|NGX_HTTP_LIF_CONF
|NGX_HTTP_LMT_CONF|NGX_CONF_TAKE123,
ngx_http_log_set_log,
NGX_HTTP_LOC_CONF_OFFSET,
0,
NULL },

{ ngx_string("open_log_file_cache"),
NGX_HTTP_MAIN_CONF|NGX_HTTP_SRV_CONF|NGX_HTTP_LOC_CONF|NGX_CONF_TAKE1234,
ngx_http_log_open_file_cache,
NGX_HTTP_LOC_CONF_OFFSET,
0,
NULL },

ngx_null_command
};

每个block都可以配置上面的指令 ,这些指令对应着各个block配置中的loc[ngx_http_log_mole.index](要理解这个,需要知道配置文件的整个解析过程和block对应关系),即下面这个数据结构:

typedef struct {
ngx_array_t *logs; /* array of ngx_http_log_t */

ngx_open_file_cache_t *open_file_cache;
time_t open_file_cache_valid;
ngx_uint_t open_file_cache_min_uses;

ngx_uint_t off; /* unsigned off:1 */
} ngx_http_log_loc_conf_t;

关于access_log主要有以下几个点:
1、ngx_http_log_mole是属于nginx状态机最后一个阶段NGX_HTTP_LOG_PHASE的处理模块,即一个http请求结束时执行的,它的任务就是打印这次request的访问情况。
2、access_log支持根据变量指令路径,如:
access_log logs/'$remote_addr'access.log main;
3、不管是变量路径还是常量路径,都将信息放入了 ngx_http_log_loc_conf_t的logs这个数组里进行管理,logs数组的元素是ngx_http_log_t。
关于nginx的描述,哪一种是错误的,access

一:先说error_log:nginx有两个模块支持error_log指令:一个是 ngx_errlog_module ,这个模块只有一个指令,就是error_log ,配置类型为:NGX_MAIN_CONF,回调函数为:ngx_error_log;另一个是 ngx_http_core_module,这个模块中也有指令:error_log ,配置类型为:NGX_HTTP_MAIN_CONF|NGX_HTTP_...

ZESTRON表界面分析

在Dr. O.K. Wack Chemie GmbH,我们高度重视ZESTRON的表界面分析技术。该技术通过深入研究材料表面与界面的性质,为提升产品质量与可靠性提供了有力支持。ZESTRON的表界面分析不仅涵盖了相变化、化学反应、吸附与解吸等关键领域,还通过高精度仪器如固体表面Zeta电位分析仪等,确保数据准确可靠。这些分析手段对于优化产品配方、改进生产工艺、预防失效问题等具有重要意义,是我们不断提升产品性能与质量的重要工具。表面污染分析包括评估表面上存在的颗粒、残留物或物质。通过利用显微镜、光谱学和色谱法等技术,分析人员可以识别和表征污染物,以确定其成分和来源。这种分析在电子、制药和制造等各个行业中至关重要,以确保产品质量、性能和安全性。了解表面...

linux nginx 经常自己关闭是什么问题

nginx 日志分为 错误日志和访问日志 错误日志是 error.log 访问日志是 access.log 假死应该看错误日志 该日志的位置 /usr/local/nginx-1.7.8/logs

nginx不得不说的参数之 为什么nginx error

nginx proxy 启用自定义错误页面:语法:proxy_intercept_errors on | off;默认值:proxy_intercept_errors off;上下文:http, server, location 当被代理的后端服务器的响应状态码大于等于300时,决定是否直接将响应发送给客户端,亦或将响应转发给nginx由error_page指令来处理。

nginx的Status Code 499是什么错误Site

打开Nginx的access.log发现在最后一次的提交是出现了HTTP1.1 499 0 -这样的错误,在百度搜索nginx 499错误,结果都是说客户端主动断开了连接。但经过我的测试这显然不是客户端的问题,因为使用端口+IP直接访问后端服务器不存在此问题,后来测试nginx发现如果两次提交post过快就会出现499的情况,看来是nginx...

nginx的access.log日志怎样看

状态码,200表示成功,404表示页面不存在,301表示永久重定向等,具体状态码含义可以在网上找);来源页面(即从哪个页面转到本页,专业名称叫做“referer”);浏览器版本。其实nginx access日志的格式不是一成不变的,是可以自定义的。在nginx的nginx.conf配置文件找到:log_format 这里就是日志的格式 ...

Nginx的配置指令执行的顺序 11 个阶段

Nginx的配置指令执行不是按照配置的先后顺序执行,二十分为11 个阶段post-read、server-rewrite、find-config、rewrite、post-rewrite、preaccess、access、post-access、try-files、content 以及 log , Nginx配置文件中的所有指令是按照上面11个阶段的顺讯执行。 set_real_ip_from的值可以是一个ip,也可以是一个ip段...

真心求助.nginx错误

Nginx服务器错误一般有以下几点原因:1、请求的header过大。nginx默认的header长度上限是4k,如果超过了这个值,nginx会直接返回400错误.解决方法:配置nginx.conf相关设置。可以通过以下2个参数来调整header上限:client_header_buffer_size 16k;large_client_header_buffers 4 16k。2、上传文件过程中出现错误...

Nginx遇上Access Denied提示怎么解决

文件/usr/local/nginx/logs/error.log FastCGI sent in stderr: "Access to the script '/var/www/html//phpmyadmin/setup/styles.css' has been denied (see security.limit_extensions)"打开日志发现会出现security.limit_extensions 这样的错误。经过查找资料发现从5.3.9开始,php官方加入了一个...

502 bad gateway nginx 错误日志在哪

一般在你配置的 server 里面的 location 里面配置的access_log 所指定的路径的日志文件里面。

Nginx遇上Access Denied提示怎么解决

使用的nginx安装版安装的,对吧?是不是权限配置问题?看一下事件查看器,报什么错!

nginx的access日志详解 nginx 关闭access日志 nginx_access nginx access日志 nginx include nginx 504错误 nginx错误日志 nginx错误路径跳转首页 nginx自定义错误页面
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
天猫精灵会远程录音吗 平江道场是什么意思? 去公立学校当外聘老师还是去补习班当老师好? 去补习机构上班好还是去公办学校当小学代课老师拿1800的工资好 水仙怎么水培(附养护方法) 车在行驶中突然熄火原因是什么? 汽车行驶过程中熄火是什么原因 汽车在行驶过程中突然熄火是怎么回事 ...如何马上在下面用代码获取该行的自动编号的值 想买个四千左右的相机,本人不专业,主要用途是拍人像,兼顾拍点视频。请... 尖锐湿疣激光后又长出好多怎么办? nginx uwsgi wsgi django 这些东西究竟是什么关系 手机上隐形垃圾软件怎么去除 安装环境到底是用NGINX好还是Apache好 nginx的变量问题"$1"是如何定义的 找回微信没有好友辅助验证怎么办? nginx主机配置里的各个参数如何打印出来看看到底是什么? 被封了没有好友辅助验证怎么办? 关于nginx location配置的问题,root到底是什么 nginx反向代理和负载均衡到底是啥子联系 怎么看我的支付宝名称 支付宝怎么查看自己名下开通几个支付宝? 如何查询自己名下的支付宝 如何把邮箱里的视频文件转到微信朋友圈 牛肉柿子汤的做法步骤图,牛肉柿子汤怎么做好吃 牛肉柿子汤的做法步骤图,牛肉柿子汤怎么做 番茄牛肉汤的做法 牛肉柿子汤的做法 牛腩西红柿汤家常做法窍门 微信如何接龙 牛腩炖柿子的做法? 微信群接龙要怎么发布啊?手打接龙太累了 nginx启动成功后没有worker进程的原因 nginx日志里有很多奇怪的东西,大神帮忙分析下 gunicorn nginx到底怎么配置 怎么样挑选好吃的西瓜? 如何挑选好吃的西瓜 真正的好方法 行李箱密码忘了怎么开锁? 海关锁的拉杆箱密码忘了怎么办? cowarobot行李箱密码锁密码忘记了,怎么办 电脑的摄像头怎么开 行李箱密码锁密码忘记了怎么办 行李箱密码忘记了怎么办,在线等 行李箱密码忘了怎么办 方法全在这了!还不赶紧收藏好 行李箱密码忘记了怎么办,急啊! win7系统打开IE浏览器提示已停止工作怎么办 三位数的行李箱密码忘记了怎么办 红柚子与黄柚子有什么区别 WORD如何绘制多条斜线表头 香泡和柚子的区别 柠檬柚子茶做法 蜂蜜柚子茶制作方法图片说明