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得到很多信息

  • 相关阅读:
    对象池使用时要注意几点
    Flash3D学习计划(一)——3D渲染的一般管线流程
    714. Best Time to Buy and Sell Stock with Transaction Fee
    712. Minimum ASCII Delete Sum for Two Strings
    647. Palindromic Substrings(马拉车算法)
    413. Arithmetic Slices
    877. Stone Game
    338. Counting Bits
    303. Range Sum Query
    198. House Robber
  • 原文地址:https://www.cnblogs.com/toby2chen/p/5485220.html
Copyright © 2011-2022 走看看