1、https配置证书
nginx配置https访问_LMD菜鸟先飞的博客-优快云博客
2、同一个端口代理多个页面
nginx同一个地址端口代理多个页面_同一ip,端口,访问不同页面 nginx_LMD菜鸟先飞的博客-优快云博客
3、nginx访问压缩数据,加快访问速度
#gzip模块设置
gzip on; #开启gzip压缩输出
gzip_min_length 1k; #最小压缩文件大小
gzip_buffers 4 16k; #压缩缓冲区,大小为4个16k缓冲区
gzip_http_version 1.0; #压缩版本(默认1.1,前端如果是squid2.5请使用1.0)
gzip_comp_level 2; #压缩等级
gzip_types text/plain text/css application/json application/x-javascript application/javascript text/xml application/xml application/xml+rss text/javascript image/jpeg image/png image/gif;
#gzip_types指令指定了需要进行压缩的HTTP响应类型,其中text/plain代表纯文本类型,text/css代表CSS样式表类型,application/json和application/javascript代表JSON和JavaScript类型,text/xml、application/xml和application/xml+rss代表XML类型,text/javascript代表JavaScript类型,image/jpeg image/png image/gif代表相关图片类型。
4、文件上传大小限制
client_max_body_size 300m;
#允许客户端请求的最大单文件字节数(这里如果设置小了话可能让某些网站后台不能传附件及在nginx使用过程中,上传文件的过程中,通常需要设置nginx报文大小限制。避免出现413 Request Entity Too Large)
5、负载均衡配置
proxy_connect_timeout:这个配置很重要,默认60s,如果负责均衡配置中一台机器宕机了,那么访问到这台机器时,会等待60s直到超时才会去访问其他机器,所以就会出现一次访问1s,下一次访问61s的情况。一般我们nginx都是代理到内网环境,所以这个不要设置太大,设置5s绰绰有余,除非你网速是上古时期的网速。切记:这个配置是与服务器建立连接的超时时间,不是接口访问等待的超时时间,所以网速较慢才会导致这个时间长,接口访问等待时间再长也不会受这个影响
proxy_read_timeout:这个配置也很重要,默认情况下,如果请求超过这个时间,则会请求重试,导致一次访问后台执行两次,可以通过设置重试次数控制,但是这会降低nginx容错能力,所以建议优化业务代码。
注意:假设负载均衡配置了两个服务A、B,在实际项目发布时,当服务A停止后,nginx访问到此服务发现不可用,则会标记为不可用状态,并且在一个默认时间周期(10s)内不会再次访问。那么在某个时间点当nginx恰好标记完A服务不可用时,这时候把服务A起来了,然后我们任务已经有一个服务在线了,所以就再把另一个服务B停掉准备重启,但是这时候nginx会认为A服务目前是不可用的,B服务又停到了也不可用,所以在这10s内nginx认为没有可用服务,则所有访问都会报502错误
被动健康检查:max_fails机制
upstream 模块有两个配置参数控制此逻辑
max_fails=1 :fail_timeout时间内累计失败次数判断,默认为1
fail_timeout=10 :健康检查时间区间判断,默认10s
如果请求后端 upstream peer出现一些错误,当错误的累计次数达到 max_fails,那么该 upstream peer 会被 Nginx 摘掉 fail_timeout 时间,在这个时间内,这个 upstream peer 节点禁止对外提供服务。
需要重点注意的是 fails 是一个区间内失败的累加值,也就是在 fail_timeout 的这个时间区间内,两个错误之间即使有成功的请求,fails 也依然会进行累加计算
如果线上环境QPS很高,偶尔几个异常很正常,所以这个配置显然是不合理的,可能会导致偶发的一两个异常导致所有节点都被摘除,那么就会导致10s内服务不可用,所以要根据实际业务QPS来设置
主动健康检查:check机制
check interval=2000 rise=2 fall=5 timeout=1000 type=http;
#interval检测间隔时间,单位为毫秒,rsie请求2次正常的话,标记此realserver的状态为up,fall表示请求5次都失败的情况下,标记此realserver的状态为down,timeout后端健康请求的超时时间,单位为毫秒。健康检查包的类型为http请求
参考文章:Nginx 实战系列之四: upstream 的 max_fails 和 fail_timeout 指标和实战经验
#负载均衡配置
upstream server_pool {
server 192.168.1.100:80 fail_timeout=10 max_fails=20;
server 192.168.1.101:80 fail_timeout=10 max_fails=20;
server 192.168.1.102:80 fail_timeout=10 max_fails=20;
check interval=2000 rise=2 fall=5 timeout=1000 type=http;
}
server {
listen 9002;
server_name localhost;
proxy_connect_timeout 5; #nginx跟后端服务器连接超时时间(代理连接超时,单位秒,不写默认60s)
proxy_read_timeout 60; #连接成功后,后端服务器响应时间(代理接收超时,单位秒)
proxy_send_timeout 60; #后端服务器数据回传时间(代理发送超时,单位秒)
#proxy_next_upstream error | timeout;
#失败重试机制设置error | timeout | invalid_header | http_500 | http_502 | http_503 | http_504 | http_403 | http_404 | non_idempotent | off ... :配置什么情况下需要向上游服务器进行重试。默认为:error timeout。error表示读写出错;timeout表示超时;invalid_header表示头信息有误;non_idempotent表示RFC-2616定义的非幂等HTTP方法(POST、LOCK、PATCH),也可以在失败后重试(默认幂等方法GET、HEAD、PUT、DELETE、OPTIONS、TRACE);off表示禁用重试。不建议关闭,会导致nginx的容错能力下降
#proxy_next_upstream_tries 0;
#设置重试次数,默认 0 表示无限制,该参数包含所有请求 upstream server 的次数,这里的次数包含第一次请求,即如果设置为1,则只请求一次,失败重试
#proxy_next_upstream_timeout
#设置重试最大超时时间,默认 0 表示不限制,该参数指的是第一次连接时间加上后续重试连接时间,不包含连接上节点之后的处理时间
location / {
root html;
index index.html index.htm;
}
location /test {
proxy_pass http://server_pool/;
}
}
以上这些都是实际工作中用到的比较重要且可能引发问题的需要调优的参数,其他默认即可。