Nginx+ uwsgi + flask 显示真实IP

浏览: 2766

一、在机器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))
推荐 0
本文由 safa 创作,采用 知识共享署名-相同方式共享 3.0 中国大陆许可协议 进行许可。
转载、引用前需联系作者,并署名作者且注明文章出处。
本站文章版权归原作者及原出处所有 。内容为作者个人观点, 并不代表本站赞同其观点和对其真实性负责。本站是一个个人学习交流的平台,并不用于任何商业目的,如果有任何问题,请及时联系我们,我们将根据著作权人的要求,立即更正或者删除有关内容。本站拥有对此声明的最终解释权。

0 个评论

要回复文章请先登录注册