nginx反向代理打印日志_Flask+Nginx反向代理时logging打印真实IP和代理IP | kTWO-个人博客...

本文介绍了在Nginx反向代理Flask时,如何通过设置X-Forwarded-For和X-Real-Ip请求头,自定义Flask日志以显示真实IP和代理IP。
摘要由CSDN通过智能技术生成

摘要

本文将介绍如何在Nginx反向代理Flask时,在Flask打印用户的真实IP和代理IP日志,通过配置X-Forwarded-For和X-Real-Ip两个请求头的传递和重写Flask中werkzeug.serving.WSGIRequestHandler.address_string函数进行自定义日志显示。

0x01 前言

这是最近碰到的一个问题,场景是服务器上运行了Flask和Nginx,使用了Nginx反向代理到Flask,但是此时Flask的日志中记载的IP全部都是127.0.0.1,不方便进行分析,所以要自己定义打印的IP情况。

我需要在日志中显示真是的访问IP和用户的代理IP,也就是X-Real-Ip和X-Forwarded-For两个请求头。

因为flask的日志是从werkzeug\_internal.py模块打印出来的,所以要重写这里面的一个函数。

0x2 重写日志的IP地址获取方法

代码如下:

Python

def fix_werkzeug_logging():

from werkzeug.serving import WSGIRequestHandler

def address_string(self):

# 这就是在nginx的config中,为什么一定要有X-Real-IP啦

return "[%s]-[%s]" % (self.headers.get('X-Forwarded-For', self.client_address[0]), self.headers.get('X-Real-Ip', self.client_address[0]))

WSGIRequestHandler.address_string = address_string

1

2

3

4

5

6

7

deffix_werkzeug_logging():

fromwerkzeug.servingimportWSGIRequestHandler

defaddress_string(self):

# 这就是在nginx的config中,为什么一定要有X-Real-IP啦

return"[%s]-[%s]"%(self.headers.get('X-Forwarded-For',self.client_address[0]),self.headers.get('X-Real-Ip',self.client_address[0]))

WSGIRequestHandler.address_string=address_string

上的代码是重写代码,之后再配置日志格式即可:

def init():

fix_werkzeug_logging() #在此处调用

logging.basicConfig(level=logging.INFO,

format='[Process %(process)d] [Thread %(thread)d] %(asctime)s %(filename)s '

'%(funcName)s[line:%(lineno)d] %(levelname)s %(pathname)s '

'[message: %(message)s] ',

datefmt='%Y-%m-%d %H:%M:%S',

filemode='a')

1

2

3

4

5

6

7

8

definit():

fix_werkzeug_logging()#在此处调用

logging.basicConfig(level=logging.INFO,

format='[Process %(process)d] [Thread %(thread)d] %(asctime)s %(filename)s '

'%(funcName)s[line:%(lineno)d] %(levelname)s %(pathname)s '

'[message: %(message)s] ',

datefmt='%Y-%m-%d %H:%M:%S',

filemode='a')

0x03 配置Nginx反向代理

Nginx在反向代理的时候需要将X-Forwarded-For和X-Real-Ip两个头进行传递,配置如下:

proxy_pass http://127.0.0.1:8082/;

proxy_set_header Host $host;

proxy_set_header X-Real-IP $remote_addr;

#proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

proxy_set_header X-Forwarded-For $http_x_forwarded_for;

proxy_set_header REMOTE-HOST $remote_addr;

1

2

3

4

5

6

proxy_passhttp://127.0.0.1:8082/;

proxy_set_headerHost$host;

proxy_set_headerX-Real-IP$remote_addr;

#proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

proxy_set_headerX-Forwarded-For$http_x_forwarded_for;

proxy_set_headerREMOTE-HOST$remote_addr;

0x04 效果

[message: [192.168.0.1]-[192.168.2.2] - - [15/Feb/2020 15:53:21] "GET / HTTP/1.1" 404 -]

1

[message:[192.168.0.1]-[192.168.2.2]--[15/Feb/202015:53:21]"GET / HTTP/1.1"404-]

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值