我对 Apache 和 Tomcat 还很陌生,我发现自己在工作中经常用到它们,所以我必须边学边做。我最头疼的一件事就是 mod_jk,现在遇到的一个问题让我很困惑。
我正在尝试使用 apache 将端口 443 上的所有流量转发到安装应用程序的 8443,但由于某种原因,它没有发挥作用。以下是我目前在 vhosts 文件中的内容:
<VirtualHost *:443>
DocumentRoot /opt/tomcat/tomcat6/webapps/StoreFront
ServerName testbuilder2.domain.com
ServerAdmin [email protected]
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 [email protected]
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。
答案1
如果您在 Apache HTTPD 端使用 SSL,您可能希望重定向到 Tomcat 上的 8080。
在 Tomcat 的 server.xml 中的 Connector 设置下
scheme="https" secure="true" proxyPort="443"
这告诉 tomcat 在端口 8080 上监听 HTTP(而不是 HTTPS),但连接是“安全的”并使用 HTTPS,并告诉客户端如果有引用则使用端口 443 等。
编辑:看起来您可能想要重定向到 8009,如果是这样,您正在使用 APR,并且需要在 Tomcat 的 server.xml 中编辑 APR 连接器,而不是端口 8080 上的原始 HTTP 连接器,但其余部分仍然适用。