今天发现nginx有不少的499错误,大约占了将近0.5%,而且是在新上线了一个含upstream的业务之后。...grep一下nginx源码,定义在ngx_request_t.h /* * HTTP does not define the code for the case when a client closed...这下就很清楚了,这是nginx定义的一个状态码,用于表示这样的错误:服务器返回http头之前,客户端就提前关闭了http连接。...upstream在以下几种情况下会返回499: (1)upstream 在收到读写事件处理之前时,会检查连接是否可用:ngx_http_upstream_check_broken_connection,...(2)server处理请求未结束,而client提前关闭了连接,此时也会返回499。 (3)在一个upstream出错,执行next_upstream时也会判断连接是否可用,不可用则返回499。
序 本文主要来聊一下nginx的access log当中出现的499问题。...问题描述 499 CLIENT CLOSED REQUEST A non-standard status code introduced by nginx for the case when a client...closes the connection while nginx is processing the request....response) throws InterruptedException { Thread.sleep(100*1000); return "hello"; } nginx...CLIENT CLOSED REQUEST 服务器排障 之 nginx 499 错误的解决
什么是 nginx 的 499 499 是 nginx 扩展的 4xx 错误,目的只是用于记录,并没有实际的响应。...由上述表述可知,nginx 499 代表客户端请求还未返回时,客户端主动断开连接。...时间问题 最开始时,表述过 nginx 499 是客户端主动断开了连接。...这里的客户端概念,我的理解是对请求连接过程中的下游服务而言的,例如浏览器与 nginx 之间的连接,浏览器为客户端;nginx 与其分发的服务而言,nginx 是客户端;php 处理程序中发起的 curl...出现 nginx 上设置的超时很大,nginx 同样记录了 499 状态,那么有可能就是负载均衡在默认时间(一般是 60 s)后删除了连接。
过程 0x01 经搜索得知: 哪些情况下会使 Nginx 返回 HTTP CODE 499? 首先,这个问题百度谷歌应该都能搜到。...在nginx源码中,499对应的定义是 “client has closed connection”。这很有可能是因为服务器端处理的时间过长,客户端“不耐烦”了。...: PHP 进程「死」了。...0x02 这里的死,不一定是进程结束,也有可能是僵尸,或是陷入死循环,一直在执行某个脚本…… 若是逐个检查代码时间来不及(以先解决问题为重),遂排查: Nginx+FastCGI 到底是谁影响超时时间...以及: PHP-max_execution_time 与 fpm.request_terminate_timeout 介绍 0x03 经过上面的调整,大约一周后再次维护服务器。
点击上方“码农沉思录”,选择“设为星标” 优质文章,及时送达 概要 这篇文章从nginx的499着手,分析整个过程中是怎么产生499行为的,以及各种往返网络包出现的原因。...我轻描淡写的回复了就是客户端设置的超时时间到了,nginx自己记录的内部错误码。这样草草打发之后,我的内心久久不能平复,499的背后nginx和客户端以及upstream到底发什么了什么,不得而知。...接着我去查了nginx对499对定义,只说明了这是client关闭连接的code,没有其他更深入的信息。...实验 os: mac 服务: golang+nginx+(php)fpm 操作: golang作为client,发起http调用,设置1秒超时,php对应接口sleep 3秒之后响应,nginx作为反向代理...php脚本处理完之后,马上会执行shutdown来关闭socket的写入通道,很合理,毕竟逻辑已经处理完了,不需要再向nginx返回数据了。
1、前言 今天在处理一个客户问题,遇到Nginx access log中出现大量的499状态码。...测试nginx发现如果两次提交post过快就会出现499的情况,看来是nginx认为是不安全的连接,主动拒绝了客户端的连接....499是nginx的Web服务器软件扩展的4xx错误,只是用于记录的目的,没有实际的响应。Nginx 499代表服务端请求还未返回时客户端主动断开连接; 还有一种情况就是有人攻击,故意消耗服务端资源。...这个事情交给 php-fpm 自己来处理其实挺合适。因为 PHP 默认当用户断开请求了会中断请求,如果不想自动中断请求,使用 ignore_user_abort() 就好了。...方法/步骤2: 尽管NGINX配置了,但60秒后HTTP499错误。Nginx上的超时都设置了很大的值(远远超过60秒)。这可能是云服务器设置问题,以AWS为例。
499状态码解释: Nginx中 499状态码的定义是 client has closed connection,也就是客户端断开了连接。...一般发生499的有几种原因: 1.客户端觉得服务端太慢了,主动断开了,这个时候客户端设置了链接超时时间 2.在客户端操作有时候,关闭了页面和取消了请求。...如果真的是接口性能问题,这个还好解决,如果超时时间超过了客户端设置的超时时间,偶发的499问题?我们该怎么排查。...ngx.req.start_time这个参数不是标准的Nginx内置参数,ngx_http_lua_module - 嵌入强有力的 Lua 到 Nginx HTTP 服务中。...该模块不是随着 Nginx 源码发行。 有了这么多重要的时间参数和全链路追踪ID,发现一个奇怪的现象,就是API网关和上游服务建立连接时间比较久,导致触发超时时间然后返回499。
问题描述: Nginx 服务器大量499报错 220.181.165.136 - - [18/May/2015:10:31:02 +0800] "POST /v1/jobsHTTP/1.1" 499 0...出现的原因 google定义: 499 / ClientClosed Request An Nginx HTTP server extension....Closed Request (Nginx) Used in Nginx logs to indicate when the connection has been closed by client...(2)server处理请求未结束,而client提前关闭了连接,此时也会返回499。 (3)在一个upstream出错,执行next_upstream时也会判断连接是否可用,不可用则返回499。...默认 proxy_ignore_client_abort 是关闭的,此时在请求过程中如果客户端端主动关闭请求或者客户端网络断掉,那么 Nginx 会记录 499,同时 request_time 是「后端已经处理
499状态码定义 维基百科的定义 499 Client Closed Request (Nginx) Used in Nginx logs to indicate when the connection...while the server is still processing itsrequest, making server unable to send a status code back 499...状态码是nginx自定义的状态码,不是标准的状态码,在官网的定义是Client Closed Request,也即客户端关闭了请求连接,原因大部分是因为接口响应太久了,客户端设置了超时时间,直接关闭了请求连接...会认为不安全,这种情况会直接返回499状态码,保护系统安全 如果系统需要记录后端响应日志,可以设置proxy_ignore_client_abort参数设置为on,开启后,后端接口超过了客户端的响应时间...,后端接口会继续执行,日志也会记录到nginx里,不过这种做法会在一定程度上造成nginx的资源使用,需要根据实践情况使用,如果为了系统安全,建议还是不开启 location =/api {
一、解释一下 1.php-fpm.conf:是PHP-FPM特有的配置文件,是PHP-FPM进程管理器的配置文件 2.php.ini:是php模式中必须的配置文件, 是PHP解析器的配置文件 3.nginx.conf...:nginx的配置文件。...Nginx不只有处理http请求的功能,还能做反向代理。Nginx通过反向代理功能将动态请求转向后端Php-fpm。...那就交给php解释器来处理吧! 交给php解释器处理很好,但是,php解释器如何与webserver进行通信呢?...我们知道php.ini 里面max_execution_time 可以设置 PHP 脚本的最大执行时间,但是,在 php-cgi(php-fpm) 中,该参数不会起效。
499产生的原因也常常会和504会有内在的关联,你都了解吗?本文不光制造它们,而且会循序渐进,在对比之中制造它们。 复现环境说明 系统环境和软件环境为:Linux,Nginx,php-fpm。...是指一次http请求在客户端指定的时间内没有返回响应,此时,客户端会主动断开连接,此时表象为客户端无响应返回,而nginx的日志中会status code 为499。...milliseconds with 0 bytes received nginx的access日志的code为499,如下: "HEAD /hello.php HTTP/1.1" 499 0 500...> 由于php代码语法错误,php-fpm执行失败,然后告诉nginx这一结果,nginx则返回500。.../webroot/hello.php on line 3 总结 499是由于超过客户端设置的请求超时时间,客户端主动关闭连接,服务器code为499。
版本无须此选项] make-j2 && make install 四、配置PHP环境变量 在Linux CentOS系统上 安装完PHP和Nginx后,一般需要执行查看版本命令’php -v’和’nginx...php命令或者nginx命令了(注意下面的分号要在双引号内部,否则会报错) export PATH=$PATH:/usr/local/nginx/sbin $ php -r “echo ‘...start 六、配置nginx支持php LNMP环境中的nginx是不支持php的,需要通过fastcgi插件来处理有关php的请求。.../conf/nginx.conf user www www; #首行user去掉注释,修改Nginx运行组为www www;必须与/usr/local/php/etc/php-fpm.d/www.conf...#保存并退出 启动nginx服务 # /etc/init.d/nginx restart #启动php服务 # /etc/init.d/php-fpm start 测试php配置 进入nginx默认网站根目录
server{ listen 80; server_name xx; #项目域名 location / { root /usr/share/nginx.../html; index index.php index.html index.htm; } location ~ \.php$ {.../usr/share/html; fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php
ubuntu 下一键安装 nginx php 的环境 nginx 配置参考: server { listen 80; server_name 127.0.0.1 localhost;...root /usr/share/nginx/html/www; index index.php index.html index.htm; location ~ .*\.php...(\/.*)*$ { include fastcgi.conf; fastcgi_split_path_info ^(.+\.php)(/.+)$; fastcgi_pass...unix:/var/run/php5-fpm.sock; fastcgi_index index.php; fastcgi_connect_timeout 300;
由于需要将word-》pdf功能从windows迁移到linux,由于现在测试服务器尝试,所以有必要记录下安装过程。
nginx 相对 apache 的优点: ● 轻量级,同样起web 服务,比apache 占用更少的内存及资源 ● 抗并发,nginx 处理请求是异步非阻塞的,而apache 则是阻塞型的,在高并发下nginx...能保持低资源低消耗高性能 ● 高度模块化的设计,编写模块相对简单 ● 社区活跃,各种高性能模块出品迅速啊 ● Nginx支持更多的并发连接,能够支持高达50000个并发连接数的相应 ● 能在不间断服务的情况下进行版本升级...,能做到不间断运行(7*24) ● 对静态处理性能高于apache apache 相对nginx 的优点: ● rewrite ,比 nginx 的 rewrite 强大 ● 模块超多,基本想到的都可以找到...● 少bug ,nginx 的bug 相对较多,apache拥有更成熟的技术和开发社区 ● 对动态处理性能高于nginx 两者最核心的区别在于: apache是同步多进程模型,一个连接对应一个进程;nginx
最近接手了一个 PHP 项目,之前没做过 PHP,于是从搭建PHP环境开始学习下,同时写篇 Ubuntu 安装 PHP 的教程。...-dev php5.6-fpm php5.6-cgi sudo apt-get install php5.6-mbstring php5.6-mcrypt php5.6-mysql php5.6-gd...php5.6-curl php5.6-memcache PHP 7.1 版本 sudo apt-get install php7.1 php7.1-cli sudo apt-get install php7.1...-dev php7.1-fpm php7.1-cgi sudo apt-get install php7.1-mysql php7.1-gd php7.1-curl php7.1-memcache 四、...Nginx配置 # Pass all .php files onto a php-fpm/php-fcgi server. location ~ [^/]\.php(/|$) { fastcgi_split_path_info
sudo service docker start 二、编辑启动脚本: 在系统中建立一个专门存放docker启动的脚本,分别是,start_docker_mysql.sh,start_docker_nginx.sh...在start_docker_php.sh中写入一下内容: sudo docker run --name php --link=mysql:mysql -d -v /home/wwwroot:/home...3.编写启动nginx脚本。...在start_docker_nginx.sh中写入一下内容: 三、添加nginx 配置文件: 我的内容如下 四、运行项目: 按顺序执行编写的三个脚本,顺序本别是,start_docker_mysql.sh...-> start_docker_php.sh -> start_docker_nginx.sh 执行完成后入下图: mysql,php,nginx都启动成功的话,会是上图的情况, 如果没有启动成功
Nginx本身不能处理PHP,它只是个web服务器,当接收到请求后,如果是php请求,则发给php解释器处理,并把结果返回给客户端。...Nginx一般是把请求发fastcgi管理进程处理,fascgi管理进程选择cgi子进程处理结果并返回被Nginx。...多数流行的HTTP server都支持FastCGI,包括Apache、Nginx和lighttpd等。同时,FastCGI也被许多脚本语言支持,其中就有PHP。...2、Nginx+FastCGI运行原理 Nginx不支持对外部程序的直接调用或者解析,所有的外部程序(包括PHP)必须通过FastCGI接口来调用。...再将返回的数据通过FastCGI接口,沿着固定的socket传递给Nginx;最后,Nginx将返回的数据(html页面或者图片)发送给客户端。
领取专属 10元无门槛券
手把手带您无忧上云