Назад | Перейти на главную страницу

Проксирование с nginx на Jetty

Я передаю запрос от nginx к Jetty, но у меня проблема с запросом, который получает Jetty. Запросы Jetty показывают, что IP-адрес запроса - 127.0.0.1. Но мне нужен реальный IP-адрес сервера, а у моего сайта несколько доменов, поэтому, когда запрос поступает с какого-то доменного имени на мой сервер, он также должен быть доступен в запросе Jetty.

Конфигурация nginx:

server {

    listen   80; ## listen for ipv4
    listen   [::]:80 default ipv6only=on; ## listen for ipv6

    server_name  localhost;

    access_log  /var/log/nginx/localhost.access.log;

    location / {
        proxy_pass  http://127.0.0.1:8080;
        proxy_set_header  X-Real-IP  $remote_addr;
    }
}

Запрос сервлета:

Dump Servlet
getMethod:  GET
getContentLength:   -1
getContentType:     null
getRequestURI:  /dump/info
getRequestURL:  http://127.0.0.1:8080/dump/info
getContextPath:     
getServletPath:     /dump
getPathInfo:    /info
getPathTranslated:  /tmp/jetty-0.0.0.0-8080-test.war-_-any-/webapp/info
getQueryString:     null
getProtocol:    HTTP/1.0
getScheme:  http
getServerName:  127.0.0.1
getServerPort:  8080
getLocalName:   127.0.0.1
getLocalAddr:   127.0.0.1
getLocalPort:   8080
getRemoteUser:  null
getUserPrincipal:   null
getRemoteAddr:  127.0.0.1
getRemoteHost:  127.0.0.1
getRemotePort:  50905
getRequestedSessionId:  6ubs42zhm5q61k5hm84ni3ib
isSecure():     false
isUserInRole(admin):    false
getLocale:  en_US
getLocales:     en_US
getLocales:     en

Вам нужно, чтобы Jetty смотрел на заголовок, установленный nginx при определении IP-адреса клиента, а не на источник IP-соединения. На основе этот сообщение на форуме, нужно установить useForwardedForHeader к trueи настройте nginx для установки X-Forwarded-For заголовок со следующей конфигурацией:

proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

Если я правильно понимаю, вы хотите использовать прокси-запросы для нескольких доменов, используя один location блок в nginx.

В этой ситуации вы можете изменить свою конфигурацию следующим образом:

location / {
    proxy_pass  http://127.0.0.1:8080;
    proxy_set_header  X-Real-IP  $remote_addr;
    proxy_set_header Host $http_host;
}

Это копирует заголовок Host из исходного запроса в прокси-запрос и позволяет внутреннему серверу использовать виртуальные хосты.