Apache-2.2

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

  • August 2, 2012

在glassfish 前使用Apache http 伺服器的建議(檢查問題)之後,我使用了以下教程使其工作,但僅在埠 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:我將只使用一個在上下文 “/” 中執行的應用程序

以下是我的配置:

  • workers.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:我正在使用

  • 玻璃魚 v3.0.1
  • 視窗伺服器 2008 r2
  • 阿帕奇 v2.2
  • 已經****在 glassfish 密鑰庫中安裝了一個 Godaddy SSL 證書。它工作並且執行良好。

這是您的應用程序發出重定向以強制您通過 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 是在該堆棧的確切位置建構的,或者您必須更改什麼來修復它)

引用自:https://serverfault.com/questions/413789