1、nginx 简介
nginx可以在高并发量业务场景做web服务器,也可以在网络模型中的四层或七层作为负载均衡器使用。nginx与apache核心区别在于:apache是同步多进程模型,一个连接对应一个进程;nginx是异步的,多个连接(万级单位)可以对应一个进程。
1.1 nginx 负载均衡
目前的很多设备已经支持 OSI 模型中的二层、三层、四层和七层的负载均衡:
- 二层,基于网络接口的负载均衡(MAC地址)
- 三层,基于服务器 IP 地址的负载均衡(IP地址)
- 四层,基于 TCP/UDP 端口的负载均衡,(nginxàstream模块)
- 七层,应用层负载均衡,如 URL、HTTP 表头等(nginxàupstream模块)
所谓四层就是基于IP+端口的负载均衡,通过虚拟IP+端口接收请求,然后再分配到真实的服务器;七层通过虚拟的URL或主机名接收请求,然后再分配到真实的服务器七层就是基于URL等应用层信息的负载均衡。
-
七层负载
-
四层负载
2、nginx 原理
2.1 nginx 高性能、高并发
- nginx 采用多进程+异步非阻塞方式(IO多路复用Epoll)
- 请求的完整过程:建立连接–>读取请求–>解析请求–>处理请求–>响应请求
- 请求的完整过程对应到底层就是:读写 socket 事件
2.2 http建立连接和请求处理过程
- nginx启动时,Master进程加载配置文件
- master进程,初始化监听的 socket
- master 进程,fork 出多个 worker 进程
- worker 进程,竞争新的连接,获胜方通过三次握手,建立 socket 连接,并处理请求
2.3 Nginx 的多进程结构:
多进程中的 Nginx 进程架构如下图所示,会有一个父进程(Master Process),它会有很多子进程(Child Processes)。
-
Master Process 用来管理子进程的,其本身并不真正处理用户请求。
-
- 某个子进程 down 掉的话,它会向 Master 进程发送一条消息,表明自己不可用了,此时 Master 进程会去新起一个子进程。
- 某个配置文件被修改了 Master 进程会去通知 work 进程获取新的配置信息,这也就是我们所说的热部署。
-
子进程间是通过共享内存的方式进行通信的。
2.4 配置文件 reload 重载原理
- 向 master 进程发送 HUP 信号(reload 命令);
- master 进程检查配置语法是否正确;
- master 进程打开监听端口;
- master 进程使用新的配置文件启动新的 worker 子进程;
- master 进程向老的 worker 子进程发送 QUIT 信号;
- 老的 worker 进程关闭监听句柄,处理完当前连接后关闭进程;
- 整个过程 Nginx 始终处于平稳运行中,实现了平滑升级,用户无感知;
2.5 Nginx 模块化管理机制
Nginx 的内部结构是由核心部分和一系列的功能模块所组成。这样划分是为了使得每个模块的功能相对简单,便于开发,同时也便于对系统进行功能扩展。Nginx 的模块是互相独立的,低耦合高内聚。
3、nginx 配置
3.1 nginx配置文件
nginx配置文件大致分三部分:main全局、events块、http块。
- main 全局块:全局配置,对全局生效。
- 比如:worker_processes 1; 设置可以支持的并发处理量数。
- events块:配置影响nginx服务器与用户的网络连接。
- worker_connections 1024; 支持的最大连接数。
- http块: 配置代理,缓存,日志定义等绝大多数功能和第三方模块的配置。
- server 块:配置虚拟主机的相关参数,一个 http 块中可以有多个 server 块。
- location块:配置请求路由,以及各种页面的处理情况。
3.1.1 main 全局配置参数
- user
指定运行 Nginx 的 woker 子进程的属主和属组,其中组可以不指定。
1
2
3
4user USERNAME [GROUP] user nginx nginx; # 用户是 nginx;组是 nginx
- pid
指定运行 Nginx master 主进程的 pid 文件存放路径。
1
2pid /opt/nginx/logs/nginx.pid # master主进程的的 pid 存放在 nginx.pid 的文件
- worker_rlimit_nofile_number
指定 worker 子进程可以打开的最大文件句柄数。
1
2worker_rlimit_nofile 20480; # 可以理解成每个 worker 子进程的最大连接数量。
- worker_rlimit_core
指定 worker 子进程异常终止后的 core 文件,用于记录分析问题。
1
2
3worker_rlimit_core 50M; # 存放大小限制 working_directory /opt/nginx/tmp; # 存放目录
- worker_processes_number
指定 Nginx 启动的 worker 子进程数量。
1
2
3worker_processes 4; # 指定具体子进程数量 worker_processes auto; # 与当前 CPU 物理核心数一致
- worker_cpu_affinity
将每个 worker 子进程与我们的 CPU 物理核心绑定。
1
2worker_cpu_affinity 0001 0010 0100 1000; # 4个物理核心,4个 worker 子进程
3.1.2 events
- use
Nginx 使用何种事件驱动模型。
1
2
3
4use method; # 不推荐配置它,让 Nginx 自己选择 method 可选值为:select、poll、kqueue、epoll、/dev/poll、eventport
- worker_connections
worker 子进程能够处理的最大并发连接数。
1
2worker_connections 1024 # 每个子进程的最大连接数为 1024
- accept_mutex
是否打开负载均衡互斥锁。
1
2accept_mutex on # 默认是 off 关闭的,这里推荐打开
- server_name 指令
指定虚拟主机域名。
1
2
3
4
5server_name name1 name2 name3 # 示例: server_name www.nginx.com;
域名匹配的四种写法:
- 精确匹配:server_name www.nginx.com ;
- 左侧通配:server_name *.nginx.com ;
- 右侧统配:server_name www.nginx.* ;
- 正则匹配:server_name ~^www.nginx.*$ ;
匹配优先级:精确匹配 > 左侧通配符匹配 > 右侧通配符匹配 > 正则表达式匹配
3.1.3 http块
- incloud
1
2include /usr/local/lnmp/nginx/conf.d/*.conf; # 加载子配置项
- access_log
1
2
3access_log /var/log/nginx/access.log access; # Nginx 访问日志存放位置 error_log /var/log/nginx/error.log error;
- location
配置路径
1
2
3
4location [ = | ~ | ~* | ^~] uri { ... }
匹配规则:
-
= 精确匹配
-
~ 正则匹配,区分大小写
-
~ * 正则匹配,不区分大小写
-
^~ 匹配到即停止搜索
复制代码1
2匹配的优先级: = > ^~ > ~ > ~* > ~ > 不带任何字符
-
location 中的反斜线
1
2
3
4
5
6
7
8location /test { ... } location /test/ { ... }
- 不带 / 当访问 www.nginx-test.com/test 时, Nginx 先找是否有 test 目录,如果有则找 test 目录下的 index.html;如果没有 test 目录,Nginx 则会找是否有 test 文件。
- 带 / 当访问 www.nginx-test.com/test 时,Nginx 先找是否有 test 目录,如果有则找 test 目录下的 index.html,如果没有它也不会去找是否存在 test 文件。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16# /etc/nginx/conf.d/proxy.conf upstream back_end { server 192.168.137.11:8081 weight=2 max_conns=1000 fail_timeout=10s max_fails=3; keepalive 32; keepalive_requests 80; keepalive_timeout 20s; } server { listen 80; server_name cmdb.oa.com; location /api/ { proxy_pass http://back_end/; } }
4、 nginx 实战
4.1 脚本安装
1
2
3
4
5
6
7
8
9
10
11
12useradd -s /sbin/nologin -M nginx [ ! -e /usr/local/lnmp ] && mkdir /usr/local/lnmp yum install -y gcc pcre pcre-devel openssl openssl-devel zlib zlib-devel wget http://nginx.org/download/nginx-1.15.2.tar.gz tar zxf nginx-1.15.2.tar.gz cd nginx-1.15.2 ./configure --prefix=/usr/local/lnmp/nginx --user=nginx --group=nginx make && make install ln -s /usr/local/lnmp/nginx/sbin/nginx /usr/local/sbin/
参考配置:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52# main 段配置信息 user nginx; # 运行用户,默认即是 Nginx,可以不进行设置 worker_processes auto; # Nginx 进程数,一般设置为和 CPU 核数一样 error_log /var/log/nginx/error.log warn; # Nginx 的错误日志存放目录 pid /var/run/nginx.pid; # Nginx 服务启动时的 pid 存放位置 # events 段配置信息 events { use epoll; # 使用 epoll 的 I/O 模型(如果你不知道 Nginx 该使用哪种轮询方法,会自动选择一个最适合你操作系统的) worker_connections 1024; # 每个进程允许最大并发数 } # http 段配置信息 # 配置使用最频繁的部分,代理、缓存、日志定义等绝大多数功能和第三方模块的配置都在这里设置 http { # 设置日志模式 log_format main '$remote_addr - $remote_user [$time_local] "$request" ' '$status $body_bytes_sent "$http_referer" ' '"$http_user_agent" "$http_x_forwarded_for"'; access_log /var/log/nginx/access.log access; # Nginx 访问日志存放位置 error_log /var/log/nginx/error.log error; sendfile on; # 开启高效传输模式 tcp_nopush on; # 减少网络报文段的数量 tcp_nodelay on; keepalive_timeout 65; # 保持连接的时间,也叫超时时间,单位秒 types_hash_max_size 2048; include /usr/local/lnmp/nginx/mime.types; # 文件扩展名与类型映射表 default_type application/octet-stream; # 默认文件类型 include /usr/local/lnmp/nginx/conf.d/*.conf; # 加载子配置项 # server段配置信息 server { listen 80; # 配置监听的端口 server_name localhost; # 配置的域名 # location段配置信息 location / { root /data/wbdocs/nginx/html; # 网站根目录 index index.html index.htm; # 默认首页文件 deny 172.168.22.11; # 禁止访问的 ip 地址,可以为 all allow 172.168.33.44;# 允许访问的 ip 地址,可以为 all } error_page 500 502 503 504 /50x.html; # 默认 50x 对应的访问页面 error_page 400 404 error.html; # 同上 } }
- /usr/local/lnmp/nginx/conf.d/ 子配置项存放处
- /usr/local/lnmp/nginx/nginx/nginx.conf 主配置文件会默认把这个文件夹中所有子配置项都引入
- /data/wbdocs/nginx/html 网站静态文件
最后
以上就是甜美小白菜最近收集整理的关于Nginx常见语法梳理的全部内容,更多相关Nginx常见语法梳理内容请搜索靠谱客的其他文章。
发表评论 取消回复