nginx 配置反向代理

nginx 配置反向代理

基本概念

代理:代替处理

正向代理

正向代理方式是指用代理服务器来代替内部网络中的计算机(配置好代理服务器的 IP)发出 Internet 上的连接请求,然后将请求结果返回给他们。

反向代理

反向代理方式是指用代理服务器来接受 Internet 上的连接请求,然后将请求转发给内部网络中的上游服务器,并将从上游服务器得到的结果返回给 Internet 上请求连接的客户端,此时代理服务器对外的表现就是一个 Web 服务器。充当反向代理服务器也是 Nginx 的一种常见用法。

正向代理、反向代理区别

  • 正向代理代理客户端,反向代理代理服务端。
  • 正向代理隐藏客户端,反向代理隐藏服务端。

练习

下面练习配置 nginx 反向代理,让 nginx 充当反向代理服务器。

  1. 部署 travel 项目 到被代理服务器 tomcat

    删除 tomcat 自带项目
        cd /usr/local/tomcat/apache-tomcat-7.0.57/webapps  
        rm -rf ./*
    
    将 travel 项目打包成 ROOT.war
        修改 finalName
        <finalName>ROOT</finalName>
        打包
        mvn package
        注:打成 ROOT.war 的好处是在 tomcat 中部署后,不需要去输入项目名称访问。
    
    上传 ROOT.war
        cd /usr/local/tomcat/apache-tomcat-7.0.57/webapps
        rz
    
    启动 tomcat
        cd /usr/local/tomcat/apache-tomcat-7.0.57/bin
        ./startup.sh
    
    访问 ROOT 项目
        本地火狐浏览器地址栏输入:192.168.214.128:8080
    
  2. 配置反向代理服务器 nginx

    在 nginx 配置文件 nginx.conf 中:
    
    # upstream 定义了一个上游服务器的集群(这里只有一个上游服务器),便于反向代理中的 proxy_pass 使用
    upstream tomcat-travel {
        server 192.168.214.128:8080; # 被代理服务器的 ip 和端口
    }
    
    server {
        listen       80; 
        server_name  www.hmtravel.com;
    
        location / {
            proxy_pass http://tomcat-travel; # 引用上面 upstream 中的 tomcat-travel
            index  index.html index.htm;
        }
    
        error_page   500 502 503 504  /50x.html;
    
        location = /50x.html {
            root   html;
        }
    }
    
  3. 启动反向代理服务器 nginx

    cd /usr/local/nginx/sbin
    ./nginx
    
  4. 访问 travel 项目

    直接访问被代理服务器上的 travel 项目
        本地火狐浏览器地址栏输入 http://192.168.214.128:8080
    
    通过反向代理服务器访问 travel 项目
        本地火狐浏览器地址栏输入 http://wwww.hmtravel.com
    

nginx 基于反向代理/转发的负载均衡

基本概念

服务器集群

多个 tomcat 上部署同一个项目,同时对外提供服务,就形成了 tomcat 的集群。

好处:
    增强并发能力
    避免单点故障

负载均衡

如果服务器集群中的计算机性能都一样,那么应该做到每一个被访问的几率一样,这就是负载均衡。

练习

下面练习使用 nginx 实现基于反向代理/转发的负载均衡。

部署 travel 项目到 3 个 tomcat

需要在 3 台不同的机器上安装 tomcat,部署同一个 travel 项目。

但是为了学习方便,现在将 3 个 tomcat 安装在同一台机器上。

这台机器上之前已经通过解压安装了一份 tomcat,解压在 /usr/local/tomcat/apache-tomcat-7.0.57,
并且已经上传了 travel 项目,
因此再安装 3 份 tomcat 并部署 travel 的做法如下:

1. 停止 tomcat
    cd /usr/local/tomcat/apache-tomcat-7.0.57/bin
    ./shutdown.sh

2. 复制 3 份
    cd /usr/local/tomcat
    cp -r apache-tomcat-7.0.57 tomcat1
    cp -r apache-tomcat-7.0.57 tomcat2
    cp -r apache-tomcat-7.0.57 tomcat3

3. 修改端口
    3.1 修改 tomcat1 端口
        cd /usr/local/tomcat/tomcat1/conf
        vim server.xml

        设置忽略大小写
        :set ignorecase

        查找 port
        /port

        按 n 查找下一个,按 N 查找上一个

        将查找到的所有端口值 + 1(一共修改 5 个)

        保存退出

    3.2 修改 tomcat2 端口
        同样的方法,将对应配置文件中查找到的端口值 + 2

    3.3 修改 tomcat3 端口
        同样的方法,将对应配置文件中查找到的端口值 + 3

4. 启动 3 个tomcat
    cd /usr/local/tomcat/tomcat1/bin
    ./startup.sh

    cd /usr/local/tomcat/tomcat2/bin
    ./startup.sh

    cd /usr/local/tomcat/tomcat3/bin
    ./startup.sh

配置反向代理服务器 nginx

nginx 配置文件 nginx.conf 中:

# upstream 定义了一个上游服务器的集群
upstream tomcat-travel {
    # 向这 3 台上游服务器转发的几率相同,都为 1/3
    server 192.168.214.128:8081; # 被代理服务器 tomcat1 的 ip 和端口
    server 192.168.214.128:8082; # 被代理服务器 tomcat2 的 ip 和端口
    server 192.168.214.128:8083; # 被代理服务器 tomcat3 的 ip 和端口
}

server {
    listen       80; 
    server_name  www.hmtravel.com;



    location / {
        proxy_pass http://tomcat-travel; # 引用上面 upstream 中的 tomcat-travel
        index  index.html index.htm;
    }


    error_page   500 502 503 504  /50x.html;

    location = /50x.html {
        root   html;
    }

}

启动 nginx 或 重新加载 nginx 配置文件

cd /usr/local/nginx/sbin
./nginx
或
cd /usr/local/nginx/sbin
./nginx -s reload

通过反向代理服务器访问 travel 项目

本地火狐浏览器地址栏输入 http://www.hmtravel.com,可以访问到 travel 项目。
这个 travel 项目来自 tomcat1,也可能来自 tomcat2,还有可能来自 tomcat3,几率相等。 

验证负载均衡

  1. 区分 travel 项目

    为了验证访问 3 个 tomcat 的几率相同,故意将部署在 3 个 tomcat 里的 travel 项目变得不一样。
    
    将部署在 tomcat1 里的travel 项目的首页 index.html 的标题改为 tomcat1
    将部署在 tomcat2 里的travel 项目的首页 index.html 的标题改为 tomcat2
    将部署在 tomcat3 里的travel 项目的首页 index.html 的标题改为 tomcat3
    
    注:html 的修改不必重启 tomcat
    
  2. 再通过反向代理服务器访问 travel 项目

    本地火狐浏览器地址栏输入 http://www.hmtravel.com,可以访问到 travel 项目。 
    非常快地刷新 n 次,能够看出 tomcat1,tomcat2,tomcat3 的比例接近 1:1:1。
    
  3. 修改负载均衡配置

    将来 tomcat1 tomcat2 tomcat3 会部署在不同的机器上。假设 tomcat3 所在机器是新买的,性能较好。希望 tomcat3 接受 50% 访问量,tomcat1,tomcat2 分别接受 25% 访问量。可以修改 nginx 配置文件 nginx.conf 进行配置。

     

    # upstream 定义了一个上游服务器的集群
    upstream tomcat-travel {
        # 向这 3 台上游服务器转发的几率相同,都为 1/3
        server 192.168.214.128:8081; # 被代理服务器 tomcat1 的 ip 和端口
        server 192.168.214.128:8082; # 被代理服务器 tomcat2 的 ip 和端口
        server 192.168.214.128:8083 weight=2; # 被代理服务器 tomcat3 的 ip 和端口
    }
    
    server {
        listen       80; 
        server_name  www.hmtravel.com;
    
    
    
        location / {
            proxy_pass http://tomcat-travel; # 引用上面 upstream 中的 tomcat-travel
            index  index.html index.htm;
        }
    
    
        error_page   500 502 503 504  /50x.html;
    
        location = /50x.html {
            root   html;
        }
    
    }
    
  4. 重新加载 nginx 配置文件

    cd /usr/local/nginx/sbin
    ./nginx -s reload
    
  5. 通过反向代理服务器访问 travel 项目

    本地火狐浏览器地址栏输入 http://www.hmtravel.com,可以访问到 travel 项目。
    非常快地刷新 n 次,能够看出 tomcat1,tomcat2,tomcat3 的比例接近 1:1:2。
posted @ 2020-09-03 17:31  学习java进行时  阅读(300)  评论(0编辑  收藏  举报