2014-02-12 6 views
2

У меня есть один домен app.mydomain.com, который сопоставлен с записью на публичный IP (с сервера tomcat, который принадлежит mysub.jelastic.dogado.eu) Я настроил SSL-сертификаты и все запросы HTTPS работают очень хорошо.jelastic grails перенаправляет http на https

Все мне нужно, что мое приложение, чтобы использовать только HTTPS, все запросы HTTP, чтобы быть перенаправлены на HTTPS, Acordingly с плагин пружинной безопасности (1.2.7.4, что у меня есть на моем приложении) я настроен таким образом:

grails.plugins.springsecurity.secureChannel.useHeaderCheckChannelSecurity = true 
    grails.plugins.springsecurity.portMapper.httpPort = 8080 
    grails.plugins.springsecurity.portMapper.httpsPort = 8443 
    grails.plugins.springsecurity.secureChannel.secureHeaderName = 'X-Forwarded-Proto' 
    grails.plugins.springsecurity.secureChannel.secureHeaderValue = 'http' 
    grails.plugins.springsecurity.secureChannel.insecureHeaderName = 'X-Forwarded-Proto' 
    grails.plugins.springsecurity.secureChannel.insecureHeaderValue = 'https' 
    grails.plugins.springsecurity.auth.forceHttps = true 
    grails.plugins.springsecurity.secureChannel.definition = [ 
      '/**':    'REQUIRES_SECURE_CHANNEL' 
    ] 

На локальном хосте он работает очень хорошо, все HTTP-запросы были перенаправлены на https, но в jelastic nothig happend. Я попробовал много настроек, заменив порт https на 8743/443, но те же результаты. Любая помощь будет оценена.

Спасибо большое, Catalin

+0

"но в jelastic nothig happend." - что ты конкретно имеешь ввиду? Цикл переадресации, тайм-аут или вообще не перенаправлять? Также в соответствии с моим ответом укажите свою топологию среды. –

ответ

1

X-Forwarded-Прото заголовок только устанавливается, если у вас есть балансировки нагрузки в среде (или с использованием общего распознаватель, но так как вы используете индивидуальный сертификат SSL которые не могут применяться в этом случае).

Если у вас нет балансировки нагрузки в вашей среде, поэтому проверка не работает - поскольку эти заголовки просто не установлены.

Если у вас есть балансировщик нагрузки, все запросы на ваш Tomcat направляются на порт 80 (перенаправляется через переадресацию порта до 8080); который включает запросы, отправленные на https (потому что в этом случае балансировщик нагрузки выполняет «выгрузку SSL». Поэтому вы ищете невозможную комбинацию в своих правилах grails (8743 и X-Forwarded-Proto). В зависимости от топологии вашей среды у вас будет один из этих случаев или другой, но не оба

EDIT: вы также должны дважды проверить server.xml, чтобы убедиться, что у вас есть это:.

<Connector port="8080" protocol="HTTP/1.1" 
      connectionTimeout="20000" 
      redirectPort="443" /> 

Примечание значение redirectPort, оно должно быть 443 потому что это порт, который будет отправлен в браузер для перенаправления - с балансировщиком нагрузки (или Jalastic Shared Resolver), проксирующим запросы, браузер должен запросить на порт 443 (хотя Tomcat SSL c onnector настроен на 8743 - если применимо), поскольку прокси использует стандартную нумерацию портов (т. https: // без номера порта = 443).

Даже если вы работаете с автономным Tomcat (без балансировки нагрузки, а не через универсальный резольвер Jelastic), эти запросы на 443 будут автоматически переадресованы на 8743 для вас.

0

Спасибо, Дэмиен, ваш ответ решил проблему. Для тех, кто заинтересован в этом конфигурация (Config.groovy):

production { 
    grails.app.context = "/"   
    grails.serverURL = "https://yourdomain.com" 
    grails.plugins.springsecurity.portMapper.httpPort = 80 
    grails.plugins.springsecurity.portMapper.httpsPort = 443 
    grails.plugins.springsecurity.auth.forceHttps = true 
    grails.plugins.springsecurity.secureChannel.definition = [ 
      '/**': 'REQUIRES_SECURE_CHANNEL' 
    ] 
    } 

Поместите это в server.xml:

<Connector port="80" protocol="HTTP/1.1" 
     connectionTimeout="20000" 
     redirectPort="443" /> 

Я полагаю, 8080 тоже работает.

Война, развертывание.

+0

Обычно вы не можете запускать Tomcat прямо на порт 80 (на Linux), если вы не сделаете специальные положения - см. Http://stackoverflow.com/questions/10450045/why-does-tomcat-work-with-port-8080-but -не-80 для деталей почему.Вот почему Jelastic использует 8080 и перенаправляет трафик на порт 80 8080 для вас (так что фактический разъем находится на 8080, но URL, введенный пользователем, не требует добавления порта (например: 8080). –

 Смежные вопросы

  • Нет связанных вопросов^_^