-Nginx反向代理示例
******(1)继续上面的进度,只需要修改一下代理服务器Nginx的配置文件即可 [root@rzy conf]# vim /usr/local/nginx/conf/nginx.conf 1 worker_processes 1; 2 events { 3 worker_connections 1024; 4 } 5 http { 6 include mime.types; 7 default_type application/octet-stream; 8 sendfile on; 9 keepalive_timeout 65; 10 server { 11 listen 80; 12 server_name localhost; 13 location / { 14 root html; 15 index index.html index.htm; 16 proxy_pass http://192.168.100.203:8080; #修改代理 17 } 18 } 19 } [root@rzy conf]# systemctl restart nginx ******(2)然后修改web服务器的Nginx配置文件 [root@rzy02 html]# vim /usr/local/nginx/conf/nginx.conf 1 worker_processes 1; 2 events { 3 worker_connections 1024; 4 } 5 http { 6 include mime.types; 7 default_type application/octet-stream; 8 sendfile on; 9 keepalive_timeout 65; 10 log_format main '$remote_addr - $remote_user [$time_local] "$request" ' 11 '$status $body_bytes_sent "$http_referer" ' 12 '"$http_user_agent" "$http_x_forwarded_for"'; 13 14 access_log logs/access.log main; 15 server { 16 listen 8080; #修改端口号 17 server_name www.aaa.com; 18 index index.html index.htm; 19 root html; 20 location ~ .*\.(jpg|gif|png)$ { 21 allow 192.168.100.202; 22 deny all; 23 root html; 24 } 25 } 26 } [root@rzy02 html]# systemctl restart nginx
使用浏览器访问代理服务器,发现成功跳转,反向代理配置成功
二、基于Nginx反向代理的负载均衡
(1)负载均衡概述
作用: 提升服务器群集的请求吞吐率,提升服务器群集的整体性能,提高冗余
负载均衡分为两种:
按范围划分的负载均衡GSLB。
原理: 按范围划分,去分配给用户指定的服务器
例如: 公司的业务覆盖面积很广,从山西省到广东省都有web服务器,这个时候就会有相应的调度中心节点,而用户访问的是这个调度中心节点,然后节点通过用户所在的地区,划分给距离用户最近的服务器,这个就是按范围划分的
全局负载均衡SLB
全局负载均衡按层级划分,分为传输层和应用层的负载均衡,传输层为协议,应用层为服务
Nginx就是一个典型的七层SLB,LVS是四层的SLB,Haproxy四层和七层都支持
例如:客户端访问Ngxin代理服务器,Nginx代理服务器通过指定的算法来分配服务器去接受请求
1、实验环境
- Nginx负载均衡需要使用proxy_pass代理模块来进行配置,可以说有负载均衡就一定配置了反向代理,但是配置了反向代理不一定配置了负载均衡
- 负载均衡使用的区域:upstream区域
语法: upstream name { }
可配置的区域: http
系统 | ip地址 | 主机名 | 扮演角色 | Nginx版本 |
Centos7.4 | 192.168.100.202 | rzy | 代理服务器 | Nginx-1.18.0 |
Centos7.4 | 192.168.100.203 | rzy02 | 后端web服务器 | Nginx-1.18.0 |
Centos7.4 | 192.168.100.203 | rzy03 | 后端web服务器 | Nginx-1.18.0 |
2、实验目的
配置rzy反向代理,并且配置rzy02和rzy03负载均衡,可以来回切换页面
3、实验步骤
-rzy配置
******(1)先做基础配置 [root@Centos7 ~]# hostnamectl set-hostname rzy s[root@Centos7 ~]# su [root@rzy ~]# systemctl stop firewalld [root@rzy ~]# setenforce 0 setenforce: SELinux is disabled [root@rzy ~]# mount /dev/cdrom /mnt/ mount: /dev/sr0 写保护,将以只读方式挂载 mount: /dev/sr0 已经挂载或 /mnt 忙 /dev/sr0 已经挂载到 /mnt 上 ******(2)上传Nginx源码包,进行安装 [root@rzy ~]# yum -y install zlib-devel pcre-devel #安装依赖包 。。。。。。 完毕! [root@rzy ~]# ll 总用量 1020 -rw-------. 1 root root 1264 1月 12 18:27 anaconda-ks.cfg -rw-r--r-- 1 root root 1039530 4月 23 23:55 nginx-1.18.0.tar.gz [root@rzy ~]# tar xf nginx-1.18.0.tar.gz -C /usr/src/ [root@rzy ~]# cd /usr/src/nginx-1.18.0/ [root@rzy nginx-1.18.0]# useradd -M -s /sbin/nologin nginx [root@rzy nginx-1.18.0]# ./configure --prefix=/usr/local/nginx --user=nginx --group=nginx --with-http_stub_status_module && make && make install [root@rzy nginx-1.18.0]# ln -s /usr/local/nginx/sbin/nginx /usr/local/sbin/ #做软连接,优化Nginx的命令执行路径 [root@rzy nginx-1.18.0]# vim /usr/lib/systemd/system/ngxin.service #编写启动脚本 [Unit] Description=nginx After=network.target [Service] Type=forking PIDFile=/usr/local/nginx/logs/nginx.pid ExecStart=/usr/local/nginx/sbin/nginx ExecReload=/usr/local/nginx/sbin/nginx -s reload ExecStop=/usr/local/nginx/sbin/nginx -s stop PrivateTmp=true [Install] WantedBy=multi-user.target [root@rzy system]# systemctl start nginx [root@rzy system]# netstat -anpt | grep nginx tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 17474/nginx: master [root@rzy conf]# cp nginx.conf nginx.conf.bak #做一份配置文件的备份 [root@rzy conf]# sed -i '/#/d' nginx.conf #删除注释行和空行 [root@rzy conf]# sed -i '/^$/d' nginx.conf ******(3)修改配置文件 1 worker_processes 1; 2 events { 3 worker_connections 1024; 4 } 5 http { 6 include mime.types; 7 default_type application/octet-stream; 8 sendfile on; 9 keepalive_timeout 65; 10 upstream aaa { #配置负载均衡的区域 11 server 192.168.100.203:80 weight=5; #加入两个web服务器的ip和端口,配置weight权重,权重相同,为轮询方式 12 server 192.168.100.204:80 weight=5; 13 } 14 server { 15 listen 80; 16 server_name localhost; 17 location / { 18 proxy_pass http://aaa; #配置代理,跳转到指定区域。区域名称要和上面配置的负载均衡的区域名称相同 19 root html; 20 index index.html index.htm; 21 } 22 error_page 500 502 503 504 /50x.html; 23 location = /50x.html { 24 root html; 25 } 26 } 27 } [root@rzy conf]# nginx -t nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful [root@rzy conf]# nginx -s reload #重载nginx使配置文件生效
-rzy02和rzy03的配置
******(1)做基础配置,安装Nginx,和rzy相同(略) ******(2)分别在两台web服务器上编写两个不同的网页 #rzy02配置 [root@rzy02 ~]# cd /usr/local/nginx/html/ [root@rzy02 html]# echo "web1" > index.html #编写网页 [root@rzy02 html]# systemctl start nginx #rzy03配置 [root@rzy03 ~]# cd /usr/local/nginx/html/ [root@rzy03 html]# echo "web2" > index.html [root@rzy03 html]# systemctl start nginx
使用浏览器访问代理服务器rzy,发现网页会进行轮询显示
(5)Nginx负载均衡状态配置
后端服务器在负载均衡调度中的状态:
状态 | 概述 |
down | 表示当前的服务器已经挂掉了,不参与负载均衡,代理将不会把请求发送给当前服务器 |
backup | 表示备份的服务器,正常状态下不参与负载均衡,但是当负载均衡的服务器有一台挂掉的话,backup服务器就会顶上去 |
max_fails | 表示允许负载均衡的服务器请求失败的次数,达到次数后此服务器将不再参与负载均衡,通常与fail_timeout配合使用 |
fail_timeout | 在经过max_fails失败后,等待的时间,时间过了之后会继续参与负载均衡 |
max_conns | 限制负载均衡服务器的最大接受连接的数量,一般会给性能不好的服务器进行设置,防止服务器压力过大 |
max_fails和fail_timeout配合使用,可以防止服务器压力过大,因为当服务器压力过大之后,并发达到最大限度,这个时候就会有连接请求失败,失败达到一定次数,服务器就会先拒绝连接请求,然后处理已经接受的请求,经过等待时间后才会再次进行负载均衡。
语法: 在upstream区域中的server后面加状态即可
-测试backup和down状态下的负载均衡
******(1)修改rzy的主配置文件,配置测试down状态 [root@rzy ~]# vim /usr/local/nginx/conf/nginx.conf 1 worker_processes 1; 2 events { 3 worker_connections 1024; 4 } 5 http { 6 include mime.types; 7 default_type application/octet-stream; 8 sendfile on; 9 keepalive_timeout 65; 10 upstream aaa { 11 server 192.168.100.203:80 weight=5 down; #把203变为down的状态,不进行负载均衡 12 server 192.168.100.204:80 weight=5; 13 } 14 server { 15 listen 80; 16 server_name localhost; 17 location / { 18 proxy_pass http://aaa; 19 root html; 20 index index.html index.htm; 21 } 22 error_page 500 502 503 504 /50x.html; 23 location = /50x.html { 24 root html; 25 } 26 } 27 } [root@rzy ~]# nginx -s reload #重载
使用浏览器访问代理服务器,查看是否只出现一个页面
只出现了204服务器的页面,说明203已经不参与负载均衡
******(2)修改配置文件,测试backup状态 [root@rzy ~]# vim /usr/local/nginx/conf/nginx.conf 1 worker_processes 1; 2 events { 3 worker_connections 1024; 4 } 5 http { 6 include mime.types; 7 default_type application/octet-stream; 8 sendfile on; 9 keepalive_timeout 65; 10 upstream aaa { 11 server 192.168.100.203:80 weight=5; 12 server 192.168.100.204:80 weight=5 backup; #修改204为备份状态 13 } 14 server { 15 listen 80; 16 server_name localhost; 17 location / { 18 proxy_pass http://aaa; 19 root html; 20 index index.html index.htm; 21 } 22 error_page 500 502 503 504 /50x.html; 23 location = /50x.html { 24 root html; 25 } 26 } 27 } [root@rzy ~]# nginx -s reload #重载
现在访问代理服务器,发现只能访问203的页面
现在关闭203的web服务器,再次进行访问
发现出现了204的页面,说明204备份服务器已经在进行负载均衡
三、配置Nginx动静分离
(1)动静分离概述
动静分离:通过中间件也就是代理服务器把静态请求和动态请求进行分离,分离资源可以减少不必要的请求消耗,减少请求延迟
原理: 中间件也就Nginx代理会把动态请求转发给其他服务器,自己只处理静态请求,当然也可以把静态请求转发给后端的可以解析静态请求的web服务器 (因为Nginx默认只能处理静态页面)
(2)配置Nginx的动静分离
1、实验环境
只是为了看到效果,所以这里都使用Nginx
系统 | ip | 主机名 | 软件包 | 扮演角色 |
Centos7.4 | 192.168.100.202 | proxy | Nginx1.18.0 | 代理服务器 |
Centos7.4 | 192.168.100.203 | nginx | Nginx1.18.0 | 静态web |
Centos7.4 | 192.168.100.204 | nginx-02 | Nginx1.18.0 | 动态web |
2、实验目的
客户端通过代理服务器可以访问动态页面和静态页面
3、实验步骤
-proxy配置
******(1)先做基础配置 [root@Centos7 ~]# hostnamectl set-hostname proxy [root@Centos7 ~]# su [root@proxy ~]# systemctl stop firewalld [root@proxy ~]# setenforce 0 setenforce: SELinux is disabled [root@proxy ~]# mount /dev/cdrom /mnt/ mount: /dev/sr0 写保护,将以只读方式挂载 mount: /dev/sr0 已经挂载或 /mnt 忙 /dev/sr0 已经挂载到 /mnt 上 ******(2)上传Nginx源码包进行安装 [root@proxy ~]# ll 总用量 1020 -rw-------. 1 root root 1264 1月 12 18:27 anaconda-ks.cfg -rw-r--r-- 1 root root 1039530 4月 25 18:29 nginx-1.18.0.tar.gz [root@proxy ~]# tar xf nginx-1.18.0.tar.gz -C /usr/src/ [root@proxy ~]# cd /usr/src/nginx-1.18.0/ [root@proxy nginx-1.18.0]# yum -y install zlib-devel pcre-devel [root@proxy nginx-1.18.0]# useradd -M -s /sbin/nologin nginx [root@proxy nginx-1.18.0]# ./configure --prefix=/usr/local/nginx --user=nginx --group=nginx --with-http_stub_status_module && make && make install #配置编译安装 [root@proxy nginx-1.18.0]# ln -s /usr/local/nginx/sbin/nginx /usr/local/sbin/ #优化执行路径 [root@proxy nginx-1.18.0]# vim /lib/systemd/system/nginx.service [Unit] Description=nginx After=network.target [Service] Type=forking PIDFile=/usr/local/nginx/logs/nginx.pid ExecStart=/usr/local/nginx/sbin/nginx ExecReload=/usr/local/nginx/sbin/nginx -s reload ExecStop=/usr/local/nginx/sbin/nginx -s stop PrivateTmp=true [Install] WantedBy=multi-user.target [root@proxy nginx-1.18.0]# systemctl start nginx [root@proxy nginx-1.18.0]# netstat -anpt | grep nginx tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 3714/nginx: master ******(3)修改配置文件 [root@proxy nginx-1.18.0]# cd /usr/local/nginx/conf/ [root@proxy conf]# cp nginx.conf nginx.conf.bak [root@proxy conf]# sed -i '/#/d' nginx.conf [root@proxy conf]# sed -i '/^$/d' nginx.conf [root@proxy conf]# vim nginx.conf 1 worker_processes 1; 2 events { 3 worker_connections 1024; 4 } 5 http { 6 include mime.types; 7 default_type application/octet-stream; 8 sendfile on; 9 keepalive_timeout 65; 10 upstream static { #配置两个复杂均衡,把静态和动态分开 11 server 192.168.100.203:80 weight=5; 12 } 13 upstream java { 14 server 192.168.100.204:80 weight=5; 15 } 16 server { 17 listen 80; 18 server_name localhost; 19 location / { #配置区域,默认调转到静态的负载均衡 20 root html; 21 index index.html; 22 proxy_pass http://static; 23 } 24 location ~ .*\.(jsp|gif|png|css)$ { #匹配资源,有以.jsp、gif等为后缀的资源跳转到动态的负载均衡 25 proxy_pass http://java; 26 } 27 } 28 } #保存退出 [root@proxy conf]# nginx -t nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful [root@proxy conf]# nginx -s reload
-动态web和静态web的配置
******(1)nginx的配置,静态web #进行基础配置、上传Nginx源码包进行安装(略) #修改配置文件,编写网页目录 1 worker_processes 1; 2 events { 3 worker_connections 1024; 4 } 5 http { 6 include mime.types; 7 default_type application/octet-stream; 8 sendfile on; 9 keepalive_timeout 65; 10 server { 11 listen 80; 12 server_name localhost; 13 location / { 14 root html; 15 index index.html; 16 } 17 } 18 } #保存退出 [root@nginx ~]# systemctl start nginx [root@nginx ~]# netstat -anpt | grep nginx tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 1129/nginx: master [root@nginx ~]# echo "static" > /usr/local/nginx/html/index.html ******(2)Nginx-02的配置,动态web #进行基础配置,上传Nginx源码包进行安装(略) #修改配置文件,编写带有png格式的图片的页面 [root@nginx-02 ~]# vim /usr/local/nginx/conf/nginx.conf 1 worker_processes 1; 2 events { 3 worker_connections 1024; 4 } 5 http { 6 include mime.types; 7 default_type application/octet-stream; 8 sendfile on; 9 keepalive_timeout 65; 10 server { 11 listen 80; 12 server_name localhost; 13 location / { 14 root html; 15 index index.jsp; #修改解析页面,匹配代理服务器的资源匹配从而跳转到此服务器 16 } 17 } #保存退出 [root@nginx-02 ~]# cd /usr/local/nginx/html/ [root@nginx-02 html]# mv index.html index.jsp [root@nginx-02 html]# echo "java" > index.jsp [root@nginx-02 html]# systemctl start nginx [root@nginx-02 html]# netstat -anpt | grep nginx tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 1139/nginx: master
使用浏览器访问进行测试
访问index.jsp资源查看是否能够跳转
至此动静分离成功