反向代理
"它代理的是服务端,代服务端接收请求",主要用于服务器集群分布式部署的情况下,反向代理隐藏了服务器的信息。
反向代理的作用:
(1)保证内网的安全,通常将反向代理作为公网访问地址,Web服务器是内网
(2)负载均衡,通过反向代理服务器来优化网站的负载
负载均衡
Nginx反向代理服务器接收到的请求数量,即负载量。
请求数量按照一定的规则进行分发到不同的服务器处理的规则,就是一种均衡规则。
每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器down掉,能自动剔除。
主机环境
主机 | 部署 |
---|---|
192.168.88.110 | 部署nginx |
192.168.88.100 :5001 | 应用app01 |
192.168.88.100 :5002 | 应用app02 |
192.168.88.100 :5003 | 应用app03 |
nginx配置文件目录:/usr/local/openresty/nginx/conf/nginx.conf
1、开始之前我现在192.168.88.100这台主机上新建了三个简单的flask应用用作测试,app和app02用作测试负载均衡,app03用作测试反向代理,目录结构如下:
image.png
举例说明一下app03应用新建过程:
(1)新建app目录和app03.py文件
mkdir app03
vim app03.py
from flask import Flask
app= Flask(__name__)
@app.route('/')
def index():
return 'app01'
if __name__ == '__main__':
app.run()
(2)启动应用
cd app03
export FLASK_APP=app03.py
flask run -h 0.0.0.0 -p 5003
image.png
可以看出我们起了一个5003端口的应用app03,app02、app方法相同,内容也相同。
2、开始配置
(1)访问主机192.168.88.110时自动跳转到192.168.88.100:5003应用app03上
修改nginx配置文件,由于一台nginx服务器可能代理的服务器不止一台,所以最好新建一个配置文件,然后在主配置文件中包含进去。一般读配置文件时先读nginx.conf这个主配置文件,然后再去读取vhosts里面的配置文件。
<1>在nginx.conf下添加
image.png
include /usr/local/openresty/nginx/conf/vhost/*.conf;
<2>新建/usr/local/openresty/nginx/conf/vhost/app03.conf
vim app03.conf
upstream app03{
server 192.168.88.100:5003;
}
server{
listen 80;
server_name www.app03.com;
access_log /data/logs/nginx/app03.access.log main;
error_log /data/logs/nginx/app03.error.log error;
location / {
proxy_pass http://app03;
}
}
#启动nginx
/usr/local/openresty/nginx/sbin/nginx -t
/usr/local/openresty/nginx/sbin/nginx -s reload
www.app03.com这个域名是自己定义的,如果不想申请域名的话可以修改hosts文件把他的DNS绑在自己的主机上,当访问到这个域名时,他解析到的服务器地址就是自己主机地址。下面介绍如何添加:
vim /etc/hosts
#添加一句
www.app03.com 192.168.88.110
注意:
可能你随便设置的域名已经存在,你访问时就会自己跳转到其他页面,所以我们需要把自己电脑上的hosts文件也修改下,因为我是Windows系统所以在C:\Windows\System32\drivers\etc下找到hosts文件以管理员身份添加以下内容,然后保存
<3>访问www.app03.com,结果如下,完成。
image.png
如果不想设置域名的话可以通过设置不同的端口实现多个反向代理的跳转
image.png
端口号自己随便写一个,然后访问ip+端口号,例如http://192.168.88.110:81
(2)负载均衡
访问www.app12.com(域名配置方法同上)时跳转到5001或者5002端口,通过两台服务器实现负载均衡
<1>修改nginx配置文件
vim app12.conf
upstream flask {
server 192.168.88.100:5001;
server 192.168.88.100:5002;
}
server {
listen 80;
server_name www.app12.com;
location / {
proxy_pass http://flask;
}
}
重启nginx,访问www.app12.com
image.png
因为这里没有设置权重,所以一次跳转app01,一次跳转app02。完成。
网友评论