# 配置块的嵌套 ``` http { upstream {} split_clients {} map {} geo {} server { if() {} location { limit_except{} } location { location {} } } server { } } ``` # 指令继承,由内到外,向上覆盖 ``` server { listen 8080; root /home/geek.nginx/html; access_log logs/geek.access.log main; location /test { root /home/geek/nginx/test access_log logs/access.tet.log main; } location /dlib { alias dlib; } location / {} } ``` # 接受请求内部处理机制 操作系统内核→事件模块→HTTP模块 # HTTP模块请求处理 接受`URI`→分配请求内存池→状态机解析请求行→分配大内存→状态机解析请求行→标识`URI`→状态机解析header→分配大内存→标识header→移除超时定时器→开始11个阶段的http请求处理 # 正则表达式 元字符 | 代码 | 说明 | | ---- | ------------------------ | | . | 除了换行符之外的任意字符 | | \w | 字母、数字、下划线、汉子 | | \s | 空白 | | \d | 数字 | | \b | 单词的开始或结束 | | ^ | 字符串开始 | | $ | 字符串结束 | 重复 | 代码 | 说明 | | ----- | ---------------- | | * | 重复零次或很多次 | | + | 重复一次或很多次 | | ? | 重复零次或一次 | | {n} | 重复n次 | | {n,} | 重复n次或更多 | | {n,m} | 重复n到m次 | - `\`:取消元字符的特殊含义 - `()`分组与取值 # server_name指令 指令后可以跟多个域名,第一个是主域名 ``` *表示泛域名:server_name *.darren.tech 正则表达式之前加~前缀:server_name www.darren.tch ~www\d+\.darren\.tech$ ``` # HTTP请求处理的11个阶段 - POST_READ - SERVER_REWRITE - `FIND_CONFIG` - REWRITE - POST_REWRITE - `PREACCESS` - ACCESS - POST_ACCESS - `PRECONTENT` - CONTENT - LOG # location的匹配规则