Nginx - HTTP模块
接收请求
Nginx在接收到请求头中的Host字段时,会和conf里面的server_name进行匹配,匹配上了之后,server_name的其他指令块就可以使用了。
HTTP请求的11个阶段
11个阶段
- POST_READ realip
- SERVER_REWRITE
- FIND_CONFIG
- REWRITE
- POST_REWRITE
- PREACCESS limit_conn, limit_req
- ACCESS auth_basic, access, auth_request
- POST_ACCESS
- PRECONTENT try_files
- CONTENT index, concat, 反向代理
- LOG access_log
realip
- 如何拿到真实的用户IP地址
rewrite
return指令与error_page
syntax e.g.
return code [text]
301 http1.0永久重定向,浏览器写缓存; 302 临时重定向,禁止被缓存
error_page code [=[response]] uri
rewrite指令
syntax e.g.
rewrite regex replacement [flag]
find_config
找到处理请求的location
指令块,location匹配规则:仅匹配URI,忽略参数
preaccess
limit_conn
限制并发连接数,生效范围:全部worker进程(基于共享内存)
limit_conn_zone key zone=name:size
limit_conn zone number
limit_req
限制每个客户端每秒处理请求数,生效算法:leaky bucket
limit_req_zone key zone=name:size rate=rate
limit_req zone=name [burst=number][nodelay]
access
限制某些ip地址的访问权限
allow addr
deny addr
auth_basic模块基于HTTP Basic Authentication协议进行用户名密码认证
auth_request模块向上游的服务转发请求,若上游服务返回的响应码是2xx,则继续执行,若上游服务返回的是401或者403则将响应返回给客户端。原理:收到请求后生成子请求,通过反向代理技术把请求传递给上游服务
access阶段的satisfy
指令
precontent
try_files file ... uri
依次查找文件,找到就返回否则返回uri或code
mirror uri
处理请求时,生成子请求访问其他服务,对子请求的返回不做处理 流量拷贝
content
root
, alias
过滤模块
sub_filter
将返回的字符串替换
add_before_body
, add_after_body
在响应前后添加内容
referer模块
简单有效的防盗链手段
场景:某网站通过url引用了你的页面,当用户在浏览器上点击url时,http请求的头部中会通过referer头部,将该网站当前页面的url带上,告诉服务器本次请求是由这个页面发起的。
目的:拒绝非正常的网站访问我们站点的资源
valid_referers
对客户端的http keepalive
功能:多个http请求通过复用TCP连接。可以减少握手次数,减少并发连接数减少了服务器资源消耗,降低TCP拥塞控制影响。
Connection头部:close/keepalive
Keep-Alive头部:timeout=n 连接至少保持多少秒