Nginx - HTTP模块

接收请求

image

image

Nginx在接收到请求头中的Host字段时,会和conf里面的server_name进行匹配,匹配上了之后,server_name的其他指令块就可以使用了。

HTTP请求的11个阶段

image

11个阶段

  1. POST_READ realip
  2. SERVER_REWRITE
  3. FIND_CONFIG
  4. REWRITE
  5. POST_REWRITE
  6. PREACCESS limit_conn, limit_req
  7. ACCESS auth_basic, access, auth_request
  8. POST_ACCESS
  9. PRECONTENT try_files
  10. CONTENT index, concat, 反向代理
  11. LOG access_log
    image

realip

  • 如何拿到真实的用户IP地址
    image

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,忽略参数
image

preaccess

limit_conn

限制并发连接数,生效范围:全部worker进程(基于共享内存)
limit_conn_zone key zone=name:size
limit_conn zone number

limit_req

限制每个客户端每秒处理请求数,生效算法:leaky bucket
image

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

过滤模块

image

sub_filter将返回的字符串替换
add_before_body, add_after_body在响应前后添加内容

referer模块

简单有效的防盗链手段
场景:某网站通过url引用了你的页面,当用户在浏览器上点击url时,http请求的头部中会通过referer头部,将该网站当前页面的url带上,告诉服务器本次请求是由这个页面发起的。
目的:拒绝非正常的网站访问我们站点的资源
valid_referers
image

对客户端的http keepalive

功能:多个http请求通过复用TCP连接。可以减少握手次数,减少并发连接数减少了服务器资源消耗,降低TCP拥塞控制影响。
Connection头部:close/keepalive
Keep-Alive头部:timeout=n 连接至少保持多少秒

posted @ 2023-08-08 14:45  rachel_aoao  阅读(46)  评论(0编辑  收藏  举报