我是靠谱客的博主 甜美小白菜,这篇文章主要介绍Nginx常见语法梳理,现在分享给大家,希望可以做个参考。

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等应用层信息的负载均衡。

  • 七层负载
    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Rg3vVcub-1630572338304)(nginx.assets/image-20210902122702767.png)]

  • 四层负载
    在这里插入图片描述

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
4
user USERNAME [GROUP] user nginx nginx; # 用户是 nginx;组是 nginx
  • pid

指定运行 Nginx master 主进程的 pid 文件存放路径。

复制代码
1
2
pid /opt/nginx/logs/nginx.pid # master主进程的的 pid 存放在 nginx.pid 的文件
  • worker_rlimit_nofile_number

指定 worker 子进程可以打开的最大文件句柄数。

复制代码
1
2
worker_rlimit_nofile 20480; # 可以理解成每个 worker 子进程的最大连接数量。
  • worker_rlimit_core

指定 worker 子进程异常终止后的 core 文件,用于记录分析问题。

复制代码
1
2
3
worker_rlimit_core 50M; # 存放大小限制 working_directory /opt/nginx/tmp; # 存放目录
  • worker_processes_number

指定 Nginx 启动的 worker 子进程数量。

复制代码
1
2
3
worker_processes 4; # 指定具体子进程数量 worker_processes auto; # 与当前 CPU 物理核心数一致
  • worker_cpu_affinity

将每个 worker 子进程与我们的 CPU 物理核心绑定。

复制代码
1
2
worker_cpu_affinity 0001 0010 0100 1000; # 4个物理核心,4个 worker 子进程

3.1.2 events

  • use

Nginx 使用何种事件驱动模型。

复制代码
1
2
3
4
use method; # 不推荐配置它,让 Nginx 自己选择 method 可选值为:select、poll、kqueue、epoll、/dev/poll、eventport
  • worker_connections

worker 子进程能够处理的最大并发连接数。

复制代码
1
2
worker_connections 1024 # 每个子进程的最大连接数为 1024
  • accept_mutex

是否打开负载均衡互斥锁。

复制代码
1
2
accept_mutex on # 默认是 off 关闭的,这里推荐打开
  • server_name 指令

指定虚拟主机域名。

复制代码
1
2
3
4
5
server_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
2
include /usr/local/lnmp/nginx/conf.d/*.conf; # 加载子配置项
  • access_log
复制代码
1
2
3
access_log /var/log/nginx/access.log access; # Nginx 访问日志存放位置 error_log /var/log/nginx/error.log error;
  • location

配置路径

复制代码
1
2
3
4
location [ = | ~ | ~* | ^~] uri { ... }

匹配规则:

  • = 精确匹配

  • ~ 正则匹配,区分大小写

  • ~ * 正则匹配,不区分大小写

  • ^~ 匹配到即停止搜索

    复制代码
    1
    2
    匹配的优先级: = > ^~ > ~ > ~* > ~ > 不带任何字符
  • location 中的反斜线

复制代码
1
2
3
4
5
6
7
8
location /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
12
useradd -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常见语法梳理内容请搜索靠谱客的其他文章。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(62)

评论列表共有 0 条评论

立即
投稿
返回
顶部