文件结构

#全局块
#user nobody;
worker_processes 1;

#event块
events {
worker_connections 1024;
}

#http块
http {
#http全局块
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
#server块
server {
#server全局块
listen 8000;
server_name localhost;
#location块
location / {
root html;
index index.html index.htm;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
#这边可以有多个server块
server {
...
}
}

Nginx 的主配置文件是 nginx.conf,这个配置文件一共由三部分组成,分别为全局块、events 块和 http 块。在 http 块中,又包含 http 全局块、多个 server 块。每个 server 块中,可以包含 server 全局块和多个 location 块。在同一配置块中嵌套的配置块,各个之间不存在次序关系。

配置文件支持大量可配置的指令,绝大多数指令不是特定属于某一个块的。同一个指令放在不同层级的块中,其作用域也不同,一般情况下,高一级块中的指令可以作用于自身所在的块和此块包含的所有低层级块。如果某个指令在两个不同层级的块中同时出现,则采用“就近原则”,即以较低层级块中的配置为准。比如,某指令同时出现在 http 全局块中和 server 块中,并且配置不同,则应该以 server 块中的配置为准。

全局块

全局块是默认配置文件从开始到 events 块之间的一部分内容,主要设置一些影响 Nginx 服务器整体运行的配置指令,因此,这些指令的作用域是 Nginx 服务器全局。

通常包括配置运行 Nginx 服务器的用户(组)、允许生成的worker process 数、Nginx 进程 PID 存放路径、日志的存放路径和类型以及配置文件引入等。

events 块

events 块涉及的指令主要影响Nginx 服务器与用户的网络连接。常用到的设置包括是否开启对多 worker process 下的网络连接进行序列化,是否允许同时接收多个网络连接,选取哪种事件驱动模型处理连接请求,每个 worker process 可以同时支持的最大连接数等。

这一部分的指令对 Nginx 服务器的性能影响较大,在实际配置中应该根据实际情况灵活调整。

http 块

http 块是 Nginx 服务器配置中的重要部分,代理、缓存和日志定义等绝大多数的功能和第三方模块的配置都可以放在这个模块中。

前面已经提到,http 块中可以包含自己的全局块,也可以包含 server 块,server 块中又可以进一步包含location块,在本书中我们使用“http 全局块”来表示 http 中自己的全局块,即 http 块中不包含在 server 块中的部分。

可以在 http 全局块中配置的指令包括文件引入、MIME-Type 定义、日志自定义、是否使用 sendfile 传输文件、连接超时时间、单连接请求数上限等。

Server 块的 server_name

多用同一端口号,根据不同 host 进入不同的匹配

server_name 与 host 匹配优先级如下:

1、完全匹配

2、通配符在前的,如*.test.com

3、在后的,如www.test.*

4、正则匹配,如~^.www.test.com$

如果都不匹配

1、优先选择 listen 配置项后有 default 或 default_server 的

2、找到匹配 listen 端口的第一个 server 块

Location 匹配规则

  • “=”,用于标准 uri 前,要求请求字符串与 uri 严格匹配。如果已经匹配成功,就停止继续向下搜索并立即处理此请求。
  • ^~:如果这个匹配使用^〜前缀,搜索停止。这个前缀官网和网上都说得很含糊,加上这个前缀,是会停止搜索正则匹配,但是对一般匹配是不会停止的,也就是说还是可以匹配到一般匹配的
  • “~”,用于表示 uri 包含正则表达式,并且区分大小写。
  • “~*”,用于表示 uri 包含正则表达式,并且不区分大小写。注意如果 uri 包含正则表达式,就必须要使用“~”或者“~*”标识。

**nginx 的 location 匹配规则:**https://blog.csdn.net/luoyang_java/article/details/83507193

Location 块的 proxy_pass 重定向

root 定义到文件夹 lias 是一个目录别名的定义,root 则是最上层目录的定义。

index 自定义打开文件

location / {
root html;
index index.html index.htm;
}

当用户请求 / 地址时,Nginx 就会自动在 root 配置指令指定的文件系统目录下依次寻找 index.htm 和 index.html 这两个文件。如果 index.htm 文件存在,则直接发起“内部跳转”到 /index.htm 这个新的地址;而如果 index.htm 文件不存在,则继续检查 index.html 是否存在。如果存在,同样发起“内部跳转”到/index.html;如果 index.html 文件仍然不存在,则放弃处理权给 content 阶段的下一个模块

配置文件后

配置文件后需要重启 nginx 配置文件才能起作用

nginx -s reload

  1. 如果不行需要把后台的残留 nginx 进程删除后再尝试(保存原有的配置文件)
  2. 切换局域网,避免网络缓存和堵塞

tips

Nginx 常见的面试题:限流、正向、反向代理、负载均衡策略

https://zhuanlan.zhihu.com/p/272859061

proxy_pass 代理

https://blog.csdn.net/NIEEPN/article/details/104826499