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