Flask+Nginx反向代理時(shí)logging打印真實(shí)IP和代理IP
Flask+Nginx反向代理時(shí)logging打印真實(shí)IP和代理IP前言 這是最近碰到的一個(gè)問題,場(chǎng)景是服務(wù)器上運(yùn)行了Flask和Nginx,使用了Nginx反向代理到Flask,但是此時(shí)Flask的日志中記載的IP全部都是127.0.0.1,不方便進(jìn)行分析,所以要自己定義打印的
Flask+Nginx反向代理時(shí)logging打印真實(shí)IP和代理IP前言 這是最近碰到的一個(gè)問題,場(chǎng)景是服務(wù)器上運(yùn)行了Flask和Nginx,使用了Nginx反向代理到Flask,但是此時(shí)Flask的日志中記載的IP全部都是127.0.0.1,不方便進(jìn)行分析,所以要自己定義打印的
這是最近碰到的一個(gè)問題,場(chǎng)景是服務(wù)器上運(yùn)行了Flask和Nginx,使用了Nginx反向代理到Flask,但是此時(shí)Flask的日志中記載的IP全部都是127.0.0.1,不方便進(jìn)行分析,所以要自己定義打印的IP情況。
我需要在日志中顯示真是的訪問IP和用戶的代理IP,也就是X-Real-Ip和X-Forwarded-For兩個(gè)請(qǐng)求頭。
因?yàn)閒lask的日志是從werkzeug_internal.py模塊打印出來的,所以要重寫這里面的一個(gè)函數(shù)。
代碼如下:
1 2 3 4 5 6 7 | 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 8 | def init(): ????fix_werkzeug_logging()??#在此處調(diào)用 ????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') |
Nginx在反向代理的時(shí)候需要將X-Forwarded-For和X-Real-Ip兩個(gè)頭進(jìn)行傳遞,配置如下:
1 2 3 4 5 6 | 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 | [message: [192.168.0.1]-[192.168.2.2] - - [15/Feb/2020 15:53:21] "GET / HTTP/1.1" 404 -] |
版權(quán)所有:深圳市網(wǎng)商在線科技有限公司
友情鏈接: