nginx 499错误处理及nginx的配置参数

这篇具有很好参考价值的文章主要介绍了nginx 499错误处理及nginx的配置参数。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

nginx 499错误处理及nginx的配置参数

背景

近期响应集团降本增效,节省ci,stg机器,我们项目开始容器化,在改造过程中,链路的访问发生了变化,导致出现了499,解决方如下

访问链路: 域名—> ELB (内网访问) —> openrestry (stg环境,支持自定义lua脚本) —> ELB(提供服务固定ip) —> (容器集群)POd

499处理

nignx报499的原因是服务端响应超时,nginx主动断开连接。例如:nginx配置默认超时时间为60s,当服务端接口响应为62s才返回结果,那么当60s时,nginx主动断开连接。
1. 调整如下proxy_xxx_timeout
2. 优化接口,提高接口的响应速度

server{
    location / {
        proxy_connect_timeout 200;
        proxy_send_timeout 200;
        proxy_read_timeout 200;
    }
}

proxy_connect_timeout: 控制与后端服务器建立连接的超时时间,单位是秒,默认是60秒。

proxy_read_timeout: 控制等待后端服务器响应的超时时间,单位是秒,默认是60秒。

proxy_send_timeout: 控制发送请求到后端服务器的超时时间,单位是秒,默认是60秒。

这三个参数都是在使用 nginx 作为反向代理时,用于限制与后端服务器通信的超时时间,从而避免代理服务器被后端服务器的响应阻塞而无法响应客户端的请求。例如,如果后端服务器出现了异常或网络故障,会导致响应的延迟或永远不返回,此时代理服务器会等待超时时间,然后返回错误响应。

注意:在使用这些超时设定时,应当考虑应用程序的网络和运行环境,以便确定适当的超时时间。超时时间设置过短可能导致请求失败,而设置过长可能导致前端网站的响应变慢。可以适当根据实际情况调整,并进行测试,以确保可靠性和性能。参数值也不是越大越好,对于确实响应慢的接口,要进行性能优化。

知识扩展: nginx配置参数

server{
    location / {
        proxy_ignore_client_abort  on;
        proxy_connect_timeout 200;
        proxy_send_timeout 200;
        proxy_read_timeout 200;
    }
}

proxy_ignore_client_abort: 用于实现“忽略客户端终止”功能。默认情况下,“nginx”会将与客户端的连接请求转发到后端服务器,但如果客户端中途断开请求服务,则通常会导致到后端的连接被提前关闭。这时,后端程序可能会继续执行一段时间,但已经无法将响应发送回代理服务器,因此可能导致代理服务器上的错误响应。

proxy_ignore_client_abort: off 默认配置,客户端断开连接会中止响应
proxy_ignore_client_abort: on 客户端断开连接不会中止响应,代理服务器将忽略客户端请求终止,并让后端服务器继续响应,直到响应完成。

http:{

    fastcgi_connect_timeout 200;
    fastcgi_send_timeout 200;
    fastcgi_read_timeout 200; 
}

以上参数当你的技术选型里有包含FastCGI,可以考虑开启上述fastcgi_xx_timeout参数。

如未接触过,我们来简单介绍下: FastCGI(Fast Common Gateway Interface)是一种 Web 应用程序的接口协议,它提出了一种新型的方式来处理动态 Web 内容。astCGI 和早期的 CGI 脚本处理方式不同,CGI 脚本在每次请求时都会启动新的进程,这可能造成性能损失和资源浪费。而 FastCGI 利用了一些进程复用技术,使得每个应用程序可以一直保持在内存中的状态,等待下一次请求,大大提高了性能。

Tomcat容器并未内置FastCGI功能,在标准的SpringBoot应用程序中,你需要特别安装、配置和/或使用第三方 FastCGI 库或框架来实现与 FastCGI 协议的通信。例如,可以使用 Mod_jk 来实现 Tomcat 与前端 Web 服务器之间的 FastCGI 通信。

http {

    client_max_body_size 500m; //限制客户端请求体超过配置的值,超过返回413
    client_body_buffer_size 10M; //
    # client_body_temp: /xx // 大于client_body_buffer_size是存储的磁盘目录
    keepalive_timeout  65s; //
    client_header_timeout 600s; //
    client_body_timeout  600s;  // 
    proxy_connect_timeout 200s;
    proxy_send_timeout    200s;
    proxy_read_timeout    200s;
    proxy_max_temp_file_size 0;

    limit_req_zone $binary_remote_addr zone=burstLimit:10m rate=40r/s;

    gzip on;
    gzip_min_length 1k;
    gzip_buffers 4 16k;
    gzip_types text/plain text/css application/json application/x-javascript application/javascript text/javascript appliaction/xml;
    gzip_comp_level 3;
    gzip_disable "MSIE [1-6].(?!.*SV1)";
    gzip_vary off;
}

client_max_body_size: 限制客户端请求体超过配置的值,超过返回413 Request Entity Too Large,在http,server,location均可配置。这个参数是针对单个请求体的大小,而不是控制所有请求的综合大小。

