首页 > 系统相关 >nginx出现499错误码的原因以及proxy_ignore_client_abort配置 及 nginx日志配置变量大全意义详解

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

时间:2024-07-18 13:28:32浏览次数:20  
标签:http 错误码 nginx proxy abort 499 日志 客户端

一、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程序中输出的一些重要的参数放到日志中。这样就能快速统计所有的请求的一些数据相关数据。

标签:http,错误码,nginx,proxy,abort,499,日志,客户端
From: https://blog.csdn.net/weixin_47792780/article/details/140428353

相关文章

  • uni-app请求数据,在tab切换时,取消未完成的接口请求abort
    1、在实现tab页功能切换时,如果是tab标签下显示的内容不一样时,要注意快速切换tab标签时,接口数据还没有请求回来时,切到另外tab导致数据展示错乱问题排查问题   分析: 使用场景bug:tab切换,当点击tab2时,由于接口反应比较慢,在数据返回之前切换tab,会造成tab2的数据会拼接在......
  • 用Nginx反向代理之后,swagger出现no response from server错误的解决办法
    问题描述:本地运行项目打开swaager可以用,但是上传到服务器用nginx做反向代理的时候返回"error":"noresponsefromserver",且网址有端口,swaager的请求url端口丢失,使用了默认80端口  问题原因:因为在配置nginx反向代理的时候,没注意到配置代理的端口,导致端口丢失!解决方案:使......
  • Nginx 获取/传递真实IP、追踪请求包转发链 及 防范源IP伪造
    (转载)获取/传递真实IP环境模拟:客户端-->Nginx1/CDN/DDOS高防-->Nginx2-->后端ServerrequestHeader部分请求头字段:X-Real-IP用来保存客户端真实IP,默认为空X-Forwarded-For用来保存请求包的转发地址链,默认为空对应变量:$remote_addr此变量保存的是http请求的发起方IP,......
  • njs最详细的入门手册:Nginx JavaScript Engine
    原文链接:https://hi.imzlh.top/2024/07/08.cgi关于njs首先,njs似乎在国内外都不受关注,资料什么的只有官网参考手册,出了个问题只能看到GithubIssue所以,这篇文章将我的探索过程展示给大家,njs对于可用存储空间较小的设备真的很友好,相比较于NodeJS、Deno这种80M起步的运行环境真的......
  • LDAP应用篇(3)Nginx接入
    实验环境:OracleLinuxR8在搞Nginx比较错愕的是,居然Nginx并未内置对LDAP的支持,需要单独编译。然而yum安装的nginx并不支持导入模块,不得不再次温习一下编译安装Nginx的路数了。下载组件从github中下载组件的源代码:cd~&&gitclonehttps://github.com/kvspb/nginx-......
  • 从零手写实现 nginx-31-load balance 负载均衡介绍
    前言大家好,我是老马。很高兴遇到你。我们为java开发者实现了java版本的nginxhttps://github.com/houbb/nginx4j如果你想知道servlet如何处理的,可以参考我的另一个项目:手写从零实现简易版tomcatminicat手写nginx系列如果你对nginx原理感兴趣,可以阅读:从零......
  • 7、nginx-日志模块的格式-log_format main、access.log(访问服务器记录的日志)
    日志模块的名称:ngx_http_log_module路径:vim/etc/nginx/nginx.conf相关指令:·日志格式:log_format---nginx有非常灵活的日志模式,每个级别的配置可以有各自独立的访问日志、日志格式通过log_format命令定义··语法Syntax:log_formatname[escape=default|json]......
  • 5、nginx-主配置文件解析
    路径:vim/etc/nginx/nginx.conf · CoreModule-核心模块(进程数等):全局/核心块:配置影响nginx全局的指令、一般运行nginx服务器的用户组、nginx进程pid存放的路径、日志存放的路径、配置文件引入、允许生成workerprocess数等CoreModule-核心模块(进程数等)12usern......
  • Nginx、LNMP万字详解
    目录Nginx特点Nginx安装添加Nginx服务Nginx配置文件全局配置HTTP配置状态统计页面Nginx访问控制授权用户授权IP虚拟主机基于域名测试基于IP测试基于端口测试LNAMP解析方式LNMP转发php-fpm解析Nginx代理LAMP解析LNMP部署示例实验环境MariaDB修改密码......
  • centos7 安装nginx
    一.安装必要的依赖yuminstallgcc-c++-yyuminstall-yopensslopenssl-develyuminstall-yzlibzlib-develyuminstall-ypcrepcre-devel二.下载nginx安装包进入usr/local里面创建nginx文件,方便后期删除干净cd/usr/localmkdirnginxcdnginxwget下载安装包w......