Nginx反向代理服务器
Nginx介绍
1.引言
为什么要学习Nginx
问题1:客户端发送的请求到那个服务器
问题2:发送的请求都到了服务器1
问题3:客户端发出的请求有可能是动态资源的,也有申请静态资源的
服务器搭建集群后
搭建集群后,使用Nginx做反向代理
2.Nginx介绍
Nginx是由俄罗斯人研发的,应对Ramber网站,在2004年发布的第一个版本
Nginx的特点
- 1.稳定性极强。7*24时不间断运行
- 2.Nginx提供了非常丰富的配置实例
- 3.占用内存小,并发能力强
Nginx安装
1.安装Nginx
version: '3.1'
services:
nginx:
restart: always
image: daocloud.io/library/nginx:latest
container_name: nginx
ports:
- 80:80
2.Nginx的配置文件
关于Nginx的核心配置文件nginx.conf
worker_processes 1;
error_log /var/log/nginx/error.log warn;
pid /var/run/nginx.pid;
# 以上统称为全局块,
# worker_processes他的数值越大,Nginx的并发能力越强
# error_log代表Nginx的错误日志存放的位置
events {
worker_connections 1024;
}
# events块
# worker_connections他的数值越大,Nginx的并发越强
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;
include /etc/nginx/conf.d/*.conf;
}
# http块
# include代表引入一个外部文件 ->/mime.types中放着大量的媒体类型
# include /etc/nginx/conf.d/*.conf;-> 引入了conf.d目录下的以.conf为结尾的配置文件
- /etc/nginx/conf.d/*.conf
server {
listen 80;
listen [::]:80;
server_name localhost;
location / {
root /usr/share/nginx/html;
index index.html index.htm;
}
# location块
# root:将接收到的请求根据/usr/share/nginx/html去查找静态资源
# index:默认去上述路径中找到index.html或者index.htm
# server块
# listen:代表Nginx监听的端口号
# localhost:代表Nginx接收请求的ip
}
3.修改docker-compose文件
version: '3.1'
services:
nginx:
restart: always
image: daocloud.io/library/nginx:latest
container_name: nginx
ports:
- 80:80
volumes:
- /opt/docker_nginx/conf.d/:/etc/nginx/conf.d
Nginx的反向代理
1.正向代理和反向代理介绍
正向代理:
- 1.正向代理服务时,由客户端设立
- 2.客户端都了解代理服务器和目标服务器是谁
- 3.可以突破访问权限,提高访问的速度,对目标服务器隐藏客户端的ip地址
反向代理:
- 1.反向代理服务器是配置在服务端的
- 2.客户端不知道访问的是哪台服务器
- 3.实现负载均衡,并且隐藏真正服务器端的ip地址
2.基于Nginx实现反向代理
准备一个目标服务器
启动之前的tomcat服务器
编写nginx配置文件,通过Nginx访问到tomcat服务器
server{
listen 80;
server_name localhost;
# 基于反向代理访问到Tomcat服务器
location / {
proxy_pass http://192.168.100.18:8080/;
}
#location / {
# root /usr/share/nginx/html;
# index index.html index.htm;
# }
}
3.关于Nginx的location路径映射
优先级关系
(location =) > (location /xxx/yyy/zzz) > (location ^~) > (location ,*) > (location /起始路径) > (location /)
# 1.精准匹配
location = / {
#精准匹配主机名后面不能带有任何的字符串
}
# 2.通用匹配
location /xxx {
#匹配所有以/xxx 开头的路径
}
# 3.正则匹配
location ~ /xxx {
#匹配所有以/xxx 开头的路径
}
# 4.匹配开头路径
location ^~ /images/ {
#匹配所有以/images 开头的路径
}
# 5. ^* \.(gif|jpg|png)$ {
#匹配所有以gif|jpg|png为结尾的路径
}
Nginx负载均衡
Ngnix为我们默认提供了三种负载均衡的策略
- 1.轮询:
将客户端发起的请求,平均分给每一台服务器- 2.权重:
会将客户端的请求,根据服务器的权重值不同,分配不同的数量- 3.ip_hash:
基于发起请求的客户端的ip地址不同,他始终会将请求发送到指定的服务器上
1.轮询
实现轮询负载均衡只需要在配置文件中修改内容
upstream my-server{
server 192.168.100.18:8080;
server 192.168.100.18:8081;
}
server{
listen 80;
server_name localhost;
location / {
proxy_pass http://my-server/;
}
# 基于反向代理访问到Tomcat服务器
# location / {
# proxy_pass http://192.168.100.18:8080/;
#}
#location / {
# root /usr/share/nginx/html;
# index index.html index.htm;
# }
}
2.权重
实现权重的方式
upstream my-server{
server 192.168.100.18:8080 weight=权重比例;
server 192.168.100.18:8081 weigiht=权重比例;
}
server{
listen 80;
server_name localhost;
location / {
proxy_pass http://my-server/;
}
# 基于反向代理访问到Tomcat服务器
# location / {
# proxy_pass http://192.168.100.18:8080/;
#}
#location / {
# root /usr/share/nginx/html;
# index index.html index.htm;
# }
}
3.ip_hash
ip_hash实现
upstream my-server{
ip_hash;
server 192.168.100.18:8080;
server 192.168.100.18:8081;
}
server{
listen 80;
server_name localhost;
location / {
proxy_pass http://my-server/;
}
# 基于反向代理访问到Tomcat服务器
# location / {
# proxy_pass http://192.168.100.18:8080/;
#}
#location / {
# root /usr/share/nginx/html;
# index index.html index.htm;
# }
}
Nginx动静分离
Nginx的并发能力公式
worker_process * worker_connections / 4 | 2 =Nginx最终的并发能力
动态资源需要/4,静态资源需要/2
Nginx通过动静分离,来提升Nginx的并发能力,更快的给用户的响应
1.动态资源代理
# 配置如下
location / {
proxy_pass 路径;
}
2.静态资源代理
# 配置如下
location / {
root 静态资源路径;
index 默认访问路径下的什么资源;
autoindex on; #代表展示静态资源的全部内容。以列表的形式展开
}
先修改docker,添加一个数据卷,映射到Nginx服务器的一个目录上
添加了index.html和1.jpg静态资源
修改配置文件
Nginx集群
1.引言
单点故障,避免nginx宕机,导致整个程序的崩溃
准备多台nginx
准备keepalived,监听nginx的健康状况
准备haproxy提供一个虚拟的路径,统一去接收用户的请求