Назад | Перейти на главную страницу

Apache перед Glassfish: mod_jk на https (443)

После рекомендации использования HTTP-сервер Apache перед стеклянной рыбой (проверьте вопрос ) я использовал следующие руководство и заставил его работать, но только на порту 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: я буду использовать только ОДНО приложение, которое работает в контексте "/" .

Ниже приведены мои конфигурации:

*worker.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: я использую

Это результат перенаправления, выпущенного вашим приложением, чтобы заставить вас подключиться через 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 или что вам нужно изменить, чтобы исправить это)