牛骨文教育服务平台(让学习变的简单)
博文笔记

Nginx初探(3)——反向代理

创建时间:2018-03-26 投稿人: 浏览次数:278

    • 一、什么是反向代理
      • 1.1 正向代理
      • 1.2 反向代理
      • 1.3 总结
    • 二、配置反向代理
      • 2.1 准备Tomcat
      • 2.2 配置nginx


在Nginx初探(2)——配置虚拟主机学习了nginx的虚拟主机,本章介绍下nginx的反向代理。

一、什么是反向代理

1.1 正向代理

举一个通俗的例子,因为众所周知的原因,我们无法访问谷歌,但是因为某些原因,我们必须要访问谷歌,这时候我们会买一个“梯子”,既然我们无法直接访问谷歌,我们就去麻烦“梯子”帮助我们访问。

事实上我们还是没法访问谷歌,只是这个“梯子”能够访问,它只是将访问结果返回给我们而已。

这里的“梯子”就是一个正向代理,它是帮助客户端也就是我们用户来代理的。

1.2 反向代理

举个例子,你的手机号码出了点毛病,你要去找10086解决问题,但是最后接线员是谁你并不能确定,接线员是系统分配的,系统看哪位接线员有空就将你的电话转到他那边。

这里的系统其实就是一个反向代理,大家都访问10086,但是接线员每个人都不一样。

回到程序的世界中,如果www.baidu.com这个域名下的网站放在好几个服务器上(组建集群),如图所示:

用户访问www.baidu.com这个域名,但是具体访问哪一台服务器不需要用户关心,nginx会帮助我们将我们的请求转发(forward)到某一台服务器上,然后将请求返回给用户。

1.3 总结

总结一下:

  • 正向代理为客户端服务,对服务端是透明的

  • 反向代理为服务端服务,对客户端是透明的

注:透明指不用关心对端的具体实现


二、配置反向代理

上面说过nginx将请求转发给(应用)服务器,这里我们选择tomcat

2.1 准备Tomcat

我的系统里面原本就有一份tomcat:

wxs@ubuntu:/usr/local$ ls
bin  games    jdk1.8.0_161  man    redis  share  tomcat8
etc  include  lib           nginx  sbin   src    zookeeper-3.5.2-alpha

为了做实验,我复制两份,分别放置我的www.jit.comwww.wxs.com

这两个tomcat的具体配置省略,请移步:Linux部署多台Tomcat

修改两个tomcat首页以便区分:

wxs@ubuntu:/usr/local$ sudo vim tomcat8-jit/webapps/ROOT/index.jsp 
wxs@ubuntu:/usr/local$ sudo vim tomcat8-wxs/webapps/ROOT/index.jsp 



启动两个tomcat:

wxs@ubuntu:/usr/local$ su
密码: 
root@ubuntu:/usr/local# tomcat8-jit/bin/startup.sh 
Using CATALINA_BASE:   /usr/local/tomcat8-jit
Using CATALINA_HOME:   /usr/local/tomcat8-jit
Using CATALINA_TMPDIR: /usr/local/tomcat8-jit/temp
Using JRE_HOME:        /usr/local/jdk1.8.0_161/jre
Using CLASSPATH:       /usr/local/tomcat8-jit/bin/bootstrap.jar:/usr/local/tomcat8-jit/bin/tomcat-juli.jar
Tomcat started.
root@ubuntu:/usr/local# tomcat8-wxs/bin/startup.sh 
Using CATALINA_BASE:   /usr/local/tomcat8-wxs
Using CATALINA_HOME:   /usr/local/tomcat8-wxs
Using CATALINA_TMPDIR: /usr/local/tomcat8-wxs/temp
Using JRE_HOME:        /usr/local/jdk1.8.0_161/jre
Using CLASSPATH:       /usr/local/tomcat8-wxs/bin/bootstrap.jar:/usr/local/tomcat8-wxs/bin/tomcat-juli.jar
Tomcat started.

2.2 配置nginx

  1. 注释掉 location节点中的root子节点
  2. 在location子节点中新增proxy_pass节点,值为要转发的url名字(任意起一个)
  3. 新增一个upstream节点,名字为刚刚设置的url名字
  4. 在upstream中新增server子节点,值为目标服务器IP

另一个同理,如下:

upstream jit {
        server 192.168.30.149:8090;
    }
    server {
        listen       80;
        server_name  www.jit.com;

        #charset koi8-r;

        #access_log  logs/host.access.log  main;

        location / {
            #root   www.jit.com;
            proxy_pass http://jit;
            index  index.html index.htm;
        }

        #error_page  404              /404.html;

        # redirect server error pages to the static page /50x.html
        #
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
    }

    upstream wxs {
        server 192.168.30.149:8091;
    }
    server {
        listen       80;
        server_name  www.wxs.com;

        #charset koi8-r;

        #access_log  logs/host.access.log  main;

        location / {
            #root   www.wxs.com;
            proxy_pass http://wxs;
            index  index.html index.htm;
        }

        #error_page  404              /404.html;

        # redirect server error pages to the static page /50x.html
        #
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
    }

配置完成后,启动nginx服务器,访问www.jit.comwww.wxs.com

成功!Nginx成功帮我们把请求转发给了不同的服务器!

声明:该文观点仅代表作者本人,牛骨文系教育信息发布平台,牛骨文仅提供信息存储空间服务。