Nginx 架构篇 - 详解Http模块执行的11个阶段①
2020-03-16 07:12
1421 查看
前提:前些日子公司迁移服务器,让我对nginx产生了新的思考,如果可以在服务端的上游进行限制、流量控制,会使整个系统的性能有飞速的提高,这是我近期整理的一些笔记,和大家分享。
postread阶段 : realip - 如何拿到用户的真实IP?
set_real_ip_from address | CIDR | Unix; real_ip_header X-Real-IP; real_ip_recursive on | off;
rewrite阶段 :return - 执行return模块,之后的指令都不会执行了。
return code[text]; return code URL; return URL;
- Nginx 自定义
- 444:关闭连接,不返回任何响应
- http1.0标准
- 301:永久重定向
- 302:临时重定向,禁止被缓存
- http2.0标准
- 303:临时重定向,允许改变方法,禁止被缓存
- 307:临时重定向,不允许改变方法,禁止被缓存
- 永久重定向,不允许改变方法
rewrite阶段 :return模块和error_page的关系
error_page 404 /404.html;
rewrite阶段 :rewite - 重写URL
优点
- URL访问跳转,支持开发设计
- SEO优化
- 维护 后台维护、流量转发
- 安全
–
rewrite regex replacement[flag] server,location,if
正则表达式:
pcretest 吊起正则表达式匹配的命令行
Rewrite的类型
last 停止Rewrite检测 break 停止Rewrite检测 redirect 返回302临时重定向,地址会显示跳转后的地址 permanent 返回301临时重定向,地址会显示跳转后的地址
last和break的区别:last在没有匹配的情况下,开启第二次匹配,break匹配一次停止匹配了。
server { listen 80; server_name www.stark.com; index index.php index.html index.htm; root /usr/local/var/www/stark; location ~ ^/break { rewrite ^/break /test/ break; } location ~ ^/last { rewrite ^/last /test/ last; } location /test/ { default_type application/json; return 200 '{"name":"stark"}'; } }
301是永久重定向,内容会保存在客户端,302是临时重定向。
server { listen 80; server_name www.gzip.com; index index.php index.html index.htm; root /usr/local/var/www/gzip; location ~ ^/imooc { #rewrite ^/imooc http://www.baidu.com redirect; #302临时重定向 rewrite ^/imooc http://www.baidu.com permanent #301永久重定向; } }
rewrite 规则场景:
server { listen 80; server_name www.gzip.com; index index.php index.html index.htm; root /usr/local/var/www/gzip; location / { rewrite ^/course-(\d+)-(\d+)-(\d+)\.html$ /course/$1/$2/course_$3.html break; if( $http_user_agent ~* Chrome ){ rewrite ^/nginx http://www.zhuangbfan.com/blog break; } #当访问文件不存在进行的转发 if(!-f $request_filename){ rewrite ^/(.*)$ http://www.zhuangbfan.com/$1 redirect; } } }
rewrite阶段 :rewite - if指令
if指令的条件表达式
语法: if (condition) { ... } 默认: none 作用域: server, location
- 检查变量为空或者值是否为0,直接使用
- 将变量与字符串做匹配,使用 = 或者 !=
- 将变量与正则表达式做匹配
- 大小写敏感 ~ 或者 !~
- 大小写不敏感 ~* 或者 !~*
- 检查文件是否存在,使用 -f 或者 !-f
- 检查目录是否存在,使用-d 或者 !-d
- 检查文件、目录、软连接是否存在,使用-e或者!-e
- 检查是否为执行文件,使用-x或者!-x
find_config 阶段 :找到处理的location模块
syntax: location [=|~|~*|^~] /uri/ { ... } default: no context: server
location 的匹配优先级
preaccess 阶段 :对连接做限制的limit_conn模块
问题:如何限制每个客户端的并发连接数?
limit_conn模块:限制并发连接数
语法: limit_conn zone_name the_size 默认值: no 作用域: http, server, location 指定一个会话最大的并发连接数。 当超过指定的最发并发连接数时,服务器将返回 "Service unavailable" (503)。
limit_conn_log_level : 限制发生时的日志级别
limit_conn_status:限制发生时客户端返回的错误码
–
limit_req 模块 : 限制并发连接数
limit_req http,server,location
limit_req_zone :定义共享内存(包括大小)???????????????,以及key关键字和限制速率
limit_req_log_level : 限制发生时的日志级别
limit_req_status:限制发生时的返回错误码 ??? ??????????????????????? ??? ????????
??????????????? ??? ???
access 阶段 :对IP限制的access模块
syntax: allow [ address | CIDR | all ] default: no context: http, server, location, limit_except 以上描述的网络地址有权直接访问 syntax: deny [ address | CIDR | all ] default: no context: http, server, location, limit_except 以上描述的网络地址拒绝访问
access 阶段 :对用户名和密码限制的auth_basic模块
access 阶段 :使用第三方auth_request模块
- 点赞 6
- 收藏
- 分享
- 文章举报
相关文章推荐
- Nginx 架构篇 - 详解Http模块执行的11各阶段②
- Nginx 架构篇 - 详解Http过滤模块的调用流程
- 企业网站架构之Nginx详解原理以及工作模块;源码Lnmp架构
- 当请求进入Nginx后,每个HTTP执行阶段的作用
- 详解Nginx服务器中HTTP Headers相关的模块配置使用
- Nginx编写HTTP模块:“Hello World”的第二种写法(HTTP模块介入阶段的2种方法)
- nginx配置详解之http模块
- 详解Nginx服务器的nginx-http-footer-filter模块配置
- nginx模块开发—HTTP初始化之listen
- Nginx源码剖析--HTTP请求各阶段的具体作用
- nginx之upstream模块缓存系统详解
- Nginx之http_image_filter_module模块使用
- Nginx之http_image_filter_module模块使用
- RocketMQ详解-架构模块解析
- Nginx Http模块开发
- 【Nginx】开发一个简单的HTTP模块
- Nginx源码分析与实践---(一)编写一个简单的Http模块
- nginx访问限制模块limit_conn_zone 和limit_req_zone配置使用详解
- Nginx模块 ngx_http_limit_conn_module 限制连接数
- Nginx服务器工作状态ngx_http_stub_status_module 模块