第一部分: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
2
3
4
location /a/ {
alias /c/x/a;
}
# 如果请求/a/test.json,会变成/c/x/a/test.json

include 用来指定主配置文件包含的其他扩展配置文件。可以出现在location块、server块任何位置。