Приложение ASP.NET проверяет IP вызывающего клиента.
Но я должен разместить его за Linux-Box, где Apache перенаправляет его на внутренний Windows 2003 Server, на котором работает IIS, например:
ProxyPass/srs http://192.168.21.15/srs/
где 192.168.21.15 - это внутренний IP-адрес Windows-сервера, а 192.168.21.1 - внутренний IP-адрес окна Linux, который получает запрос из Интернета.
Теперь мне кажется, что запросы от intERnet, которые перенаправлены на w.x.y.15, все, кажется, происходят из w.x.y.1
Как сохранить (или переслать) исходный IP-адрес?
Я слышал о X-forwarded-for... но как получить это значение в С#??
Спасибо, Reinhard
В общем случае, если прокси-сервер изменяет информацию об IP-адресе, исходный IP-адрес хранится в переменной HTTP_X_FORWARDED_FOR. Чтобы получить доступ к этому в ASP.NET с помощью С#, вы можете использовать:
Request.ServerVariables["HTTP_X_FORWARDED_FOR"]
Для кандидатов в Java вы можете использовать:
String ipAddress=request.getHeader("X-Forwarded-For");
Если вы будете использовать request.getRemoteAddr()
, он может вернуться 127.0.0.1
, если на вашем сервере развертывания было перенаправлено Apache.