一、在机器1(prod03)上, Nginx反向代理端口7077到机器2(lookalike_server)上
Nginx能够配置代理多台服务器,利用upstream实现负载均衡
http {
# 1. 在http节点下,加入upstream节点:
# upstream 定义一组 HTTP服务器,这些服务器可以监听不同的端口
upstream lookalike_server {
server 10.0.2.30::6100;
server 10.0.2.30::6120;
}
# server配置后端服务器,参数可以是不同的 IP地址、端口号,甚至域名。
server {
listen 7077;
server_name prod03;
location /lookalike/ {
# 2. 将server节点下的location节点中的proxy_pass配置为:
# http:// + upstream名称,通过1、2两步初步实现了负载均衡。
# upstream依照轮询(默认)方式负载,每一个请求按时间顺序逐一分配
# 到不同的后端服务器。假设后端服务器down掉,能自己主动剔除。这样
# 的方式简便、成本低廉,但缺点是可靠性低和负载分配不均衡。除此之外,
# upstream还有其他的分配策略:weight(权重)、ip_hash(访问ip)、
# fair(第三方)、url_hash(第三方)
# 参见 https://www.cnblogs.com/wzjhoutai/p/6932007.html
proxy_pass http://lookalike_server/lookalike/;
# host包含客户端真实的域名和端口号
# X-Real-IP表示客户端真实的IP
# X-Forwarded-For多层代理时会包含真实客户端及中间每个代理服务器的IP
# X-Forwarded-Proto表示客户端真实的协议, http还是https
proxy_set_header HOST $host:$server_port;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Porto $scheme;
proxy_set_header X-ProxyScheme http;
proxy_set_header X-ProxyHost prod03;
proxy_set_header X-ProxyPort 7077;
proxy_set_header X-ProxyContextPath /lookalike;
}
}
}
二、机器2(lookalike_server)上,Nginx反向代理端口3031给uwsgi
Nginx中:
http {
server {
listen 80;
server_name localhost;
location / {
include uwsgi_params;
uwsgi_pass 127.0.0.1:3031;
uwsgi_ignore_client_abort off;
# X-Real-IP表示客户端真实的IP
# X-Forwarded-For多层代理时包含真实客户端及中间每个代理服务器IP
# X-Forwarded-Proto表示客户端真实的协议, http还是https
uwsgi_param X-Real-IP $remote_addr;
uwsgi_param X-Forwarded-For $proxy_add_x_forwarded_for;
uwsgi_param X-Forwarded-Proto $http_x_forwarded_proto;
}
}
}
三、views.py 中:
def get_user_ip(request):
if request.headers.get('X-Forwarded-For'):
return request.headers['X-Forwarded-For']
elif request.headers.get('X-Real-IP'):
return request.headers.get('X-Real-IP')
else:
return request.remote_addr
@main.route('/foo', methods=['GET', 'POST'])
def foo():
print('ip_client: ', get_user_ip(request))