Glassfish 前面的 Apache:https 上的 mod_jk(443)

Glassfish 前面的 Apache:https 上的 mod_jk(443)

建议使用Apache http 服务器在 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:我将仅使用在上下文“/”中运行的一个应用程序

以下是我的配置:

*工人.属性文件:

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配置文件我添加的文件:

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 中安装它,或者这样就可以了?

附言:我正在使用

  • glassfish v3.0.1
  • Windows 服务器 2008 R2
  • Apache v2.2
  • 已经安装 godaddy SSL 证书在 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 或者你必须进行哪些更改才能修复它)

相关内容