# 技术栈知识点巩固——Nginx
Posted 爱码代码的喵
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了# 技术栈知识点巩固——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 资源缓存
- 对于静态资源比如图片,
js
,css
等文件,我们则在反向代理服务器nginx
中进行缓存。这样浏览器在请求一个静态资源时,代理服务器nginx
就可以直接处理,无需将请求转发给后端服务器进行处理。
Nginx 负载均衡策略
轮询
- 每个请求按时间顺序逐一分配到不同的服务器,如果后端服务器宕机能够自动剔除。
Ip 哈希
- 每个请求按照访问
ip
的hash
结果分配,每个访客固定访问一个后端服务器,可以解决session
共享的问题 - 实际场景下,一般不考虑使用
ip_hash
解决session
共享
最少连接
- 下一个请求将被分派到活动连接数量最少的服务器
Nginx 后端服务健康检查
- 利用
nginx
自带模块ngx_http_proxy_module
和ngx_http_ipstream_module
对后端节点做健康检查
以上是关于# 技术栈知识点巩固——Nginx的主要内容,如果未能解决你的问题,请参考以下文章