zoukankan      html  css  js  c++  java
  • (34)odoo反代理中客户IP处理

    * 前言
        一般我们部署时会用nginx做为前端处理,有时负载时还会用到其它web服务反代理
        这里只给出nginx处理方法,其它参考处理
       
    * nginx上的客户IP传递   
        在server模块中加入
        server{
             ...
           location /{
             ...
                proxy_set_header Host $host;
             proxy_set_header X-Real-IP $remote_addr;
             proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
             ...
           }
           ...   
        }
        针对X-Real-IP 其实就是头部包里面的参数 key ,对应的值$remote_addr 这个就是ip
        对于 X-Forwarded-For 解决多层反代理 ip传递,它是一个数组,若一层反代理,第一个
        键值就是客户ip ,这和 X-Real-IP 一样的,若两层,则第一个是客户ip 第二数是前一台
        服务器的ip
        我这里只用了nginx一层代理,就只用了 X-Real-IP
       
    * odoo 上面得到客户IP

      from openerp.http import request
      client_ip=request.httprequest.headers.get('X-Real-Ip',request.httprequest.remote_addr)
     
      request是 openerp/http.py 中的对象变量
      request.httprequest 这样就得到  werkzeug Request 对象的封装对象 a wrapped werkzeug Request object
      request.httprequest.headers 得到头部包的数据
      可以用 set 方法 如 headers.set('Access-Control-Allow-Methods', 'POST') 设置Access-Control-Allow-Methods传值 为 POST
      这里你想在头部加什么键,就在这里加了
      我们这里用到是 headers.get('keyname') 这里 keyname 是用了 'X-Real-Ip'
      有时间可以打印request.httprequest.headers 这是一个头部包列表,可看到有哪些键可用
      对于后面那个 request.httprequest.remote_addr ,是默认值正常是传到 odoo服务时的ip 极大可能为127.0.0.1
     
    * 对多层代理就用  X-Forwarded-For
      from openerp.http import request
     
      if 'X-Forwarded-For' in request.httprequest.headers:
          client_ip = request.httprequest.headers.get("X-Forwarded-For")[0] or request.httprequest.remote_addr
         
    * 扩展
        还可以用GeoIP来根据IP得到很多信息

  • 相关阅读:
    南阳理工ACM1076--方案数量
    南阳理工oj88--汉诺塔(一)
    杭电ACM1170--Balloon Comes!
    杭电ACM2011-- 多项式求和
    杭电ACM2080--夹角有多大II
    杭电ACM2076--夹角有多大(题目已修改,注意读题)
    请!继续!
    南阳理工ACM954--N!
    南阳理工ACM975--关于521
    致自己即将到来的人生
  • 原文地址:https://www.cnblogs.com/toby2chen/p/5485220.html
Copyright © 2011-2022 走看看