运维之道 | Nginx负载均衡、反向代理

Nginx负载均衡、反向代理

一、代理服务器

1、什么是代理服务器?
  • 客户端访问数据的时候,不会直接与目标服务器进行连接,而是所有的请求都发送到代理(Proxy)服务器,然后代理服务器会去根据你的请求去访问相应的服务器,并最终返给你你想要的数据。
  • 其实说白了代理服务器的功能就是代理网络用户去取的网络信息。相当于网络信息的中转站。
2、代理服务器有什么好处?
  • 减轻服务器负载压力
    代理服务器会把目标服务器相应的数据缓存到自己的硬盘缓冲区中去,客户端下次相同操作可以直接从代理服务器处获得数据。从而提高访问的速度。减轻服务器的压力。
  • 访问控制
    所有的Internet请求都会经过代理服务器,而不是让客户端直接访问目标服务器,这么做隐藏了目标服务器的IP,保证了服务器的安全。防止恶意攻击。
  • 负载均衡
    可以充当负载均衡服务器,均衡的分发请求,平衡集群中各个服务器的负载压力。

二、反向 VS 正向

代理服务器又分为正向代理和反向代理,那这两种代理方式有什么区别呢?

正向代理(Forward Proxy)

在这里插入图片描述
代理服务器和客户端在一个LAN内,代理客户端收发请求,使真是的客户端对服务器不可见。对外相当一个客户端。

反向代理(Reverse Proxy)

在这里插入图片描述
代理服务器和服务器在一个LAN内,替服务器收发请求,使真是的服务器地址对客户端不可见。这样代理服务器对外就表现为一个服务器。


三、Nginx反向代理服务器搭建

实现效果

打开浏览器,在浏览器地址栏输入地址 www.zwl.com,跳转到 linux 系统 tomcat 主页面中;

方法一、使用proxy_pass转发、不添加upstream模块

1. 修改hosts配置文件
[root@localhost ~]# vi /etc/hosts

