User Tools

Site Tools


Sidebar


Tags Cloud
mod_realip

This is an old revision of the document!


Table of Contents

mod_realip для apache 2.2.x

Не требует никакой настройки, достаточно скомпилировать и установить. При необходимости можно изменить заголовок с X-Real-IP на желаемый.

# apxs -a -i -c mod_realip.c
#include "httpd.h"
#include "http_config.h"
#include "apr_strings.h"

module AP_MODULE_DECLARE_DATA realip_module;

static int change_remote_ip(request_rec *r) {
    const char *fwdvalue;
    char *val;

    if (fwdvalue = apr_table_get(r->headers_in, "X-Real-IP")) {
        apr_array_header_t *arr = apr_array_make(r->pool, 0, sizeof(char*));
        while (*fwdvalue && (val = ap_get_token(r->pool, &fwdvalue, 1))) {
            *(char **)apr_array_push(arr) = apr_pstrdup(r->pool, val);
            if (*fwdvalue != '\0')
                ++fwdvalue;
        }
        r->connection->remote_ip = apr_pstrdup(r->connection->pool, ((char **)arr->elts)[((arr->nelts)-1)]);
        r->connection->remote_addr->sa.sin.sin_addr.s_addr = inet_addr(r->connection->remote_ip);
    }
    return DECLINED;
}

static void register_hooks(apr_pool_t *p) {
    ap_hook_post_read_request(change_remote_ip, NULL, NULL, APR_HOOK_FIRST);
}

module AP_MODULE_DECLARE_DATA realip_module = {
    STANDARD20_MODULE_STUFF,
    NULL,
    NULL,
    NULL,
    NULL,
    NULL,
    register_hooks,
};
mod_realip.1387126840.txt.gz · Last modified: 2013/12/15 17:00 by kyxap