V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐学习书目
Learn Python the Hard Way
Python Sites
PyPI - Python Package Index
http://diveintopython.org/toc/index.html
Pocoo
值得关注的项目
PyPy
Celery
Jinja2
Read the Docs
gevent
pyenv
virtualenv
Stackless Python
Beautiful Soup
结巴中文分词
Green Unicorn
Sentry
Shovel
Pyflakes
pytest
Python 编程
pep8 Checker
Styles
PEP 8
Google Python Style Guide
Code Style from The Hitchhiker's Guide
tumb8r
V2EX  ›  Python

flask 搭建的网站, nginx 做反向代理,请问怎么获取真实 ip 啊?

  •  
  •   tumb8r · 2016-07-23 22:49:07 +08:00 · 8396 次点击
    这是一个创建于 2839 天前的主题,其中的信息可能已经有所发展或是发生改变。

    如果是通过 flask 的 request.remote_addr 获取的 ip 都是 127.0.0.1

    第 1 条附言  ·  2016-07-23 23:28:35 +08:00
    解决了!!!
    因为 nginx 配置文件设置了
    proxy_set_header Host $host:80;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

    因此通过
    from flask import request
    ip=request.headers['X-Forwarded-For']
    就可以获取真实 ip
    15 条回复    2016-07-24 12:02:24 +08:00
    jessynt
        1
    jessynt  
       2016-07-23 22:50:56 +08:00
    tumb8r
        2
    tumb8r  
    OP
       2016-07-23 22:53:02 +08:00
    @jessynt 虽然设置了 proxy_set_header X-Real-IP $remote_addr;,但是不知道怎么通过 python 代码获取啊。。。主要问题还是这个
    clino
        3
    clino  
       2016-07-23 22:57:46 +08:00
    我之前给 uliweb 写的 app: https://github.com/zhangchunlin/shapps/blob/master/shapps/auth/xforwardedfor/middle_xforwardedfor.py ,这个是配合 nginx 的 proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; 用的

    limodou 说用 werkzeug 的 middleware werkzeug.contrib.fixers.ProxyFix 也是一样的效果,估计 flask 里也能用吧
    tumb8r
        4
    tumb8r  
    OP
       2016-07-23 23:09:51 +08:00
    @clino 不懂具体的用法。。。
    SErHo
        5
    SErHo  
       2016-07-23 23:28:05 +08:00
    @tumb8r request.headers 这个包括所有请求头,你打印出来就知道怎么获取了。
    tumb8r
        6
    tumb8r  
    OP
       2016-07-23 23:28:54 +08:00
    @SErHo 嗯嗯!刚好解决
    Kilerd
        7
    Kilerd  
       2016-07-24 00:10:47 +08:00 via Android
    这个不是在 flask 官方文档里面有的东西吗? 肯定没认真去看文档
    tumb8r
        8
    tumb8r  
    OP
       2016-07-24 01:39:44 +08:00 via iPhone
    @Kilerd 准确的来说,,我根本没看
    techmoe
        9
    techmoe  
       2016-07-24 06:15:03 +08:00 via Android
    转 x forward for
    lhbc
        10
    lhbc  
       2016-07-24 07:12:56 +08:00
    X-Forwarded-For 可能会有多个 IP ,如果浏览器使用了代理的话
    正确的做法应该是抓 X-Real-IP ,或者分隔 X-Forwarded-For 取第 1 个值
    aprikyblue
        11
    aprikyblue  
       2016-07-24 08:45:44 +08:00 via Android
    10L 正解, X-Forwarded-For 可能包含多个 ip ,每个途径的代理加进自己的 ip
    aprikyblue
        12
    aprikyblue  
       2016-07-24 08:46:34 +08:00 via Android
    更正下上一楼。。
    加进上一级的 ip
    tumb8r
        13
    tumb8r  
    OP
       2016-07-24 10:51:35 +08:00 via iPhone
    @lhbc 嗯嗯,是的!有看到两个 ip 的
    changshu
        14
    changshu  
       2016-07-24 12:01:02 +08:00
    app 那里处理 IP 直接套 werkzeug.contrib.fixer.ProxyFix 这个 middleware 就行了.
    changshu
        15
    changshu  
       2016-07-24 12:02:24 +08:00
    修正一下, 是 werkzeug.contrib.fixers.ProxyFix , 漏了 fixer 后面的 s
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   2279 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 28ms · UTC 08:53 · PVG 16:53 · LAX 01:53 · JFK 04:53
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.