Apache перед Glassfish: mod_jk на https(443)
После рекомендации по использованию http-сервера Apache перед glassfish (проверьте вопрос) я использовал следующий учебник и заставил его работать, но только на порту 80.
Что я имею в виду, теперь я могу напечатать:
www.mydomain.com
и это работает. Однако, если я запускаю приложение, которое требует https, то есть, имея в web.xml (приложение J2EE)
<transport-guarantee>CONFIDENTIAL</transport-guarantee>
Когда я печатаю:
www.mydomain.com
он автоматически загружает:
https://www.mydomain.com:8181
Я не хочу показывать порт 8181, я просто хочу: https://www.mydomain.com/.
PS: я буду использовать только ОДНО приложение, которое работает в контексте "/".
Ниже приведены мои конфигурации:
* файлworks.properties:
worker.list=ajp13unsecure, ajp13secure
worker.ajp13unsecure.type=ajp13
worker.ajp13unsecure.host=localhost
worker.ajp13unsecure.port=8009
worker.ajp13secure.type=ajp13
worker.ajp13secure.host=localhost
worker.ajp13secure.port=8009
*httpd.conf файл, который я добавил:
Listen 443
# Load mod_jk module
# Update this path to match your modules location
LoadModule jk_module modules/mod_jk.so
# Where to find workers.properties
# Update this path to match your conf directory location (put workers.properties next to httpd.conf)
JkWorkersFile conf/workers.properties
# Where to put jk logs
# Update this path to match your logs directory location (put mod_jk.log next to access_log)
# This can be commented out, to disable logging
JkLogFile logs/mod_jk.log
# Set the jk log level [debug/error/info]
# Only matters if JkLogFile is being used.
JkLogLevel debug
# Select the timestamp log format
JkLogStampFormat "[%a %b %d %H:%M:%S %Y] "
# JkOptions indicate to send SSL KEY SIZE
JkOptions +ForwardKeySize +ForwardURICompat -ForwardDirectories
# JkRequestLogFormat set the request format
JkRequestLogFormat "%w %V %T"
# Send everything for context /examples to worker named worker1 (ajp13)
# /examples would most likely be the name of your WebApp (c:/tomcat/webapps/example)
JkMount /* ajp13secure
# Should mod_jk send SSL information (default is On)
JkExtractSSL On
# What is the indicator for SSL (default is HTTPS)
JkHTTPSIndicator HTTPS
# What is the indicator for SSL session (default is SSL_SESSION_ID)
JkSESSIONIndicator SSL_SESSION_ID
# What is the indicator for client SSL cipher suit (default is SSL_CIPHER)
JkCIPHERIndicator SSL_CIPHER
# What is the indicator for the client SSL certificated? (default is SSL_CLIENT_CERT)
JkCERTSIndicator SSL_CLIENT_CERT
Вопросы:
Чего мне не хватает, чтобы порт 8181 больше не появлялся в URL?
Кроме того, как я уже сказал, SSL сертификат уже установлен в Glassfish, я должен установить его в Apache или все в порядке, как это?
PS: я использую
- Glassfish v3.0.1
- Windows Server 2008 R2
- Apache v2.2
- Яуже установил сертификат SSL GodaddyВ хранилище ключей Glassfish. Это работает и работает хорошо.
1 ответ
Это результат перенаправления вашего приложения, чтобы заставить вас подключиться через SSL. Проблема в том, что поскольку glassfish теперь находится за прокси-сервером, приложение не знает, что порт, на котором он работает, не тот порт, который предполагается использовать людям. Где-то должна быть конфигурация для переопределения используемого порта.
Простое решение этой конкретной проблемы - использовать Apache вместо Java, чтобы заставить людей использовать SSL, что можно сделать с помощью mod_rewrite:
RewriteEngine On
RewriteCond %{HTTPS} !=on
RewriteRule ^/?(.*) https://%{SERVER_NAME}/$1 [R,L]
Тем не менее, реальное решение состоит в том, чтобы выяснить, откуда происходит перенаправление URL-адресов и что можно сделать для его перенастройки. Вполне вероятно, что эта проблема появится в других местах, где ваше приложение создает URL-адреса, такие как электронные письма регистрации пользователей.
(Отказ от ответственности: я ничего не знаю о том, как Glassfish/J2EE/ все эти маленькие кусочки Java сочетаются друг с другом, поэтому я не уверен, где именно в этом стеке создается этот URL-адрес или что нужно изменить, чтобы исправить это)