Grails получает IP-адрес клиента при развертывании в облаке?

У меня есть приложение Grails, и я хочу заблокировать его с помощью ip, чтобы доступ к приложению имел только несколько диапазонов IP-адресов. Я использовал команду Spring Security в Config для достижения этой цели:

grails.plugins.springsecurity.ipRestrictions

Затем, когда я запускаю приложение в облаке (Jelastic), несмотря на то, что я нахожусь на одном из перечисленных IP-адресов, оно не позволяет мне получить доступ к нужным областям. Затем я помещаю некоторый код в приложение, показанное ниже, чтобы получить адрес Клиента, и он показывает адрес, возможно, облачного прокси-сервера вместо Клиента, использующего Приложение:

request.getRemoteAddr()

Я думаю, что он не позволит мне получить доступ к тем областям, которые я хочу, так как он считывает мой IP как IP-адрес облачного прокси-сервера. Я также попытался выполнить приведенные ниже команды, чтобы посмотреть, возвращает ли какая-либо из них мой фактический IP-адрес, однако все они были нулевыми:S

request.getHeader("X-Forwarded-For");  

request.getHeader("Proxy-Client-IP");  

request.getHeader("WL-Proxy-Client-IP") 

request.getHeader("HTTP_CLIENT_IP")

request.getHeader("HTTP_X_FORWARDED_FOR")

Мне просто нужно знать, есть ли какой-нибудь способ ограничения этого приложения в облаке по IP-адресу клиента, а не по IP-адресу облачного прокси-сервера? заранее спасибо

4 ответа

Все запросы к экземплярам Jelastic поступают через инфраструктуру глобального Resolver.

Итак, вы правы, request.getRemoteAddr() возвращает IP Resolver, и он не распознается вашим списком разрешенных.

Обходным путем для этого является покупка внешнего IP для вашего сервера приложений в Jelastic. В этом случае все запросы будут поступать непосредственно в ваш экземпляр.

Я также рекомендую вам войти в специальное сообщество Jelastic, чтобы поделиться своим опытом и получить помощь от других.

Вы пытались сбросить заголовки, которые вы фактически получаете в своем приложении?

На Cloudfoundry.com я вижу, что я получил "x-forwarded-for"

class HeaderController {

def headerTest = {

    def headerNames = request.headerNames.collect{ it }

    headerNames.each {
        render "$it : ${request.getHeader(it)}\n"
    }

    render "Remote addr : ${request.getRemoteAddr()}\n"
    render "Forward addr : ${request.getHeader('x-forwarded-for' )}\n"

}
}

В облаке Jelastic "x-forwarded-for" также отображает ваш IP.

В качестве продолжения я предлагаю вам ознакомиться с соответствующей темой в сообществе Jelastic.

Итак, предположительно, вам придется настроить конфигурацию ограничения IP таким образом, чтобы она проверяла значение "x-forwarded-for".

Вы настроили экземпляр nginx перед своим котом? Я не уверен, есть ли какие-либо специфические особенности jelastic, но вы должны настроить nginx так, чтобы он передавал ip прокси-службе, см. http://wiki.nginx.org/HttpRealIpModule

Например, вы можете установить собственный заголовок, если не хотите перезаписывать значения по умолчанию:

proxy_set_header X-Real-IP $remote_addr;
Другие вопросы по тегам