Nginx学习笔记
第一部分:Nginx学习必知
Nginx是一个以高性能、高并发著称的HTTP服务器,它支持HTTP(HyperText Transfer Protocol,超文本传输协议)反向代理、TCP(Transmission Control Protocol,传输控制协议)代理、负载均衡、HTTP缓存及Web开发等。
HTTP请求报文
1、请求行,包括请求方法、请求URL(Uniform Resource Locator,统一资源定位符)、HTTP及其版本号。
- HTTP1.1 (PUT、DELETE、CONNECT、OPTIONS、TRACE、PATCH)兼容HTTP1.0
- HTTP1.0 (GET、HEAD、POST)等
2、请求头、指客户端向服务器传输请求时附加的一些信息,有key/value组成,使用:隔开。常见key(Cookie、User_Agent、Accept-Encoding)等。
3、请求体、一般由POST请求方法进行提交,可以传输图片、文件或者字符串等。
HTTP相应报文
1、响应行、包含HTTP版本号、状态码、状态码描述。
| 响应码 | 描述 |
|---|---|
| 1XX | 表示已经被接受,正在继续处理。这种响应时临时响应,不会返回响应体。 |
| 2XX | 表示请求被服务器接受并已经完成出来过程。 |
| 3XX | 重定向,告知客户端需要继续执行操作才可以完成请求。 |
| 4XX | 出现问题,和客户端有关。比如401权限问题、404 URL不存在。 |
| 5XX | 出现问题,和服务端有关。比如500内部错误、504请求超时 |
2、响应头,为响应报文附加额外信息,常见响应头key由Content-Type 和 Content-Encoding。
3、响应体,请求返回到客户端的正文数据。
第二部分:Nginx基础配置
指令介绍
1、简单指令:由名称和参数组成,以空格分隔,以分号结尾。(类似变量)
2、指令块:由名称和大括号{}内的附件指令组成,不以分号结尾。
简单指令在指令块中的配置存在一定区段。有些 简单指令不能在某些指令块中使用;有的可以在http块中也可以在server块中,甚至可以在location块中进行配置。当某个变量同时出现在多个指令块中,最终以最小指令块中赋值为准。
client_boby_timeout 可以在 http、server及location块中设置、server_names_hash_bucket_size 只能出现在http块中。
- server_name 支持使用通配符正则表达式,支持配置多域名、服务名称。
如果存在多个、优先级如下:
1、精准的名字
2、以开头的最长通配符名称。eg .domian.com
3、以结尾的最长通配符名称。eg domian.
4、按照未见顺序,第一个匹配到正则表达式
5、如果没有匹配到对应的server_name,则访问default_server
- URL 在location块中的匹配规则及优先级
| location地址 | 描述信息 |
|---|---|
| location = /url | = 表示精确匹配 |
| location ^~ /url | ^~匹配以某个URL前缀开头的请求,不支持正则表达式 |
| location ~ | ~ 区分大小写的匹配,属于正则表达式 |
| location ~* | ~* 不区分大小写的匹配,属于正则表达式 |
| location /url | 表示前缀匹配,不带修饰符,但是优先级没有正则表达式高 |
| location / | 通用匹配,默认找不到其他匹配时,会进行统配匹配 |
| location @ | 命名空间,不提供常规的请求匹配 |
- 只能出现location块的指令
internal:表示该location块支持Nginx内部的请求访问,比如支持 rewrite、error_page等重定向,但不能通过外部的HTTP直接访问。
limit_except:限定该location块可以执行HTTP方法,比如GET。
alias:定义指定位置替换
1 | location /a/ { |
include 用来指定主配置文件包含的其他扩展配置文件。可以出现在location块、server块任何位置。