Nginx代理——正向、反向代理,动静分离和负载均衡(下)

本文涉及的产品
网络型负载均衡 NLB,每月750个小时 15LCU
应用型负载均衡 ALB,每月750个小时 15LCU
传统型负载均衡 CLB,每月750个小时 15LCU
简介: Nginx代理——正向、反向代理,动静分离和负载均衡(下)

-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


使用浏览器访问代理服务器,发现成功跳转,反向代理配置成功


20210607101317979.png


二、基于Nginx反向代理的负载均衡


(1)负载均衡概述


作用: 提升服务器群集的请求吞吐率,提升服务器群集的整体性能,提高冗余

负载均衡分为两种:


按范围划分的负载均衡GSLB。


原理: 按范围划分,去分配给用户指定的服务器


例如: 公司的业务覆盖面积很广,从山西省到广东省都有web服务器,这个时候就会有相应的调度中心节点,而用户访问的是这个调度中心节点,然后节点通过用户所在的地区,划分给距离用户最近的服务器,这个就是按范围划分的

20210607101348380.png


全局负载均衡SLB

全局负载均衡按层级划分,分为传输层和应用层的负载均衡,传输层为协议,应用层为服务


Nginx就是一个典型的七层SLB,LVS是四层的SLB,Haproxy四层和七层都支持


例如:客户端访问Ngxin代理服务器,Nginx代理服务器通过指定的算法来分配服务器去接受请求


20210607101359671.png


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,发现网页会进行轮询显示

2021060710144846.png


(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 #重载

使用浏览器访问代理服务器,查看是否只出现一个页面


20210607101500737.png

只出现了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的页面

20210607101511595.png

现在关闭203的web服务器,再次进行访问

20210607101520221.png


发现出现了204的页面,说明204备份服务器已经在进行负载均衡


三、配置Nginx动静分离


(1)动静分离概述


动静分离:通过中间件也就是代理服务器把静态请求和动态请求进行分离,分离资源可以减少不必要的请求消耗,减少请求延迟


原理: 中间件也就Nginx代理会把动态请求转发给其他服务器,自己只处理静态请求,当然也可以把静态请求转发给后端的可以解析静态请求的web服务器 (因为Nginx默认只能处理静态页面)

20210607101530621.png

(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  


使用浏览器访问进行测试


20210607101556629.png

访问index.jsp资源查看是否能够跳转


20210607101607837.png

至此动静分离成功

相关实践学习
SLB负载均衡实践
本场景通过使用阿里云负载均衡 SLB 以及对负载均衡 SLB 后端服务器 ECS 的权重进行修改,快速解决服务器响应速度慢的问题
负载均衡入门与产品使用指南
负载均衡(Server Load Balancer)是对多台云服务器进行流量分发的负载均衡服务,可以通过流量分发扩展应用系统对外的服务能力,通过消除单点故障提升应用系统的可用性。 本课程主要介绍负载均衡的相关技术以及阿里云负载均衡产品的使用方法。
目录
相关文章
|
2月前
|
负载均衡 监控 应用服务中间件
配置Nginx反向代理时如何指定后端服务器的权重?
配置Nginx反向代理时如何指定后端服务器的权重?
160 61
|
19天前
|
缓存 Java 应用服务中间件
nginx的正向代理和反向代理以及tomcat
Nginx的正向代理和反向代理功能在不同的场景中具有重要作用,正向代理主要用于客户端访问控制和匿名浏览,而反向代理则用于负载均衡和高可用性服务。Tomcat作为Java Web应用服务器,与Nginx结合使用,可以显著提升Web应用的性能和稳定性。通过合理配置Nginx和Tomcat,可以构建高效、稳定和可扩展的Web服务架构。
103 11
|
28天前
|
存储 应用服务中间件 nginx
nginx反向代理bucket目录配置
该配置实现通过Nginx代理访问阿里云OSS存储桶中的图片资源。当用户访问代理域名下的图片URL(如 `http://代理域名/123.png`)时,Nginx会将请求转发到指定的OSS存储桶地址,并重写路径为 `/prod/files/2024/12/12/123.png`。
71 5
|
2月前
|
缓存 负载均衡 算法
如何配置Nginx反向代理以实现负载均衡?
如何配置Nginx反向代理以实现负载均衡?
|
1月前
|
负载均衡 前端开发 应用服务中间件
负载均衡指南:Nginx与HAProxy的配置与优化
负载均衡指南:Nginx与HAProxy的配置与优化
88 3
|
2月前
|
安全 应用服务中间件 网络安全
如何测试Nginx反向代理实现SSL加密访问的配置是否正确?
如何测试Nginx反向代理实现SSL加密访问的配置是否正确?
111 3
|
2月前
|
安全 应用服务中间件 网络安全
配置Nginx反向代理实现SSL加密访问的步骤是什么?
我们可以成功地配置 Nginx 反向代理实现 SSL 加密访问,为用户提供更安全、可靠的网络服务。同时,在实际应用中,还需要根据具体情况进行进一步的优化和调整,以满足不同的需求。SSL 加密是网络安全的重要保障,合理配置和维护是确保系统安全稳定运行的关键。
176 3
|
7月前
|
缓存 负载均衡 算法
解读 Nginx:构建高效反向代理和负载均衡的秘密
解读 Nginx:构建高效反向代理和负载均衡的秘密
142 2
|
6月前
|
负载均衡 算法 应用服务中间件
nginx自定义负载均衡及根据cpu运行自定义负载均衡
nginx自定义负载均衡及根据cpu运行自定义负载均衡
122 1
|
6月前
|
运维 负载均衡 算法
SLB与NGINX的异同是什么
SLB与NGINX的异同是什么
597 2