一、Nginx介绍
1.1 引言
-
为什么要学习Nginx?
-
问题场景:
- 客户端到底要将请求发送至哪台服务器?
- 如果所有请求都发送到了服务器1,那么其他的服务器貌似都没什么用
服务器搭建集群后:
服务器搭建集群后,使用Nginx做反向代理服务器
1.2 Nginx背景
- Nginx是由俄罗斯人研发的,应对Rambler的网站,并且2004年发布了第一个版本
- Nginx的特点:
- 稳定性极强。7*24小时不间断运行。
- Nginx提供了非常丰富的配置实例。
- 占用内存小,并发能力强
- 能承受5w并发
二、Nginx安装(重点来喽)
2.1 安装Nginx
思路:使用docker在linux服务器上安装,如果没有docker可参考 ↓↓↓(温馨提示:超简单)
https://blog.csdn.net/Object_de_Father/article/details/109427164
下面我们撸起袖子开始干代码:
version: '3.1'
services:
nginx:
restart: always
image: daocloud.io/library/nginx:1.13.0-alpine
container_name: nginx
ports:
- 80:80
2.2 Nginx的配置文件
user nginx;
worker_processes 1; //这个值的大小和并发量有关系,值越大支持并发量越大
error_log /var/log/nginx/error.log warn;
pid /var/run/nginx.pid;
events {
worker_connections 1024;//这个值的大小和并发量有关系,值越大支持并发量越大
}
http {
include /etc/nginx/mime.types;
default_type application/octet-stream;
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
access_log /var/log/nginx/access.log main;
sendfile on;
#tcp_nopush on;
keepalive_timeout 65;
#gzip on;
- nginx.conf 1/32 3%
2.3修改Docker-compose文件
version: '3.1'
services:
nginx:
restart: always
container_name: nginx
ports:
- 80:80
volumes:
- /root/app/nginx/conf.d/:/ect/nginx/conf.d
三、Nginx的反向代理
3.1 正向代理
- 正向代理时由客户端设立的。
- 客户端了解代理服务器和目标服务器都是谁。
- 帮助咱们突破访问权限,提高访问的速度,对目标服务器隐藏客户端的ip地址。
3.2 反向代理
- 反向代理服务器适配实在服务端的。
- 客户端是不知道访问的到底是哪一台服务器。
- 达到负载均衡,并且可以隐藏服务器真正的ip地址
3.3 基于Nginx实现反向代理
- 准备一个目标服务器(tomcat)。
- 编写nginxdd的配置文件,通过nginx访问到tomcat服务器
server{
listen 80;
server_name localhost;
#基于反向代理访问到tomcat服务器
location / {
proxy_pass http://网址:8080/;
}
}
3.4 关于Nginx的location路径映射
# 1.精准匹配,例如www.baidu.com就能匹配到,www.baidu.com/×××就不行
location = / {
# 匹配和定制规则完全相同的路径,优先级最高
}
# 2.通用匹配
location /××× {
# 匹配所有以/×××开头的路径
}
#3.正则匹配
location ~/××× {
# 匹配所有以/×××开头的路径,优先级要高于通用匹配
}
#4.匹配开头路径
location ^~ /laojiang/{
# 匹配所有以laojiang开头的路径,优先级高于正则匹配
}
#5.匹配指定格式路径
~*\.(gif|jpg|png)$ {
# 匹配以gif或者jpg或者png为结尾的路径
}
四、Nginx的负载均衡
4.1 Nginx默认提供了三种负载均衡策略:
-
轮询法
- 将客户端发起的请求,平均的分配给每一台服务器。
-
加权法
- 会将客户端的请求,根据服务器的权重值不同,分配不同的数量。
-
ip_hash法(源hash法)
- 基于发起请求的客户端的ig地址不同,他始终会将请求发送到指定的服务器上。|
4.2 轮询法
-
想要实现Nginx轮询负载均衡机制只需在文件中添加以下内容
upstream 自定义名称 { server 路径(ip:port); server 路径(ip:port); ... } server{ listen 80; server_name localhost; location / { proxy_pass http://上面upstream的名称/; } }
4.3 加权法
-
实现加权法的方式。在轮询法的基础之上进行
upstream 自定义名称 { server 路径(ip:port) weight 加权数;//这里就是和轮询法重要的区别 server 路径(ip:port) weight 加权数; ... }
4.4 ip_hash法(源hash法)
-
实现ip_hash法(源hash法)的方式。在轮询法的基础之上进行
upstream 自定义名称 { ip_hash; //加在在这里哦 server 路径(ip:port); server 路径(ip:port); ... }
五、Nginx的动静分离
- Nginx的并发公式:
- worker_processes * connections / 4 | 2 =Nginx最终的并发能力
- 原因:动态资源需要 / 4 ,静态资源需要 / 2
- Nginx通过动静分离,来提升Nginx的并发能力,更快的给用户响应
5.1 动态资源代理
# 配置如下
location / {
proxy_pass 路径;
}
5.2 静态资源代理
# 配置如下
location / {
root 静态资源路径;
index 默认访问路径下的什么资源;
autoindex on; #代表以列表的形式展示静态资源下的全部内容
}