Nginx
Nginx (engine x) 是一个高性能的HTTP和反向代理web服务器,同时也提供了IMAP/POP3/SMTP服务。
基本概念
正向代理
正向代理是一个位于客户端和目标服务器之间的代理服务器(中间服务器)。为了从原始服务器取得内容,客户端向代理服务器发送一个请求,并且指定目标服务器,之后代理向目标服务器转交并且将获得的内容返回给客户端。正向代理的情况下客户端必须要进行一些特别的设置才能使用。
反向代理
反向代理隐藏了真实的服务端,当我们请求 www.baidu.com 的时候,就像拨打10086一样,背后可能有成千上万台服务器为我们服务,但具体是哪一台,你不知道,也不需要知道,你只需要知道反向代理服务器是谁就好了,www.baidu.com 就是我们的反向代理服务器,反向代理服务器会帮我们把请求转发到真实的服务器那里去。Nginx就是性能非常好的反向代理服务器,用来做负载均衡。
负载均衡
负载均衡(Load Balance),意思是将负载(工作任务,访问请求)进行平衡、分摊到多个操作单元(服务器,组件)上进行执行。是解决高性能,单点故障(高可用),扩展性(水平伸缩)的终极解决方案。
动静分离
动静分离:动态资源(jsp、ftl、thymeleaf)与静态资源(js、css、img)分开部署。
前后分离
前后分离:接口与视图分开部署,专业的人做专业的事情。例如:前端使用vue.js ,后端只需要提供接口即可。前端项目与后端项目都是独立部署的。
高可用
为了解决Nginx可能会随时宕机导致服务器无法访问。
因此出现了配置两台Ngix来放置其中一台宕机导致服务器崩溃。并且对外提供一个虚拟IP地址
Nginx开始
Nginx安装
Windows下只需要再官网下载解压即可使用
Linux则需要安装一些依赖
Nginx基本指令
start nginx
开启nginx
nginx -s stop
:stop表示立即停止nginx,不保存相关信息
nginx -s quit
:quit表示正常退出nginx,并保存相关信息
nginx -s reload
:重启(因为改变了配置,需要重启)
注意:
windows的Nginx必须去安装目录下打开nginx.exe
不然会报错找不到文件
Nginx配置文件
虚拟主机的配置server
1 | server { |
Nginx代理
反向代理实例
再conf/nginx.conf
中,再HTTP对象中添加此配置
1 | server { |
当我们访问localhost:9000
时,会反向代理到bilibili
去
语法
再location
中又几个参数
1 | location [ = | ~ | ~* | ^~ ] uri { |
=
:用于匹配不含正则表达式的uri,uri和请求字符串要严格匹配~
:用于匹配包含正则表达式的uri,并且区分大小写~*
:用于匹配包含正则表达式的uri,并且不区分大小写^~
:用于匹配不含正则表达式的uri,要求Nginx服务器找到标识uri和请求字符串匹配最高的loaction
Nginx负载均衡
负载均衡实例
再HTTP对象中添加
1 | upstream serverName { |
当访问localhost:80
时请求会被轮流分配给已经配置好的服务器
负载均衡的几种分配服务器的策略
轮询
:每个请求按时间顺序逐一分配到不同的服务器,默认weight
:weight代表权重默认为1,权重越高被分配的客户端越多ip_hash
:每个请求按访问ip的hash结果分配,这样每个访客固定访问一个服务器fair
:按服务器响应时间来分配请求,响应时间短的有限分配
Nginx分离
动静分离实例
1 | location /www/ { |
设置缓存(需自行百度)
Nginx配置高可用集群
Nginx高可用实例
- 需要两台服务器
- 两台服务器都需要安装Nginx和keepalived
Nginx原理
Nginx启动会又一个master主进程和一个或以上的worker进程
当client发送请求给master,master地下的worker就会争抢任务,抢到任务的worker就会把内容返回给client
一个master多个worker的好处
- 可以使用
nginx -s reload
热部署,利用nginx进行热部署操作 - 每个worker是独立的进程,如果一个worker出现问题,其他worker会继续进行争抢,实现请求过程,不会造成服务器中断
- CPU有多少核就设置多少个worker最为合适
连接数worker connection
发送请求,占用worker的连接数要么是2个或者4个。一次请求和响应就是2个连接数
普通的静态访问最大并发数是
worker_connections * worker_process / 2
如果是HTTP作为方向代理来说,最大并发数一个是
worker_connections * worker_process / 4