# 技术栈知识点巩固——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;
    }
} 
  • 判断是否限速。例如可能这个请求并发的连接数太多超过了限制,或者 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            

正向代理反向代理

正向代理

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

反向代理

  • 请求统一被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                       # 临时目录

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
        }
    }  
}

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 对后端节点做健康检查
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

全栈程序员

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值