kerberos
@kerberos

Пустая переменная $proxy_add_x_forwarded_for, nginx 1.2.3

Настраиваю nginx/1.2.3 (debian 6.0.5) как реверс-прокси к томкату, конфиг следующий:

upstream tomcat {
    server 127.0.0.1:8080;
}

server {
    listen   *:80; ## listen for ipv4

    sendfile on;
    charset utf-8;

    server_name  test.ru www.test.ru;

    access_log  /var/log/nginx/test.ru.access.log;
    error_log  /var/log/nginx/test.ru.error.log;

    root /var/www/test.ru/htdocs;

    location / {
            proxy_pass http://tomcat;
            proxy_set_header Host $host;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header X-Real-IP $remote_addr;
    }
}


В jsp-странице вывожу все заголовки и их значения:

......
x-real-ip	92.47.ххх.ххх
connection	close
cache-control	max-age=0
......


Т.е. x-real-ip передается, а X-Forwarded-For — нет. В чем может быть дело?
  • Вопрос задан
  • 5867 просмотров
Решения вопроса 1
kerberos
@kerberos Автор вопроса
В общем, решил проблему, необходимо прописать у томката в server.xml следующее (заработало после добавления атрибута requestAttributesEnabled=«true» в AccessLogValve):

<Host name="localhost"  appBase="webapps"
            unpackWARs="true" autoDeploy="true">
    ...
    <Valve className="org.apache.catalina.valves.RemoteIpValve"
           remoteIpHeader="X-Forwarded-For"
           requestAttributesEnabled="true"
           internalProxies="127.0.0.1"  />

    <Valve className="org.apache.catalina.valves.AccessLogValve"
           directory="logs"
           prefix="localhost_access_log."
           suffix=".log"
           requestAttributesEnabled="true"
           pattern="%h %l %u %t "%r" %s %b" />
    ...
</Host>
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 3
VBart
@VBart
Почему вы решили, что переменная пустая и заголовк не передается? Посмотрите тем же tcpdump-ом, скорее всего всё передается, просто tomcat обрабатывает этот заголовок по своему усмотрению.
Ответ написан
script88
@script88
Идем в офф документацию nginx.org/ru/docs/http/ngx_http_proxy_module.html и в самом низу читаем:

$proxy_add_x_forwarded_for
поле заголовка запроса клиента “X-Forwarded-For” и добавленная к нему через запятую переменная $remote_addr. Если же поля “X-Forwarded-For” в заголовке запроса клиента нет, то переменная $proxy_add_x_forwarded_for равна переменной $remote_addr.
Ответ написан
kerberos
@kerberos Автор вопроса
mod_rpaf? При чем тут mod_rpaf (быстрое гугление показывает, что это модуль для apache, у меня же apache tomcat)
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

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