nginx实现反向代理实例
参考视频
服务器代码:
from http.server import HTTPServer, BaseHTTPRequestHandler
class Request(BaseHTTPRequestHandler):
#通过类继承,新定义类
timeout = 5
server_version = 'Apache'
def do_GET(self):
#在新类中定义get的内容(当客户端向该服务端使用get请求时,本服务端将如下运行)
self.send_response(200)
self.send_header("type","get") #设置响应头,可省略或设置多个
self.end_headers()
msg = 123 #要返回给客户端的信息
msg = str(msg).encode() #转为str再转为byte格式
self.wfile.write(msg) #将byte格式的信息返回给客户端
def do_POST(self):
#在新类中定义post的内容(当客户端向该服务端使用post请求时,本服务端将如下运行)
data = self.rfile.read(int(self.headers['content-length'])) #获取从客户端传入的参数(byte格式)
data = data.decode() #将byte格式转为str格式
self.send_response(200)
self.send_header("type","post") #设置响应头,可省略或设置多个
self.end_headers()
msg = int(data)*2 #要返回给客户端的信息(将str转为int再x2)
msg = str(msg).encode() #转为str再转为byte格式
self.wfile.write(msg) #将byte格式的信息返回给客户端
host = ('0.0.0.0',9997) #设定地址与端口号,'localhost'等价于'127.0.0.1'
server = HTTPServer(host, Request) #根据地址端口号和新定义的类,创建服务器实例
server.serve_forever() #开启服务
在不同服务器上面运行上述代码,假设服务器ip为192.168.8.128和192.168.8.129。那么nginx中的代码为如下:
worker_processes 1;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
upstream backend_servers { # 需要代理的服务器ip
# 两个服务器的代码都是weight=1,这代表访问192.168.8.128:9997时,
# 有相等的概率“打到”这下面两个服务器上
server 192.168.8.129:9997 weight=1;
server 192.168.8.128:9997 weight=1;
}
server {
listen 8080;
server_name 192.168.8.128; # 访问使用的ip
location / {
proxy_pass http://backend_servers;
}
}
}