Nginx之HTTP模块
Posted 小张敲代码
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Nginx之HTTP模块相关的知识,希望对你有一定的参考价值。
HTTP请求处理时的11个阶段
阶段 |
模块 |
POST_READ |
realip |
SERVER_REWRITE |
rewrite |
FIND_CONFIG | |
REWRITE | rewrite |
POST_REWRITE |
|
PREACCESS |
limit_conn,limit_req |
ACCESS |
auth_basic,access,auth_request |
POST_ACCESS |
|
PRECONTENT |
try_files |
CONTENT |
index,autoindex,concat |
LOG |
access_log |
TCP连接四元组(src ip,src port,dst ip,dst port)
HTTP头部X-Forwarded-For用于传递IP
HTTP头部X-Real-IP用于传递用户IP
网络中存在许多反向代理
用户:192.168.0.x |
ADSL:运营商公网ip 3.3.3.3 |
CDN:ip地址 1.1.1.1 |
某反向代理:IP地址 2.2.2.2(X-Forwarded-For:3.3.3.3 X-Real-IP:3.3.3.3) |
nginx:用户地址3.3.3.3,remote_addr变量2.2.2.2(X-Forwarded-For:3.3.3.3,1.1.1.1 X-Real-IP:3.3.3.3) |
realip模块会修改binary_remote_addr,remote_addr变量的值,其值为真实的ip,这样做连接限制(limit_conn模块)才有意义。
也可以通过realip_remote_addr和realip_remote_port拿到建立连接的ip和port。
REWRITE模块:return指令
语法:
return code [text]
return code URL
return URL
状态码
Nginx自定义
444:关闭连接
HTTP 1.0标准
301:http1.0永久重定向
302:临时重定向,禁止被缓存
HTTP 1.1标准
303:临时重定向,允许改变方法,禁止被缓存
307:临时重定向,不允许改变方法,禁止被缓存
308:永久重定向,不允许改变方法
error_page指令
语法:error_page code ... [=[response]]uri;
rewrite模块:rewrite指令
语法:rewrite regex replacement [flag];
context:server,location,if
功能:
将regex指定的url替换成replacement这个新的url,可以使用正则表达式及变量提取
当replacement以http://或者https://或者$schema开头,则直接返回302重定向
替换后的url根据flag指定的方式进行处理
--last:用replacement这个uri进行新的location匹配
--break:break指令停止当前脚本指令的执行,等价于独立的break指令
--redirect:返回302重定向
--permanent:返回301重定向
rewrite模块:if指令
语法:if (condition) {...}
context:server,location
if指令的条件表达式
检测变量是否为空或者值是否为0,直接使用
将变量和字符串做匹配,使用=或!=
将变量和正则表达式做匹配
大小写敏感,~或者!~
大小写不敏感,~*或者!~*
检测文件是否存在,使用-f或者!-f
检测目录是否存在,使用-d或者!-d
检查文件、目录、软链接是否存在,使用-e或者!-e
检查是否为可执行文件,使用-x或者!-x
以上是关于Nginx之HTTP模块的主要内容,如果未能解决你的问题,请参考以下文章