菜单
一、什么是反向代理?
正向代理:客户端配置代理服务器,通过代理服务器进行访问
反向代理:请求访问代理服务器,由反向服务器选择目标服务器返回访问服务器,暴露的是代理服务器的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的高可用方案