Apache-2.4

似乎無法讓 mod_jk 將 443 轉發到 tomcat?

  • September 15, 2015

我對 Apache 和 Tomcat 還很陌生,而且我發現自己在很多工作中都在使用它,所以我必須邊走邊學。我經常糾結的一件事是 mod_jk,而我現在遇到的一個問題讓我很困惑。

我正在嘗試使用 apache 將埠 443 上的所有流量轉發到安裝應用程序的 8443,但由於某種原因它沒有做它的事情。這是我目前在我的 vhosts 文件中的內容:

<VirtualHost *:443>
DocumentRoot /opt/tomcat/tomcat6/webapps/StoreFront
ServerName testbuilder2.domain.com
ServerAdmin networksupport@domain.com
ErrorLog /etc/httpd/logs/builder.error_log
TransferLog /etc/httpd/logs/builder.transfer_log

SSLEngine on
SSLProtocol all -SSLv2 -SSLv3
SSLCipherSuite ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-DSS-AES128-GCM-SHA256:kEDH+AESGCM:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-DSS-AES128-SHA256:DHE-RSA-AES256-SHA256:DHE-DSS-AES256-SHA:DHE-RSA-AES256-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:AES:CAMELLIA:DES-CBC3-SHA:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!MD5:!PSK:!aECDH:!EDH-DSS-DES-CBC3-SHA:!EDH-RSA-DES-CBC3-SHA:!KRB5-DES-CBC3-SHA
SSLHonorCipherOrder on
SSLCertificateFile /etc/httpd/conf/certs/*.domain.com.crt
SSLCertificateKeyFile /etc/httpd/conf/certs/wildcardprivate.key
SSLCertificateChainFile /etc/httpd/conf/certs/IntermediateCABundle.crt

JkMount /* testbuilder2

我的workers.properties 看起來像這樣:

worker.list=testbuilder2,jk-status
########## Template Worker ###########
worker.template1.type=ajp13
worker.template1.socket_keepalive=true
worker.template1.ping_mode=A
worker.template1.ping_timeout=10000
worker.template1.connection_pool_minsize=0
worker.template1.connection_pool_timeout=600
worker.template1.reply_timeout=300000
worker.template1.recovery_options=3
######### Workers ###################
# testbuilder2
worker.testbuilder2.reference=worker.template1
worker.testbuilder2.port=8009
worker.testbuilder2.host=localhost
worker.testbuilder2.activation=A

mod_jk.conf:

LoadModule jk_module modules/mod_jk.so

JkWorkersFile conf/workers.properties
# Ensure the following directory exists if not changed.
JkShmFile /var/cache/httpd/mod_jk.shm
JkLogFile logs/mod_jk.log
JkOptions     +ForwardKeySize +ForwardURICompat -ForwardDirectories
JkLogLevel info
JkLogStampFormat "[%a %b %d %H:%M:%S %Y] "

這一切對我來說都是正確的,但話又說回來,我很愚蠢。:p

這裡有什麼明顯的錯誤嗎?每當我訪問https://testbuilder2.domain.com時,它都會直接將我帶到 apache 歡迎螢幕。奇怪的是,我已經嘗試在埠 80 上設置它,並且它工作正常:

<VirtualHost *:80>
DocumentRoot /opt/tomcat/tomcat6/webapps/StoreFront
ServerName testbuilder2.domain.com
ServerAdmin networksupport@domain.com
ErrorLog /etc/httpd/logs/builder.error_log
TransferLog /etc/httpd/logs/builder.transfer_log

JkMount /* testbuilder2

使用它會導致它從任何 URL 載入我們的應用程序。所以我知道我擁有讓它工作所需的一切,我只是在做一些非常錯誤的事情。有任何想法嗎?

我在 CentOS Linux 版本 7.1.1503(核心)上,最小安裝,Apache 2.4,Tomcat 6。我認為是 Mod_jk 版本 1.2.40。

如果您在 Apache HTTPD 端使用 SSL,您可能希望在 Tomcat 上重定向到 8080。

在連接器集下的 Tomcat 的 server.xml 中

scheme="https" secure="true" proxyPort="443"

這告訴 tomcat 在埠 8080 上偵聽 HTTP(不是 HTTPS),但連接是“安全的”並使用 HTTPS 並告訴客戶端如果有推薦等使用埠 443。

編輯:看起來您可能想要重定向到 8009,如果是這樣,您正在使用 APR 並且需要在 Tomcat 的 server.xml 中編輯 APR 連接器,而不是埠 8080 上的普通 HTTP 連接器,但其餘部分仍然適用。

有關更多資訊,請參閱tomcat 文件

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