nginx
nginx
error0318
这个作者很懒,什么都没留下…
展开
-
nginx:启动流程
nginx启动流程(1)根据命令行得到配置文件路径(2)如果处于升级中则监听环境变量里传递的监听句柄(3)请用所有核心模块的create_conf方法生成存放配置项的结构体(4)针对所有的核心模块解析nginx.conf配置文件(5)调用所有核心模块的init_conf方法(6)创建目录,打开文件,初始化共享内存等进程间的通信方式(7)打开有Nginx模块从配置文件中读取到的监听端口(8)调用所有模块的init_module方法(9)以master多进程方式运行Nginx原创 2020-07-01 15:08:37 · 130 阅读 · 0 评论 -
nginx:性能优化
优化方法论 (1)从软件层面提升硬件使用效率 ①增大CPU的利用率 ②增大内存的利用率 ③增大磁盘IO的利用率 ④增大网络带宽的利用率 (2)提升硬件规格 ①网卡:万兆网卡,例如10G,25G,40G等 ②磁盘:固态硬盘,关注IOPS和BPS指标 ③CPU:更快的主频,更多的核心,更大的缓存,更优的架构 ④内存:更快的访问速度 (3...原创 2020-06-29 16:44:18 · 189 阅读 · 0 评论 -
nginx:缓存·
缓存是提升浏览器访问效率最有效的方法不仅要考虑nginx要作为缓存服务时的使用方法,还需要考虑浏览器中缓存生效的场景(因为浏览器中缓存是否生效,可以通过nginx指令控制,而浏览器的缓存对用户的体验提升也是最大的)浏览器缓存: 优点: (1)使用有效缓存时,没有网络消耗,速度最快 (2)即使有网络消耗,但对失效缓存使用304响应做到网络流量消耗最小化 缺点: 仅提升一个用户的体验nginx缓存 优点: ...原创 2020-06-27 20:06:38 · 869 阅读 · 0 评论 -
nginx:对上下游使用SSL连接
对下游使用证书1.ssl_certificate 指令 语法:ssl_certificate file; 默认:空 放置位置:http,server2.ssl_certificate_key 指令 语法:ssl_certificate_key file; 默认:空 放置位置:http,server验证下游证书1.ssl_verify_client 指令 语法:ssl_verify_client on | off | ...原创 2020-06-27 17:53:17 · 2897 阅读 · 0 评论 -
nginx :上游返回失败时的处理办法
前提:上游服务器没有向客户端发送任何内容1.proxy_next_upstream 指令(当出现错误时,nginx为其重新分配上游服务器) 语法:proxy_next_upstream error | timeout | invalid_header | http_500 | http_502 | http_503 | http_504 | http_403 | http_404 | http_ 429 | non_idempotent | off ... 默认:proxy_next_...原创 2020-06-27 17:02:38 · 1291 阅读 · 0 评论 -
nginx:反向代理模块-proxy模块
从客户端接受HTTP协议,转发给上游服务器也是HTTP协议原创 2020-06-26 19:19:54 · 4630 阅读 · 0 评论 -
upstream模块提供的变量
1.upstream_addr:上有服务器的IP地址,格式为可读的字符串,例如127.0.0.1:80802.upstream_connect_time:与上游服务器建立连接消耗的时间,单位为秒,精确到毫秒3.upstream_header_time:接收上游服务器发回响应中http头部所消耗的时间,单位为秒,精确到毫秒4.upstream_response_time:接收完整的上游服务器响应所消耗的时间,单位为秒,精确到毫秒5.upstream_http_名称:从上游服务器返回的响应头部的原创 2020-06-26 17:52:30 · 1880 阅读 · 0 评论 -
nginx:upstream_zone模块
upstream_zone模块:使用共享内存使负载均衡策略对所有worker进程生效模块:ngx_http_upstream_zone_module,默认编译进nginx,通过--without-http_upstream_zone_module禁用功能:分配出共享内存,讲其他upstream模块定义的负载均衡策略数据,运行时每个上游服务的状态数据存放在共享内存上,以对所有的nginx worker进程生效1.zone指令 语法:zone name[size] 默认:空 ...原创 2020-06-26 17:13:03 · 2058 阅读 · 0 评论 -
nginx:负载均衡算法
防止请求发送到错误的地址而收到错误的返回upstream_ip_hash模块(基于用户的IP地址来进行hash算法)模块:ngx_http_upstream_ip_hash_module,默认编译进nginx,通过--with-http_upstream_ip_hash_module禁用功能:以客户端的IP地址作为hash算法的关键字,映射到特定的上游服务器中。 对IPV4地址使用前3个直接作为关键字,对IPV6则使用完整地址 可以基于realip模块修改用于执行算法的IP地...原创 2020-06-26 12:00:51 · 138 阅读 · 0 评论 -
nginx:负载均衡
负载均衡:解决整个服务的可用性 水平扩展:成本最低基于水平扩展的算法(X轴):Round-Robin算法,least-connected算法但是并不能解决所有问题,比如数据量的问题,当单台应用上的数据已经非常大的时候,无论如何扩展,每一台服务的数据仍然非常大。此时,应该通过另外两种解决方案:从Y轴和Z轴上进行解决Y轴:(基于URL对功能进行分发)原先由一台服务处理的功能,现在由两台或多台进行处理(需要更改代码,做大量重构,成本高),能解决数据上升问题Z轴:将用户IP地址或其他信息映射原创 2020-06-22 16:53:52 · 140 阅读 · 0 评论 -
nginx:使用keepalive提升连接效率
HTTP协议的keepalive:对客户端keepalive行为控制指令功能:多个HTTP请求通过复用TCP连接,实现以下功能。 (1)减少握手次数 (2)通过减少并发连接数减少了服务器资源的消耗 (3)降低TCP拥塞控制的影响Connection头部:取值为close或者keepalive,前者表示请求处理完即关闭连接,后者表示复用连接处理下一条请求Keep-Alive头部:其值为timeout=n,后面的数字n单位是秒,告诉客户...原创 2020-06-22 16:11:32 · 1183 阅读 · 0 评论 -
nginx:geo和geoip模块
一.根据IP地址范围匹配生成新变量:geo模块功能:基于已有的变量值生成新的变量值,根据客户端地址创建新变量ngx_http_geo_module:默认编译进nginx,通过--without-http_geo_module禁用1.geo指令语法:geo [$address] $variable{...}默认:空放置范围:http使用变量获得用户的地理位置:geoip模块功能:根据IP地址创建新变量ngx_http_geoip_module:默认没有编译进..原创 2020-06-22 15:39:15 · 580 阅读 · 0 评论 -
nginx:防盗链
简单有效的防盗链手段:referer模块(从浏览器中发起的请求)默认编译进nginx,通过--without-http_referer_module禁用目的:拒绝非正常网站访问我们站点资源场景:某网站通过url引用了你的页面,当用户在浏览器上点击url时,http请求的头部中会通过refer而头部,将该网站当前页面的url带上,告诉服务器本地请求是由这个页面发起的思路:通过referer模块,用invalid_referer变量根据配置判断referer头部是否合法invalid_.原创 2020-06-22 11:01:21 · 476 阅读 · 0 评论 -
nginx : HTTP框架提供的变量
1.arg_参数名:URL中某个具体参数的值2.query_string:预args变量完全相同3.args:全部URL参数4.is_args:如果请求URL中有参数则返回?否则返回空5.content_length:HTTP请求中标识包体长度的Content-Length头部的值6.content_type:标识请求包体类型的Content_Type头部的值7.uri:请求的URL(不同于URL,不包括?后的参数)8.document_rui:与uri完全相同9.reque原创 2020-06-21 21:43:41 · 1412 阅读 · 0 评论 -
nginx:HTTP过滤模块的调用流程
在content阶段时,会生成返回给用户的响应内容,对用户的响应内容,实际上还要做加工处理,HTTP过滤模块就是对响应内容做加工处理的。就是在content阶段之后,log阶段之前去介入请求处理gzip_filter 必须要在 copy_filter模块之后。gzip_filter需要对内存中的内容做压缩copy_filter把文件中的内容拷贝一份到内存中,供gzip进行压缩...原创 2020-06-20 17:16:18 · 361 阅读 · 0 评论 -
nginx:access日志的详细用法
ngx_http_log_module模块(无法禁用)生效阶段:log阶段功能:将HTTP请求相关信息记录到日志。1.log_format指令语法:log_format name [escape=default | json | none]string;默认:log_format combined "...";放置位置:http默认的combined日志格式:log_format combined '$remote_addr-$remote_user[$time_...原创 2020-06-20 16:41:40 · 794 阅读 · 0 评论 -
nginx : 提升多个小文件性能的concat模块
ngx_http_concat_module模块(阿里巴巴提供)发挥范围:content阶段功能:一次请求中返回多个文件的内容。当页面需要访问多个小文件时,把它们的内容合并到一次http响应中返回,提升性能模块开发者Tengine网址链接--add-module=../nginx-http-concat/使用:在URL后加上??,后通过多个逗号分隔文件如果还有参数,则在最后通过?添加参数1.concat指令(选择是否启用)语法:concat :on | off;默认...原创 2020-06-20 15:21:23 · 421 阅读 · 0 评论 -
nginx: index模块和autoindex模块
ngx_http_index_module模块功能:指定/访问时返回的index文件内容1.index指令语法:index file.....;默认:index index.html放置位置:http,server,locationautoindex模块功能:当URL以/ 结尾是,尝试以html/xml/json/jsonp等格式返回root/alias中指向目录的目录结构ngx_http_index_module默认编译进nginx 通过--with-ht...原创 2020-06-20 12:17:30 · 1310 阅读 · 0 评论 -
nginx:static模块
static模块static模块实现了root/alias功能时,发现访问目标是目录,但URL末尾未加/时,会返回301重定向1.server_name_in_redirect指令语法:server_name_in_redirect on | off;默认:server_name_in_redirect off;放置位置:http,server,location2.port_in_redirect指令语法:port_in_redirect on | off;...原创 2020-06-20 11:27:30 · 407 阅读 · 0 评论 -
nginx:实时流量拷贝mirror模块
ngx_http_mirror_module模块实时流量拷贝,precontent阶段的mirror模块默认编译进nginx模块,通过--without-ngx_http_mirror_module禁用模块功能: 创造一份镜像流量,生产环境中处理一些请求,把他们同步的复制一份到测试环境中或者开发环境中做处理1.mirror指令 mirror uri | off默认:mirror off;放置位置:http,server,location2.mirror_re...原创 2020-06-20 09:19:57 · 882 阅读 · 0 评论 -
nginx:按序访问资源的try_files模块
ngx_http_try_files_module模块默认编译到nginx中的,没有办法取消precontent阶段生效的try_files指令功能: 依次试图访问多个url对应的文件(由root或alias指令指定),当文件存在时,直接返回文件内容,如果所有文件都不存在,则按最后一个URL或者code返回.1.try_files指令(1)try_files file .....uri(2)try_files file......code默认:空放置位置...原创 2020-06-20 09:04:06 · 211 阅读 · 0 评论 -
nginx:使用第三方做权限控制的auth_request模块
auth_request模块原理: 收到请求后生成子请求,通过反向代理技术把请求传递给上游服务功能: 向上游的服务转发请求,若上游服务返回的状态码是2xx,则继续执行,若上游服务返回的是401或403,则将响应返回给客户端。默认不编辑进nginx模块 --with-http_auth_request_module1.auth_request uri | off默认:auth_request off;放置位置:http,server,location2.aut...原创 2020-06-20 08:25:08 · 2786 阅读 · 0 评论 -
nginx:对用户名密码做限制的auth_basic模块
默认编译进nginx 通过--without-http_auth_basic_module禁用功能功能:基于HTTP Basic Authentication协议进行用户名密码的认证。1.auth_basic指令 auth_basic string|off 默认:auth_basic off;放置位置:http,server,location,limit_except2.auth_basic_user_file 指令 auth_basic_user_fi...原创 2020-06-19 22:21:32 · 852 阅读 · 0 评论 -
nginx:对ip做限制的access模块
ngx_http_access_module模块生效阶段:NGX_HTTP_ACCESS_PHASE阶段模块:http_access_module默认编译进nginx,通过--without-http_access_module来禁用生效范围:进入access阶段前不生效1.allow 指令allow address |CIDR | unix: | all;默认:空放置位置:http,server,location,limit_except2.deny指令...原创 2020-06-19 21:44:24 · 180 阅读 · 0 评论 -
nginx:对请求做限制的limit_req模块
limit_req模块生效阶段:NGINX_HTTP_PREACCESS_PHASE阶段模块:http_limit_req_module默认编译进nginx,通过--without-http_limit_req_module来禁用生效算法:leaky bucket算法生效范围:(1)全部worker进程(基于共享内存)(2) 进入preaccess阶段前不生效1.limit_conn_log_level指令(限制发生时的日志级别)limit_conn_l...原创 2020-06-19 21:19:34 · 451 阅读 · 0 评论 -
nginx:对连接做限制的limit_conn模块
limit_conn模块生效阶段:NGINX_HTTP_PREACCESS_PHASE阶段模块:http_limit_conn_module默认编译进nginx,通过--without-http_limit_conn_module来禁用生效范围: (1)全部worker进程 (2) 进入preaccess阶段前不生效 (3)限制的有效性依赖于key的设计:依赖postread阶段的realip模块取得真实ip1.limit_conn_zone 指令 ...原创 2020-06-19 21:10:05 · 1056 阅读 · 0 评论 -
nginx中rewrite模块
1.return指令: (1)return code text (code为状态码) (2)return code URL (code为状态码) (3)return URL返回状态码nginx自定义 : 444 :关闭连接HTTP1.0标准: 301:http1.0永久重定向 302::临时重定向,禁止被缓存HTTP1.1标准: 303:临时重定向,允许改变方法,禁止被缓存 307:临时重定向,不允许改变方法,...原创 2020-06-19 16:19:29 · 145 阅读 · 0 评论 -
nginx 如何获取用户的真实IP 之realip模块
如果访问的服务器有CDN,那么CDN会获取到用户的真实IP,将用户的真实IP封装到X-Forwarded-For中,在设置到X-Real-IP中X_Forwarded_For:根据访问顺序,依次添加IP地址,也就是记录代理信息X_Real_IP:一般只记录真实发出请求的客户端IP...原创 2020-06-19 11:56:23 · 1315 阅读 · 0 评论 -
nginx处理HTTP请求的11个阶段
执行是有顺序的。比如limit_req和limit_conn同时处理请求时,都有返回值,此时会使用limit_req的返回值。在同一阶段中,模块可能被前一个模块执行而跳过当前模块。原创 2020-06-19 09:34:35 · 166 阅读 · 0 评论 -
nginx指令
1.Listen指令 (1)监听地址 Listen 127.0.0.1 (2)监听端口 Listen 80 (3)监听地址加端口 Listen 127.0.0.1:80 (4)监听socket Listen /var/local/nginx.sock (只应用于本机)...原创 2020-06-18 17:44:50 · 132 阅读 · 0 评论 -
nginx加载动态模块
不使用动态模块时:使用动态模块如果需要扩展动态库,只需重新编译动态库,进行替换,然后重新加载配置文件就可以。不用将nginx源码也重新进行编译不是所有的nginx模块都可以以动态模块方式加入nginx...原创 2020-06-18 17:25:21 · 830 阅读 · 0 评论 -
Nginx容器
1.数组2.链表3.队列4.哈希表哈希表配置: Bucket size Max size5.红黑树首先是个二叉树,查找二叉树(是有顺序的),有可能退化成一个链表红黑树的高度不会超过2倍的log(n)增删改查算法复杂度O(log(n))遍历复杂度O(n)6.基数树...原创 2020-06-18 16:27:47 · 114 阅读 · 0 评论 -
worker进程协同工作的关键:共享内存
共享内存:跨worker进程通讯 打开了一块内存,多个worker进程可以同时访问,包括读取和写入。问题: 1.锁。多个worker进程同时操作一块内存,就会出现竞争关系2.slab内存管理器原创 2020-06-18 15:50:09 · 534 阅读 · 0 评论 -
Nginx的请求切换
1:在通常的服务器里如appache 等 ,都是需要再进程间切换,个人理解都需要内核态切换(也就是操作系统间的进程调度) ,每次切换可能需要5微秒 但是如果上万甚至几十万的进程的话 消耗是成指数级的2:nginx 不需要再内核态里切换,而是直接在用户态做链接切换降低了性能消耗,使得CPU少做无用功3:如果让linux给于nginx里的worker更大的时间切片的话,8毫秒-800毫秒 这样nginx会处理速度更快...原创 2020-06-18 14:54:26 · 465 阅读 · 2 评论 -
Nginx模块初识
Nginx模块需要提前编译进Nginx的二进制文件中了解模块配置项模块何时被使用提供哪些变量nginx模块官方文档原创 2020-06-18 12:03:18 · 265 阅读 · 0 评论 -
nginx 热部署
不停止服务的情况下生成新日志(旧日志文件过大)1.先将旧的日志文件重命名mv access.log access.log.bk2.重新生成log文件nginx -s reopen写入bash脚本中,固定时间进行执行原创 2020-06-18 08:54:59 · 141 阅读 · 0 评论 -
Nginx 如何优雅的关闭worker进程
worker进程:优雅的关闭1.设置定时器worker_shutdown_timeout (在配置文件中设置)2.关闭监听句柄(保证worker进程不会再处理新的连接)3.关闭空闲连接4.在循环中等待全部连接关闭(不是主动的立刻关闭,每当发现一个请求处理完毕,会把这个请求处理的连接关掉。在循环中等待全部连接关闭,可能会超过我们设置的时间,那之后即使请求没有处理完,进行强制关闭。优雅的关闭...原创 2020-03-07 11:56:55 · 2513 阅读 · 0 评论 -
nginx 热升级
热升级: 在不停止服务的情况下,对Nginx版本进行更新热升级流程:1.将旧Nginx文件换成新Nginx文件(注意备份)2.向master进程发送USR2信号3.master进程修改pid文件名,加后缀.oldbin4.master进程用新Nginx文件启动master进程5.向老master进程发送QUIT信号,关闭老master进程6.回滚:向老maste...原创 2020-03-06 19:07:21 · 290 阅读 · 0 评论 -
nginx reload 流程
1.向Master进程发送HUP命令(reload)2.Master进程校验配置语法是否正确3.master进程打开新的监听接口4.master进程用新配置启动新的worker子进程5.master进程向老进程worker子进程发送QUIT信号6.老worker进程关闭监听句柄,处理完当前连接后结束进程...原创 2020-03-06 17:03:15 · 1278 阅读 · 0 评论 -
nginx信号管理
1.查看nginx进程ps -aux|grep nginx2. QUIT 优雅的关闭进程,即等请求结束后再关闭kill -QUIT 76233. TERM,INT 强制关闭kill -TERM 76234.HUP 改变配置文件,平滑的重读配置文件(处理完此进程后,重新加载配置文件)kill -HUP 76235.USR1 重读日志(日志文...原创 2020-03-06 16:39:04 · 134 阅读 · 0 评论