• # 技术栈知识点巩固——Nginx


    技术栈知识点巩固——Nginx

    Nginx

    • Nginx是一个Web服务器和反向代理服务器,用于Http、Https、Smtp、Pop3 和 Imap 协议,可以处理大量并发连接

    为什么使用 Nginx

    • 跨平台、配置简单、反向代理、处理高并发、处理静态文件好
    • Nginx内置的健康检查功能、节点宕机会自动更换节点
    • 节省宽带:支持GZIP压缩,可以添加浏览器本地缓存
    • 稳定性高:宕机的概率非常小
    • 接收用户请求是异步的

    Nginx 处理 Http 请求

    • 解析请求头
    • 识别由哪一个 location进行处理,匹配Url
    # 第一个 server
    server{
        # 监听的端口 80是 http 的默认端口
        listen 80;
        # 提供服务的域名主机名
        server_name  localhost;
        location / {
        	root   html;
        	index  index.html index.htm;
        }
        error_page   500 502 503 504  /50x.html;
       	location = /50x.html {
        	root   html;
        }
    } 
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 判断是否限速。例如可能这个请求并发的连接数太多超过了限制,或者 QPS 太高。
    • 连接控制,验证请求。例如可能根据 Referrer 头部做一些防盗链的设置,或者验证用户的权限。
    • 生成返回给用户的响应
    • 过滤返回给用户的响应。比如压缩响应,或者对图片进行处理。
    • Log:记录日志。

    Nginx 常用命令

    # 快速关闭Nginx,可能不保存相关信息,并迅速终止web服务。
    nginx -s stop
    # 平稳关闭Nginx,保存相关信息,有安排的结束web服务。
    nginx -s quit
    # 因改变了Nginx相关配置,需要重新加载配置而重载。
    nginx -s reload
    # 重新打开日志文件。
    nginx -s reopen  
    # 为 Nginx 指定一个配置文件,来代替缺省的。
    nginx -c filename
    # 不运行,而仅仅测试配置文件。nginx 将检查配置文件的语法的正确性,并尝试打开配置文件中所引用到的文件。
    nginx -t
    # 显示 nginx 的版本。
    nginx -v
    #显示 nginx 的版本,编译器版本和配置参数。
    nginx -V            
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16

    正向代理反向代理

    正向代理

    • 发送请求直接到达目标服务器

    反向代理

    • 请求统一被Nginx接收,nginx反向代理服务器接收到之后,按照一定的规 则分发给了后端的业务处理服务器进行处理了。

    • 可以隐藏源服务器的地址,可以提升服务器的安全。

    Nginx 的 worker 和 master 进程

    • master进程为主进程,该进程会创建Master进程和Reactor线程等工作进/线程。
    • worker进程是工作进程,所有的业务逻辑都在该进程中进行,当Reactor线程接收到来自客户端的数据后,会将数据打包通过管道发送给某个Worker进程。

    Nginx 高并发

    • 如果一个 server 采用一个进程(或者线程)负责一个 request 的方式,那么进程数就是并发数。那么显而易见的,就是会有很多进程在等待中。

    • Nginx 的异步非阻塞工作方式正是利用了这点等待的时间。在需要等待的时候,这些进程就空闲出来待命了。因此表现为少数几个进程就解决了大量的并发问题。

    Nginx目录结构

    ├── conf                             # Nginx所有配置文件的目录
    │   ├── fastcgi.conf                 # fastcgi相关参数的配置文件
    │   ├── fastcgi.conf.default         # fastcgi.conf的原始备份文件
    │   ├── fastcgi_params               # fastcgi的参数文件
    │   ├── fastcgi_params.default       
    │   ├── koi-utf
    │   ├── koi-win
    │   ├── mime.types                   # 媒体类型
    │   ├── mime.types.default
    │   ├── nginx.conf                   # Nginx主配置文件
    │   ├── nginx.conf.default
    │   ├── scgi_params                  # scgi相关参数文件
    │   ├── scgi_params.default  
    │   ├── uwsgi_params                 # uwsgi相关参数文件
    │   ├── uwsgi_params.default
    │   └── win-utf
    ├── fastcgi_temp                     # fastcgi临时数据目录
    ├── html                             # Nginx默认站点目录
    │   ├── 50x.html                     # 错误页面优雅替代显示文件,例如当出现502错误时会调用此页面
    │   └── index.html                   # 默认的首页文件
    ├── logs                             # Nginx日志目录
    │   ├── access.log                   # 访问日志文件
    │   ├── error.log                    # 错误日志文件
    │   └── nginx.pid                    # pid文件,Nginx进程启动后,会把所有进程的ID号写到此文件
    ├── proxy_temp                       # 临时目录
    ├── sbin                             # Nginx命令目录
    │   └── nginx                        # Nginx的启动命令
    ├── scgi_temp                        # 临时目录
    └── uwsgi_temp                       # 临时目录
    
    • 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

    Nginx.conf 属性

    worker_processes  1;                			 # worker进程的数量
    events {                              			 # 事件区块开始
        worker_connections  1024;          		# 每个worker进程支持的最大连接数
    }                               			# 事件区块结束
    http {                           			# HTTP区块开始
        include       mime.types;         			# Nginx支持的媒体类型库文件
        default_type  application/octet-stream;            # 默认的媒体类型
        sendfile        on;       				# 开启高效传输模式
        keepalive_timeout  65;       			# 连接超时
        server {            		                # 第一个Server区块开始,表示一个独立的虚拟主机站点
            listen       80;      			        # 提供服务的端口,默认80
            server_name  localhost;    			# 提供服务的域名主机名
            location / {            	        	# 第一个location区块开始
                root   html;       			# 站点的根目录,相当于Nginx的安装目录
                index  index.html index.htm;       	# 默认的首页文件,多个用空格分开
            }          				        # 第一个location区块结果
            error_page   500502503504  /50x.html;          # 出现对应的http状态码时,使用50x.html回应客户
            location = /50x.html {          	        # location区块开始,访问50x.html
                root   html;      		      	        # 指定对应的站点目录为html
            }
        }  
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22

    Serve location

    • location指令的作用是根据用户请求的URI来执行不同的应用,也就是根据用户请求的网站URL进行匹配,匹配成功即进行相关的操作。

    location 匹配规则

    • 注意:~ 代表自己输入的英文字母
    匹配符匹配规则优先级
    =精确匹配1
    ^~以某个字符串开头2
    ~区分大小写的正则匹配3
    ~*不区分大小写的正则匹配4
    !~区分大小写不匹配的正则5
    !~*不区分大小写不匹配的正则6
    /通用匹配,任何请求都会匹配到7

    Nginx 资源缓存

    • 对于静态资源比如图片,jscss等文件,我们则在反向代理服务器nginx中进行缓存。这样浏览器在请求一个静态资源时,代理服务器nginx就可以直接处理,无需将请求转发给后端服务器进行处理。

    Nginx 负载均衡策略

    轮询

    • 每个请求按时间顺序逐一分配到不同的服务器,如果后端服务器宕机能够自动剔除。

    Ip 哈希

    • 每个请求按照访问iphash结果分配,每个访客固定访问一个后端服务器,可以解决 session 共享的问题
    • 实际场景下,一般不考虑使用 ip_hash解决 session共享

    最少连接

    • 下一个请求将被分派到活动连接数量最少的服务器

    Nginx 后端服务健康检查

    • 利用 nginx自带模块 ngx_http_proxy_modulengx_http_ipstream_module 对后端节点做健康检查
  • 相关阅读:
    html中如何给input输入框这个一个默认值
    Day 02 python学习笔记
    【Go语言】切片的扩容
    2022最新前端vue面试题
    【RocketMQ系列十二】RocketMQ集群核心概念之主从复制&生产者负载均衡策略&消费者负载均衡策略
    云原生Kubernetes: K8S 1.29版本 部署ingress-nginx
    PowerMockito when 不生效原因
    JavaScript实现排序算法
    [AIX] IBM机器卸载java
    Docker Compose介绍和安装
  • 原文地址:https://blog.csdn.net/qq_37248504/article/details/126822208