菜单
一、什么是反向代理?
正向代理:客户端配置代理服务器,通过代理服务器进行访问
反向代理:请求访问代理服务器,由反向服务器选择目标服务器返回访问服务器,暴露的是代理服务器的ip和端口,隐藏了真实服务器的IP地址
下面将进行两个反向代理的案例
案例一:输入域名后,反向代理到另外一个ip的端口
1.1.1 环境准备
- Nginx的安装
 - JDK的安装
 - docker 安装tomcat
 - 修改windows的hosts文件
 
扩展学习:docker启动tomcat
shell>mkdir -p /data/app/tomcat8090/test
shell>cd /data/app/tomcat8090/test
shell>echo "The port is 8090" >> a.html
shell>sudo docker run -itd -p 8090:8080 --name my_tomcat -v /data/app/tomcat8090:/usr/local/tomcat/webapps tomcat:8.5
访问测试,输入http://ip:8090/test/a.html

tomcat部署成功
1.1.2 修改nginx配置文件
带端口访问:http://www.abc.com:8090/test/a.html
由于文件监听的是8090端口
worker_processes  1;
events {
    worker_connections  1024;
}
http {
    include       mime.types;
    default_type  application/octet-stream;
    sendfile        on;
    server {
        listen       8090;
        server_name  192.168.8.21;
        location / {
          proxy_pass http://127.0.0.1:8090;
        }
    }
}

如何让链接可以不戴端口呢?我们只需要把监听端口改成80即可
worker_processes  1;
events {
    worker_connections  1024;
}
http {
    include       mime.types;
    default_type  application/octet-stream;
    sendfile        on;
    server {
        listen       80;
        server_name  192.168.8.21;
        location / {
          proxy_pass http://127.0.0.1:8090;
        }
    }
}

方案二、根据访问的路径自动跳转到不同的服务器
例如:
- 当访问的路径http://192.168.8.21/test/edu/a.html 跳转到 http://192.168.8.21:8090/test/edu/a.html
 - 当访问的路径http://192.168.8.21/test/vod/a.html 跳转到 http://192.168.8.21:8091/test/vod/a.html
 
1.2.1 环境准备
- 安装nginx
 - 安装JDK
 - 安装两个tomcat
 
####docker 安装tomcat1
shell>mkdir -p /data/app/tomcat8090/test/edu /data/app/tomcat8091/test/vod
shell>cd /data/app/tomcat8090/test/edu
shell>echo "edu:The port is 8090" >> a.html
shell>sudo docker run -itd -p 8090:8080 --name my_tomcat -v /data/app/tomcat8090:/usr/local/tomcat/webapps tomcat:8.5
####docker 安装tomcat2
shell>cd /data/app/tomcat8091/test/vod
shell>echo "vod:The port is 8091" >> a.html
shell>sudo docker run -itd -p 8091:8080 --name my_tomcat2 -v /data/app/tomcat8091:/usr/local/tomcat/webapps tomcat:8.5
1.2.2 修改Nginx的配置文件
worker_processes  1;
events {
    worker_connections  1024;
}
http {
    include       mime.types;
    default_type  application/octet-stream;
    sendfile        on;
    server {
        listen       80;
        server_name  192.168.8.21;
        location ~ /edu/ {
          proxy_pass http://127.0.0.1:8090;
        }
        location ~ /vod/ {
          proxy_pass http://127.0.0.1:8091;
        }
        
    }
}


三、负载均衡
负载均衡的定义:
随着访问量的增加,把请求分开到不同的服务器中,达到负载均衡的效果。
Nginx负载均衡的模式主要分为以下四种
- 轮询(默认):按时间排序
 - weight(权重):权重越大,分配越多
 - ip_hash:根据访问IP转换的hashcode分配,每个访问的IP固定服务器
 - fair:按后端服务器反映时间来分配
 
3.1 负载均衡案例(一)
效果:访问www.abc.com/test/edu/b.html,会跳转到不同端口/服务器的文件
3.1.1 环境准备
- Nginx的安装
 - JDK的安装
 - docker 安装tomcat1、tomcat2
 - 修改windows的hosts文件
 - 在tomcat1、tomcat2中创建相同的b.html
 
####docker 安装tomcat1
shell>mkdir -p /data/app/tomcat8090/test/edu /data/app/tomcat8091/test/edu
shell>cd /data/app/tomcat8090/test/edu
shell>echo "edu:The port is 8090" >> b.html
shell>sudo docker run -itd -p 8090:8080 --name my_tomcat -v /data/app/tomcat8090:/usr/local/tomcat/webapps tomcat:8.5
####docker 安装tomcat2
shell>cd /data/app/tomcat8091/test/edu
shell>echo "edu:The port is 8091" >> b.html
shell>sudo docker run -itd -p 8091:8080 --name my_tomcat2 -v /data/app/tomcat8091:/usr/local/tomcat/webapps tomcat:8.5
3.1.2 修改nginx的conf配置文件
worker_processes  1;
events {
    worker_connections  1024;
}
http {
    include       mime.types;
    default_type  application/octet-stream;
    sendfile        on;
    
    upstream myserver {
       # ip_hash;
        server 192.168.8.21:8090;
        server 192.168.8.21:8091;
    }
    server {
        listen       80;
        server_name  192.168.8.21;
        location / {
          proxy_pass http://myserver;
        }
        
    }
}



如果使用权重的方式呢?

四、Nginx动静分离
一般为了提高性能,都会把静态资源和动态资源分开部署。
案例一:实现动静分离
4.1 环境准备
- Nginx的安装
 - JDK的安装
 - docker 安装tomcat1
 - 修改windows的hosts文件
 - 服务器中创建两个静态资源html和图片
 - 修改nginx.conf
 
####docker 安装tomcat1
shell>mkdir -p /data/app/www/html /data/app/www/img /data/app/tomcat8090/test/edu
shell>cd /data/app/www/html
shell>echo "This is a html page" >> b.html
shell>cd /data/app/www/img
####通过rz命令上传图片
shell>rz
####启动动态资源
shell>cd /data/app/tomcat8090/test/edu
shell>echo "edu:The port is 8090" >> b.html
shell>sudo docker run -itd -p 8090:8080 --name my_tomcat -v /data/app/tomcat8090:/usr/local/tomcat/webapps tomcat:8.5
4.2 修改nginx.conf文件
worker_processes  1;
events {
    worker_connections  1024;
}
http {
    include       mime.types;
    default_type  application/octet-stream;
    sendfile        on;
    upstream myserver {
       # ip_hash;
        server 192.168.8.21:8090 weight=5;
        server 192.168.8.21:8091 weight=10;
    }
    server {
        listen       80;
        server_name  192.168.8.21;
         location ~ .*\.(html|htm|gif|jpg|jpeg|bmp|png|ico|txt|js|css){
           root   /data/app/www;
           expires 7d;
         }
       # location / {
       #   proxy_pass http://myserver;
       # }
    }
}

关于更多的nginx知识,可以参考这个帖子
https://juejin.cn/post/7112826654291918855#heading-3
包括Nginx的高可用方案