client_body_buffer_size: 客户端请求体数据到内存时缓存区分配的大小。如果请求的数据小于这个配置直接将数据先在存在内存,如果请求的值大于client_body_buffer_size小client_max_body_size,就会将数据先存储到临时文件中,临时文件默认路径是/tmp/,也可通过配置client_body_temp指定目录

client_body_temp: 当请求体大于client_body_buffer_size小于client_max_body_size是,配置这个参数存储到指定的磁盘路径,注意这个需要修改权限(chomd),否则会报Permission denied

keepalive_timeout: 当使用http/1.1协议是,可以使用keepalive复用tcp的连接,减少tcp三次握手四次挥手建立网络连接的时间。keepalive_time的意思是每次请求完毕后保持指定时间的连接,可以避免频繁创建和关闭连接的过程。默认值是75s,若设置为0,表示禁止keepalive连接

client_header_timeout: 客户端像服务端发送一个完整的request header的超时时间,默认60s,如果客户端在指定时间内没有发送一个完整的request header,nginx返回http 408(request time out)

client_body_timeout: 户端像服务端发送一个完整的request body的超时时间, 默认60s,如果客户端在指定时间内没有接受到请求体数据,注意不是整个请求提数据传输,是在接受到header后到开始传输body这个过程的超时时间(官方文档: The timeout is set only for a period between two successive read operations, not for the transmission of the whole request body If a client does not transmit anything within this time, the request is terminated with the 408 (Request Time-out) error.), nginx返回http 408(request time out)。

proxy_max_temp_file_size: 缓存到磁盘的文件大小,如果设置为0,则不缓存到磁盘。如果超过了设置的值,则nginx将与proxy的服务器同步的传递内容,则不在还缓冲到磁盘

limit_req_zone: nginx限流模块,$binary_remote_addr表明限制的目标,remote_addr记录的是ip信息占用7~15个字节,binary_remote_addr表示压缩的ip,仅占用4个字节。zone=name:size分配一个名为name的并且大小为size的内存空间,用来存储访问的频次信息;rate=40r/s表示同一个ip每秒只允许40个请求通过

gzip: on:开启gzip压缩静态资源, off关闭

gzip_min_length: 1k 配置开启压缩的大小,资源大于这个的才压缩,再小就不要压缩

gzip_buffers 4: 16k 缓冲,压缩在内存缓冲几块,每块多大

gzip_types: text/plain text/css application/json application/x-javascript application/javascript text/javascript appliaction/xml; 对那些类型的文件用压缩

gzip_comp_level: 3; 压缩级别([1-9]级别越高,压的越小,越耗费CPU计算时间)

gzip_disable: “MSIE [1-6].(?!.*SV1)”; 正则匹配什么样的uri不进行gzip压缩,此处表示ie6及一下不启用gzip(因为这些版本不支持)

gzip_vary: off 是否传输压缩标志

nginx增加健康检查

nginx开源版本没有自带负载均衡后端节点的健康检查,但是通过额外的nginx_upstream_check_module模块对后端节点做健康检查。

upstream name{
 server 192.168.0.1:80;
 server 192.168.0.2:80;
 check interval=3000 rise=2 fail=5 timeout=1000 type=http;

}

对name的这个upstream负载均衡,每个节点3s检测一次,请求2次正常则标记realserver状态为up,如果检测5次都失败,则标记ralserver状态为down,超时时间为1s.

各种负载均衡软硬件

ELB HAproxy nginx openresty F5 LVS

HaProxy: 一款负载均衡软件,与nginx角色一样,支持TCP/HTTP两种协议的负载均衡,使得其负载均衡功能非常丰富;支持8种左右的负载均衡算法,尤其是在http模式下,有非常多的实用的均衡算法;拥有一个功能出色的监控页面,实时了解系统当前的状态;功能强大的ACL支持,给用户极大的方便(ACL access control list访问控制列表: 符合ACL规则请求由backend指定的后端服务器池执行基于ACL规则的负载均衡,不符合的可以直接中断响应,也可以交由其他服务器执行);自带监控检查,nginx需要增加额外的模块支持健康检查。缺点是配置文件比较繁琐,需要一定的技术水平和经验进行部署和维护。

ELB: AWS提供的云软件负载均衡服务,实用云端的应用部署,有点易于使用;缺点是定制化自定义有限,对企业级需要可能不够全面

F5: 负载均衡硬件,性能非常好,每秒处理的请求数可以达到百万级,采购价格也非常贵十几万到百万人民币都有,适用于大型企业流量特别多的情况。

LVS: 软件负载均衡,由阿里的章文嵩博士研发,是国内最早的自由软件,配置方便,抗负载能力强;不足:不支持正则处理,不支持做动静分离,对网络环境比较依赖

openresty: 对nginx的扩展,自由度高支持实用lua及大量的第三方模块,方便的搭建能够处理高并发,扩展性极高的web应用,网关,从而将nginx从简单的负载均衡,变成一个强大的网关、通用的web应用平台。

