ip2location模块获取HTTP_X_FORWARDED_FOR而不是REMOTE_ADDR

时间:2013-02-06 05:37:05

标签: c++ c apache

我正在使用ip2location,对于不在负载均衡器后面的网站,它可以正常工作。

F5或AWS ELB背后的任何内容,它返回空字符串

我开始查看ip2location的模块,并试图更改它,以便它将获得X_FORWARDED_FOR。

这是mod_ip2location.c

#include "httpd.h"
#include "http_config.h"
#include "http_protocol.h" 
#include "http_log.h"
#include "ap_config.h"
#include "apr_strings.h"
#include "IP2Location.h"


static const int ENV_SET_MODE    = 0x0001;
static const int NOTES_SET_MODE  = 0x0002;
static const int ALL_SET_MODE    = 0x0003;

typedef struct {
  int enableFlag;
  int setMode; 
  char* dbFile;
  IP2Location* ip2locObj;
} ip2location_server_config;

module AP_MODULE_DECLARE_DATA IP2Location_module;

static apr_status_t ip2location_cleanup(void *cfgdata) {
  // cleanup code here, if needed
  return APR_SUCCESS;
}

static void ip2location_child_init(apr_pool_t *p, server_rec *s) {
  apr_pool_cleanup_register(p, NULL, ip2location_cleanup, ip2location_cleanup);
}

static int ip2location_post_read_request(request_rec *r) {
  char* ipaddr;
  ip2location_server_config* config;
  IP2LocationRecord* record;
  char buff[20];

  config = (ip2location_server_config*)
                    ap_get_module_config(r->server->module_config, &IP2Location_module);

  if(!config->enableFlag)
    return OK;

  ipaddr = r->connection->remote_ip;
  record = IP2Location_get_all(config->ip2locObj, ipaddr);
  if(record) {
    if(config->setMode & ENV_SET_MODE) {
      apr_table_set(r->subprocess_env, 

我试图改变这一行:

  ipaddr = r->connection->remote_ip;

  ipaddr = r->header_in('X-Forwarded-For');

它不会编译并发现错误

在函数'ip2location_post_read_request'中: 错误:'request_rec'没有名为'header_in'的成员 类型

的警告字符常量太长

我不确定是否有一个我忽略的简单修复?谢谢!

0 个答案:

没有答案