系列文章目录
`
目录
- 系列文章目录
- 一、Nginx的反向代理
- 1.代理含义
- 2.反向代理配置模块
- 二、
- 1.动静分离
- 2.负载均衡实验
- 总结
一、Nginx的反向代理
1.代理含义
正向代理
正向代理,指的是通过代理服务器 代理浏览器/客户端去重定向请求访问到目标服务器 的一种代理服务。
正向代理服务的特点是代理服务器 代理的对象是浏览器/客户端,也就是对于目标服务器 来说浏览器/客户端是隐藏的
反向代理
反向代理,指的是浏览器/客户端并不知道自己要访问具体哪台目标服务器,只知道去访问代理服务器 ,代理服务器再通过反向代理 +负载均衡实现请求分发到应用服务器的一种代理服务。
反向代理服务的特点是代理服务器 代理的对象是应用服务器,也就是对于浏览器/客户端 来说应用服务器是隐藏的。
2.反向代理配置模块
七层反向代理:(基于http协议)
http {
upstream 服务器组名称 {
server IP1:PORT [weight=1 …];
server IP2:PORT;
…
调度算法(rr轮询/加权轮询,least_conn最小连接,ip_hash,url_hash,fair);
}
server {
location ~ … {
proxy_pass http://服务器组名称;
proxy_set_header HosT $host;
proxy_set_header X-Real-Ip $remote addr;
proxy_set_header X-Forwarded-For $proxy add x forwarded for;
}
}
}
四层反向代理: (基于IP端口)
和http块同一级,一般配置在http块上面
stream {
upstream 服务器组名称 {
server IP1:PORT;
server IP2:PORT;
server IP3:PORT;
…
}
server {
listen 监听端口;
server_name 网站主机名;
proxy_pass 服务器组名称;
}
}
upstream里面定义ip地址和端口号
location定义访问路径
pro1、反向代理负载均衡调度算法
①轮询算法
默认算法是轮询算法即反向代理服务器处理用户请求时,每个后端服务器都轮流给。
upstream wj{ server http://192.168.169.10;
server http://192.168.169.20;
}
②加权轮询算法
在默认轮询的基础上增加权重,weight=number。如果后端有2个服务器其中一个配置权重为weight=3另外一个不配置默认是1,则有用户访问时分配给给有权重的服务器和不配置权重的服务器的比例为3:1。
upstream wj{ server http://192.168.169.10 weight=3;
server http://192.168.169.20;
}
③最小连接数算法
按照nginx反向代理服务器和后端服务器的连接数分配请求,连接越少的分配处理请求优先级越高。例如若最小连接数(least_conn;)是设置是3,后端服务器1有2个请求在处理,而后端服务器2只有一个请求在处理则新请求交给后端服务器2。
upstream wj{ least_conn;
server http://192.168.169.10;
server http://192.168.169.20;
}
④ip、url 哈希算法
每个请求按访问ip或者url的hash结果分配,这样每个访客固定访问一个后端服务器,不需要知道是如何计算的,只要了解会固定访问一个后端服务器即可。
⑤响应时间fair算法
需要解读nginx第三方模块ngx_http_upstream_fair_module实现,配置时max_fails=number为后端服务器配置,默认单位为秒,按照响应时间来处理请求,响应时间越短越优先分配
二、
1.动静分离
2.负载均衡实验
测试静态页面效果
浏览器访问 http://192.168.169.30/1.html
实验开始部署一个nginx服务三个tomcat服务
开始前所有主机都要关防火墙和安全机制
vim /usr/local/nginx/conf/nginx.conf
......
http {
......
#gzip on;
#配置负载均衡的服务器列表,weight参数表示权重,权重越高,被分配到的概率越大
upstream tomcat_server {
server 192.168.169.10:8080 weight=1;
server 192.168.169.10:8081 weight=1;
server 192.168.169.20:8080 weight=1;
server {
listen 80;
server_name www.kgc.com;
charset utf-8;
#access_log logs/host.access.log main;
#配置Nginx处理动态页面请求,将 .jsp文件请求转发到Tomcat 服务器处理
location ~ .*\.jsp$ {
proxy_pass http://tomcat_server;
#设置后端的Web服务器可以获取远程客户端的真实IP
##设定后端的Web服务器接收到的请求访问的主机名(域名或IP、端口),默认HOST的值为proxy_pass指令设置的主机名。如果反向代理服务器不重写该请求头的话,那么后端真实服务器在处理时会认为所有的请求都来自反向代理服务器,如果后端有防攻击策略的话,那么机器就被封掉了。
proxy_set_header HOST $host;
##把$remote_addr赋值给X-Real-IP,来获取源IP
proxy_set_header X-Real-IP $remote_addr;
##在nginx 作为代理服务器时,设置的IP列表,会把经过的机器ip,代理机器ip都记录下来
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
#配置Nginx处理静态图片请求
location ~ .*\.(gif|jpg|jpeg|png|bmp|swf|css)$ {
root /usr/local/nginx/html/img;
expires 10d;
}
location / {
root html;
index index.html index.htm;
}
......
}
......
}