127.0.0.1  www.zwl.com
2.在 nginx 进行请求转发的配置(反向代理配置)
   server {
        listen   80;                             ///设置为80端口
        server_name  www.zwl.com;                ///访问域名

        location / {
           root   html/zwl1;
           proxy_pass  http://127.0.0.1:8080;    ///转发配置
            index  index.html index.htm;
        }
3.反向代理测试

如上配置,我们监听 80 端口,访问域名为 www.zwl.com,不加端口号时默认为 80 端口,故访问该域名时会跳转到 127.0.0.1:8080 路径上。在浏览器端输入 www.zwl.com 结果如下:
在这里插入图片描述


方法二、使用upstream、proxy_pass模块(负载均衡)

1. 修改hosts配置文件
[root@localhost ~]# vi /etc/hosts

127.0.0.1  www.zwl.com
2.在 nginx 进行请求转发的配置(反向代理配置)
   upstream villian{                             ///添加upstream模块
     server 192.168.146.131:8080 weight=1 max_fails=2 fail_timeout=30s;       ///8080
     server 192.168.146.131:8081 weight=1 max_fails=2 fail_timeout=30s;       ///8081
   }
###########################################################################
   server {
        listen   80;                             ///设置为80端口
        server_name  www.zwl.com;                ///访问域名
###########################################################################
        location / {
           root   html/zwl1;
           proxy_pass  http://villian;           ///转发配置
           index  index.html index.htm;
        }
3.反向代理测试

如上配置,我们监听 80 端口,访问域名为 www.zwl.com,不加端口号时默认为 80 端口,故访问该域名时会跳转到 127.0.0.1:8080 路径上。在浏览器端输入 www.zwl.com 结果如下:
在这里插入图片描述


方法三、根据访问路径跳转到不同的端口服务

1、环境准备
  • 在Linux中安装部署 Nginx(port-80)、Tomcat(port-8080)、Tomcat(port-8081)
[root@#localhost local]# ls
nginx  tomcat8080  tomcat8081
2、修改端口映射IP
[root@#localhost ~]# cat /etc/hosts
192.168.219.128 www.zwl.com
3、修改Nginx反向代理配置
[root@#localhost conf]# cat nginx.conf
worker_processes  1;
events {
    worker_connections  1024;
}
###################################################
http {
    include       mime.types;
    default_type  application/octet-stream;
    sendfile        on;
    keepalive_timeout  65;
####################################################
    server {
        listen       80;
        server_name  www.zwl.com;
###################`反向代理配置`####################     
  location / {
            root   html;
            index  index.html index.htm;
}

  location ~ /edu/ {
		proxy_pass http://localhost:8080;
}
  
  location ~ /vod/ {
		proxy_pass http://localhost:8081;
}
####################################################
    }
}
4、Tomcat(port-8080)新建jsp动态资源
[root@#localhost edu]# pwd
/usr/local/tomcat8080/webapps/ROOT/edu			///tomcat8080端口路径
[root@#localhost edu]# ls
java.jsp
[root@#localhost edu]# cat java.jsp 			///jsp测试代码

<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<HTML>
    <HEAD>
        <TITLE>JSP Test Page</TITLE>
    </HEAD>
    <BODY>
      <%
        Random rand = new Random();
        out.println("<h1>Random Tomcat port-8080 number:</h1>");
	    out.println("<h1>刷新数字即可变化</h1>");
        out.println(rand.nextInt(99)+100);
      %>
    </BODY>
</HTML>
5、Tomcat(port-8081)新建jsp动态资源
[root@#localhost vod]# pwd
/usr/local/tomcat8081/webapps/ROOT/vod			///tomcat8081端口路径
[root@#localhost vod]# ls
java.jsp
[root@#localhost vod]# cat java.jsp  			///jsp测试代码
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<HTML>
    <HEAD>
        <TITLE>JSP Test Page</TITLE>
    </HEAD>
    <BODY>
      <%
        Random rand = new Random();
        out.println("<h1>Random Tomcat port-8081 number:</h1>");
	    out.println("<h1>刷新数字即可变化</h1>");
        out.println(rand.nextInt(99)+100);
      %>
    </BODY>
</HTML>

6、分别启动tomcat8080、Tomcat8081服务
[root@#localhost edu]# /usr/local/tomcat8080/bin/startup.sh 
Using CATALINA_BASE:   /usr/local/tomcat8080
Using CATALINA_HOME:   /usr/local/tomcat8080
Using CATALINA_TMPDIR: /usr/local/tomcat8080/temp
Using JRE_HOME:        /usr
Using CLASSPATH:       /usr/local/tomcat8080/bin/bootstrap.jar:/usr/local/tomcat8080/bin/tomcat-juli.jar
Tomcat started.
[root@#localhost vod]# /usr/local/tomcat8081/bin/startup.sh 
Using CATALINA_BASE:   /usr/local/tomcat8081
Using CATALINA_HOME:   /usr/local/tomcat8081
Using CATALINA_TMPDIR: /usr/local/tomcat8081/temp
Using JRE_HOME:        /usr
Using CLASSPATH:       /usr/local/tomcat8081/bin/bootstrap.jar:/usr/local/tomcat8081/bin/tomcat-juli.jar
Tomcat started.
7、测试反向代理根据不同路径访问不同端口资源
  • Tomcat 8080:http://www.zwl.com/edu/java.jsp
    在这里插入图片描述
  • Tomcat 8080:http://www.zwl.com/vod/java.jsp
    在这里插入图片描述

Nginx官方配置教程


转载至:https://cloud.tencent.com/developer/article/1339493
转载至:https://blog.csdn.net/qq_40036754/article/details/102463099#_Nginx___12_274

发布了97 篇原创文章 · 获赞 10 · 访问量 3413

猜你喜欢

转载自blog.csdn.net/VillianTsang/article/details/103411976
今日推荐