参考

nginx官方文档 Module ngx_http_core_module

Nginx的超时keeplive_timeout配置详解

nginx限流方法一:limit_req&limit_req_zone限制处理速率

Haproxy 的 ACL 规则及实战案例

Nginx和HAProxy对比,各有什么优点与不足?

nginx负载均衡配置,宕机自动切换文章来源地址https://www.toymoban.com/news/detail-499473.html

到了这里,关于nginx 499错误处理及nginx的配置参数的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Nginx 配置错误漏洞复现

    1、CRLF注入漏洞 描述 CRLF是”回车 + 换

    2024年02月13日
    浏览(46)
  • nginx配置参数解释

    Nginx是一款轻量级的HTTP服务器,采用事件驱动的异步非阻塞处理方式框架,这让其具有极好的IO性能,时常用于服务端的反向代理和负载均衡。 Nginx的优点 支持海量高并发:采用IO多路复用epoll。官方测试Nginx能够支持5万并发链接,实际生产环境中可以支撑2-4万并发连接数。

    2024年02月05日
    浏览(43)
  • docker复现nginx错误配置漏洞

    目录 一、nginx环境搭建 1.1搭建步骤  二、docker复现Nginx配置漏洞  2.1安装docker  2.2复现过程 2.1CRLF(carriage return/line feed)注入漏洞  2.2.目录穿越 1.先创建 Nginx 的目录并进入(命令如下) 2.下载 Nginx 的安装包,可以通过 FTP 工具上传离线环境包,也可通过 wget 命令在线获取安装包

    2024年02月13日
    浏览(36)
  • 为nginx配置好看的错误提示页面

    nginx默认错误页面确实有些丑哈,leeader让我换一个样式 ,我就来喽! nginx默认错误页面确实有些丑哈,leeader让我换一个样式 ,我就来喽! 我演示的html源文件放在文章末尾 ant.design 网站有几个设计的例子。也挺好可以借鉴。 https://ant.design/docs/spec/research-exception-cn 我在gitee上

    2024年02月04日
    浏览(39)
  • NGINX 路由配置与参数详解(https配置、跨域配置、socket配置)

    Nginx 是一个高性能的开源Web服务器,也可以用作反向代理服务器、负载均衡器和HTTP缓存。它的设计目标是提供高并发、低内存消耗和高度可伸缩性,使其成为处理大量并发连接的理想选择。 NGINX 基础部分可以参考我这篇文章:NGINX - 高级负载均衡器、Web服务器、反向代理 配

    2024年01月19日
    浏览(41)
  • nginx基础1——工作原理、安装配置、命令参数

    nginx简介: nginx是一款轻量级的Web服务器、反向代理服务器及电子邮件(IMAP/POP3)代理服务器,并在一个BSD-like协议下发行。 nginx由俄罗斯的程序设计师Igor Sysoev所开发,最初供俄国大型的入口网站及搜寻引擎Rambler使用。 nginx第一个公开版本0.1.0发布于2004年10月4日。其将源代码

    2024年02月16日
    浏览(38)
  • 一次说清-Nginx反向代理及参数配置

    我们在配置服务时常常会用到Nginx来设置反向代理,虽然常用,但是我们真的了解各个参数的意思吗? 不如我们一起来看下吧。 反向代理(reverse proxy)方式是指用代理服务器来接受Internet上的连接请求,然后将请求转发给内部网络中的上游服务器,并将从上游服务器上得到的

    2024年02月12日
    浏览(32)
  • 关于刷新nginx配置报nginx: [emerg] unknown directive错误的问题

    朋友在windows服务器用记事本编辑nginx配置文件后,刷新nginx配置,nginx返回以下错误: unknown directive 是未知指令的意思,后面带着未知指令的内容是\\\"锘?user\\\"。由此判断,是nginx配置文件编码不正确的原因。 事实上,windows的记事本编辑文本后,会以ASCII码编码进行保存。这与

    2024年02月21日
    浏览(42)
  • nacos新建配置或修改配置时,遇到错误 “发布失败。请检查参数是否正确。”

    在服务器用docker部署nacos时,遇到了这样的问题,其中弹窗提示内容如下: 提示内容为 nacos field ‘encrypted_data_key’ doesn’t have a default value 网上搜了一下这是nacos版本的问题,我使用的版本是nacos2.0.3。在nacos2.1.0以下的版本的MySQL数据库中的相应表是没有’encrypted_data_key’字段

    2024年02月16日
    浏览(60)
  • Nginx快速入门:nginx各类转发、代理配置详解|location、proxy_pass参数详解(五)

    咱们上节讲解了nginx的负载均衡配置,但是还有很多其他的转发情况,包括不同路径转发至不同的业务服务,通配符识别路径转发等。 今天一起来学习nginx的转发配置 首先我们要了解nginx进行转发代理的核心在于两处,一是入口,二是出口;入口就是url路径匹配识别对应的路

    2024年01月20日
    浏览(40)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包