User Tools

Site Tools


Sidebar


Tags Cloud
mod_realip

mod_realip для apache 2.2.x

apache2.4

/etc/apache2/mods-enabled/remoteip.conf
  RemoteIPHeader X-Real-IP
  RemoteIPTrustedProxy 127.0.0.1

apache2.2

Не требует никакой настройки, достаточно скомпилировать и установить. При необходимости можно изменить заголовок с 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,
};

Изменения для apache 2.4.x

# sed 's/remote_ip/client_ip/g;s/remote_addr/client_addr/g' -i mod_realip.c
mod_realip.txt · Last modified: 2016/08/08 21:29 by kyxap