Вход клиентского IP с Nginx/Varnish/Apache

Некоторые инструменты я использую:

Я уверен, что существуют другие I "m не думающий в данный момент. Моим текущим фаворитом является, вероятно, DIskfire. Я также проверил бы форумы Xsanity, потому что они - эксперты в производительности диска OS X, особенно в Xsan.

3
задан 25 October 2012 в 01:41
1 ответ

Совершенно верно; обработка Varnish X-Forwarded-For фактически просто определена в функции по умолчанию vcl_recv .

if (req.restarts == 0) {
    if (req.http.x-forwarded-for) {
        set req.http.X-Forwarded-For =
    req.http.X-Forwarded-For + ", " + client.ip;
    } else {
        set req.http.X-Forwarded-For = client.ip;
    }
}

Определение функции по умолчанию всегда добавляется к той, которую вы определили в ваш активный файл VCL, но если ваша определенная функция всегда обрабатывает запрос, то логика по умолчанию никогда не будет выполняться.

Задайте vcl_recv в следующих строках:

sub vcl_recv {
    /* Your existing logic goes here */
    /* After that, we'll insert the default logic, with the X-Forwarded-For handling removed */
    /* The return (lookup); at the end ensures that the default append behavior won't have an impact */

    if (req.request != "GET" &&
      req.request != "HEAD" &&
      req.request != "PUT" &&
      req.request != "POST" &&
      req.request != "TRACE" &&
      req.request != "OPTIONS" &&
      req.request != "DELETE") {
        /* Non-RFC2616 or CONNECT which is weird. */
        return (pipe);
    }
    if (req.request != "GET" && req.request != "HEAD") {
        /* We only deal with GET and HEAD by default */
        return (pass);
    }
    if (req.http.Authorization || req.http.Cookie) {
        /* Not cacheable by default */
        return (pass);
    }
    return (lookup);
}

Изменить:

Поскольку Varnish обрабатывает некоторые соединения также напрямую, лучшим подходом может быть выборочная установка заголовка. Вы все равно захотите включить полный vcl_recv , чтобы по умолчанию не применялся собственный заголовок, а включал его вверху:

if (req.restarts == 0) {
    if (!req.http.x-forwarded-for) {
        set req.http.X-Forwarded-For = client.ip;
    }
}
3
ответ дан 3 December 2019 в 06:38

Теги

Похожие вопросы