Я передаю запрос от 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 из исходного запроса в прокси-запрос и позволяет внутреннему серверу использовать виртуальные хосты.