nginx出现499错误码的原因以及proxy_ignore_client_abort配置 及 nginx日志配置变量大全意义详解

一、nginx出现499错误码的原因以及proxy_ignore_client_abort配置

1. nginx出现499错误码的原因

    最近发现服务器上出现很多499的错误,出现499错误的原因是客户端关闭了连接,在我这篇文章:服务端在执行时中途关闭浏览器退出之后php还会继续执行吗?个人实践实验得到结果( https://linge.blog.csdn.net/article/details/140354726 )里,测试中断时,服务器nginx的日志就是499记录。nginx报49*错误

400-499 用于指出客户端的错误。 (自己电脑这边的问题) 自己电脑这边的问题) 

495 :https certificate error
496 :https no certificate
497 :http to https
498 :canceled
499 :client has closed connection

2. proxy_ignore_client_abort配置

    即499错误是客户端主动断开了连接。 如何关闭报499这个错误码呢?可以通过配置:proxy_ignore_client_abort来处理。

    proxy_ignore_client_abort:是否开启proxy忽略客户端中断。即如果此项设置为on开启,则服务器会忽略客户端中断,一直等着代理服务执行返回。并且如果执行没有发生错误,记录的日志是200日志。如果超时则会记录504。如果设置为off,则客户端中断后服务器端nginx立即记录499日志,但要注意,此时代理端的PHP程序会依然继续执行。可查看上面写的那篇文章。

    nginx的proxy_ignore_client_abort默认是关闭的,即请求过程中如果客户端端主动关闭请求或者客户端网络断掉,那么Nginx会记录499。所以如果不想看到499报错,可以修改配置:
proxy_ignore_client_abort on ;

    这样来说,499错误并不是一个问题,如果出现了大量的499的话,需要考虑为什么发生了这么多的客户端中断的问题。

    另外需要注意的一项是:proxy_ignore_client_abort配置只会对代理的配置,如果请求的是当前nginx服务器,直接执行PHP程序返回。则设置proxy_ignore_client_abort为on也不会起作用,仍会是记录499日志。proxy_ignore_client_abort的配置是配置在代理处理时用。如下:

location =/b.php { 
    proxy_ignore_client_abort   on; 
    proxy_pass  http://service_backends;
}

3. 此篇文章的评论内容转载过来如下:

 Level : 1.    User:us20160615060636-556    Time:2017-04-20 21:26:45
最近我们也是发现很多499,就是这个原因

Level : 2.    User:us20181110145022-372    Time:2018-11-10 14:50:55
这还有弹幕呢!

Level : 3.    User:us20181119175503-546    Time:2018-11-19 17:55:33
牛批, 弹幕 ~

Level : 4.    User:us20181220114114-366    Time:2018-12-20 12:09:01
牛B牛B~~~~~~~~~~~~~

Level : 5.    User:us20190126110936-271    Time:2019-01-26 11:14:40
什么叫做proxy_ignore_client_abort的配置是配置在代理处理时用

Level : 6.    User:us20190929165857-633    Time:2019-09-29 16:59:38
hehe蛋蛋疼

Level : 7.    User:us20191029122149-278    Time:2019-10-29 13:20:33
niubi

Level : 8.    User:us20200511171711-115    Time:2020-05-11 17:18:03
弹幕试一波

二、nginx 中日志文件格式配置中的内容变量大全及变量意义

    在nginx中是可以自由配置日志(只有访问日志可自定义)的格式,之前有篇不是很全的文章:自定义配置nginx的日志格式、Nginx日志按天切割的最佳shell脚本、及nginx配置日志buffer缓冲刷入间隔秒数flush-CSDN博客配置的示例如下:

log_format  access  '$remote_addr - $remote_user [$time_local] "$request" '
    '$status $body_bytes_sent "$http_referer" '
    '"$http_user_agent" $http_x_forwarded_for';
log_format main  '$remote_addr - $remote_user [$time_local] "$request" '
                 '$host $hostname $status $body_bytes_sent "$http_referer" '
               '"$http_user_agent" "$http_x_forwarded_for" ';

     上面定义了两种格式的日志:access和main,记录日志的时候只需要在最后指定日志记录使用哪种格式,Nginx日志主要分为两种:访问日志和错误日志。日志开关在Nginx配置文件(/etc/nginx/nginx.conf)中设置,两种日志都可以选择性关闭,默认都是打开的。上面的定义格式只能针对访问日志。对于错误日志,格式只能是固定的,错误日志记录了客户端访问Nginx出错时的详细情况,通过错误日志,你可以得到系统某个服务或server的性能瓶颈等。错误日志由指令error_log来指定,具体格式如下:

        error_log logpath(log存放路径) level(错误日志的等级)
    错误日志的等级有这几种: debug | info | notice | warn | error | crit  ,从左至右,日志详细程度逐级递减,即debug最详细,crit最少。

    一般不会关闭关闭错误日志,如何要关闭的话使用:  error_log /dev/null;   注意使用:error_log off;并不是关闭错误日志,而只是将错误日志记录到一个文件名为off的文件中。

    保存一份更全的日志中的变量大全及意义:

$remote_addr #与$http_x_forwarded_for 用以记录客户端的ip地址;
$remote_user #用来记录客户端用户名称;
$time_local  #用来记录访问时间与时区;
$request  #用来记录请求的url与http协议;
$status  #用来记录请求状态;成功是200,
$body_bytes_sent #发送给客户端的文件主体内容的大小,比如899,可以将日志每条记录中的这个值累加起来以粗略估计服务器吞吐量。
$http_referer #用来记录从那个页面链接访问过来的;
$http_user_agent #记录客户端浏览器的相关信息;
$request  #请求内容
$status #请求状态吗
$http_user_agent #客户端机型
$http_cookie #客户端的cookie
$hostname #本主机服务器主机名
$upstream_addr #转发到哪里
$upstream_response_time #转发响应时间
$request_time #整个请求的总时间。 
$server_name #虚拟主机名称
http_x_forwarded_for #客户端的真实ip,通常web服务器放在反向代理的后面,这样就不能获取到客户的IP地址了,通过$remote_add拿到的IP地址是反向代理服务器的iP地址。反向代理服务器在转发请求的http头信息中,可以增加x_forwarded_for信息,用以记录原有客户端的IP地址和原来客户端的请求的服务器地址。
$ssl_cipher #交换数据中的算法,比如RC4-SHA

      注:在nginx中通过可以通过upstream_[PHP中自定义的server变量名],取得我们在PHP中给$_SERVER添加的各种值,这样我们可以实现在我们在PHP程序中输出的一些重要的参数放到日志中。这样就能快速统计所有的请求的一些数据相关数据。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

林戈的IT生涯

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值