【Nginx 学习笔记2 —— 反向代理】

320 阅读5分钟

学习的视频:www.bilibili.com/video/av681… 尚硅谷的

环境:阿里云ECS服务器 内存2G

使用虚拟机的看:www.jianshu.com/p/b7bd251c7…

反向代理

说反向代理,那就得先说说正向代理,nginx也是可以做正向代理提供上网功能的。

  • 正向代理:如果把局域网Internet想象成一个巨大的资源库,则客户端要访问Internet,则需要通过代理服务器来访问,这种代理成为正向代理。

就是租房中介,比如我们要访问谷歌,需要翻墙,那可能要走香港的服务器或者国外,那这个服务器就是在做正向代理。

  • 反向代理:

反向代理服务器位于用户与目标服务器之间,但是对于用户而言,反向代理服务器就相当于目标服务器,即用户直接访问反向代理服务器就可以获得目标服务器的资源。同时,用户不需要知道目标服务器的地址,也无须在用户端作任何设定。反向代理服务器通常可用来作为Web加速,即使用反向代理作为Web服务器的前置机来降低网络和服务器的负载,提高访问效率

就是二手房东可能是他弟弟,房东的弟弟与你交互租房事理,你以为他就是房东,其实真正的房东是他哥,但你并不知道。

  • 区别:大概就是,正向你是知道你要访问目标服务器,但访问不到,自己配置国外服务器去访问,此时这个代理是你的代理,在帮你访问。而反向就是,你以为你访问的就是目标服务器,但他其实只是他的代理,你并不知道,这个代理是服务器的代理,掩藏真实的目标服务器,让你以为访问的就算目标服务器。

反向代理实例

要实现的效果:

访问nginx 跳转到tomcat 的主页面

  1. 启动nginx 和 tomcat(端口8080)

    没在服务器部署过tomcat的可以看:云服务器部署java web项目

    不知道云服务器外网ip哪看,或者不知道怎么配置安全组规则的也可可以看一下。

  2. 分析一下流程

    浏览器输入www.money.com --> nginx(云服务器的外网ip) --> tomcat(云服务器的外网ip:8080)

  3. 具体

    1. 在windows 系统的 host 文件中进行域名和 IP 对应关系的配置

  > C:\Windows\System32\drivers\etc\host 
  >
  > 追加如下进行解析映射
  >
  > 你的ip www.money.com

2.在nginx 进行请求转发配置

​ 进入nginx.conf 文件(不放心的先做备份)进行修改:

  1. 重启

    ./redis -s reload // 记得在 nginx/sbin/下才能执行
    

    结果额,但是是成功的,你可以直接用ip访问不带端口能看到tomcat主页就是成功。因为带8080端口就是直接访问tomcat,所以我们不加端口用默认80,走的是nginx。(因为host文件做域名解析是阿里云的外网ip,没备案。用虚拟机的朋友是可以的,因为都在一个网)

反向代理实例二

​ 要实现的效果

>使用 nginx 反向代理,根据访问的路径跳转到不同端口的服务中,
>   nginx 监听端口为 9001,
>   访问:http: //ip/edu/ 直接跳转到 ip:8081
>   访问:http: //ip/vod/ 直接跳转到 ip:8082
>
>所以我们云服务器得添加这三个端口的安全组规则。
  1. 准备

    1. 准备两个tomcat 监听端口分别为8081,8082,

      (1)、复制两个tomcat,并命名tomcat8081、tomcat8082(总共就三个了,怕搞坏了,原来的记得先关掉)

      (2)、分别修改server.xml 使一个监听8081,一个监听8082;如果是云服务器,<Host name="localhost" ...> localhost改成你服务器的外网ip。

      (3)、分别在tomcat8081、tomcat8082中的 Tmocat 的 webapps 文件下创建 edu和vod文件,并在文件夹里添加 a.html 文件。内容自己定义,可区分即可;

    2. 修改nginx.conf

      在上个案例修改的那个server块下面有个被#注解的server块,我们就使用它吧。

      ~:代表只要包含有如edu就转发 ,ip是你自己的ip

      server {
              listen      9001 ;
              server_name  ip;
      
              location ~ /edu/ {
                  proxy_pass http://ip:8081;
              }
      
              location ~ /vod/ {
                  proxy_pass http://ip:8082;
              }
          } 
      
    3. 重启nginx

      在 nginx/sbin/ 下

      ./nginx -s reload
      
    4. 开启两个tomcat

      分别在两个tomcat 的bin下

      ./startup.sh
      
  2. 测试

有个问题:就是我开启tomcat8081 ,tomcat8082就断了,所以其实我是访问哪个的时候开那个,但不影响实验。负载均衡就,,难搞了。

解决 Tomcat 多开

  1. 每个tomcat需要不同的环境运行,设置全局变量:

    vi /etc/profile // 修改
    添加如下几行到最后:(tomcat9是我本来用的,后两个是刚才复制的)
    export CATALINA_BASE=/server/tomcat9
    export CATALINA_HOME=/server/tomcat9
    export CATALINA_2_BASE=/server/tomcat8081
    export CATALINA_2_HOME=/server/tomcat8081
    export CATALINA_3_BASE=/server/tomcat8082
    export CATALINA_3_HOME=/server/tomcat8082
    保存后 source /etc/profile 重新加载环境变量
    
  2. 修改tomcat8081 和tomcat8082 的server.xml 修改三个端口号

    tomcat8081的server.xml

    <Server port="8010" shutdown="SHUTDOWN">  // 8005 -> 8010
        <Connector port="8081" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" /> // 8080 -> 8081
        <Connector port="8089" protocol="AJP/1.3" redirectPort="8443" /> // 8009 -> 8089
        <Host name="你的ip"  appBase="webapps" unpackWARs="true" autoDeploy="true">
    

    tomcat8082的server.xml

    <Server port="8011" shutdown="SHUTDOWN">  // 8005 -> 8011
        <Connector port="8082" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" /> // 8080 -> 8082
        <Connector port="8099" protocol="AJP/1.3" redirectPort="8443" /> // 8009 -> 8099
        <Host name="你的ip"  appBase="webapps" unpackWARs="true" autoDeploy="true">
    
  3. 到tomcat8081/bin 在 startup.sh和shutdown.sh 添加以下字段。

      # -----------------------------------------------------------------------------
        # Start Script for the CATALINA Server
        # -----------------------------------------------------------------------------
        export CATALINA_HOME=$CATALINA_2_HOME
        export CATALINA_BASE=$CATALINA_2_BASE
    
        # Better OS/400 detection: see Bugzilla 31132
    
    

    到tomcat8082/bin 在 startup.sh和shutdown.sh 添加以下字段。

      # -----------------------------------------------------------------------------
        # Start Script for the CATALINA Server
        # -----------------------------------------------------------------------------
        export CATALINA_HOME=$CATALINA_3_HOME
        export CATALINA_BASE=$CATALINA_3_BASE
    
        # Better OS/400 detection: see Bugzilla 31132
    
    
  4. 分别启动就可以了