# 技术栈知识点巩固——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 资源缓存

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

Nginx 负载均衡策略

轮询

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

Ip 哈希

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

最少连接

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

Nginx 后端服务健康检查

  • 利用 nginx自带模块 ngx_http_proxy_modulengx_http_ipstream_module 对后端节点做健康检查

以上是关于# 技术栈知识点巩固——Nginx的主要内容,如果未能解决你的问题,请参考以下文章

# 技术栈知识点巩固——Mybatis

# 技术栈知识点巩固——Mybatis

# 技术栈知识点巩固——Css

# 技术栈知识点巩固——Css

# 全栈开发学习文档

# 技术栈知识点巩固——Java