我已经在这里呆了两个星期了,但仍然没有。什么甚至奇怪的是我在另一台服务器上完成了这项工作并且它有效,所以我不明白为什么这不起作用。真的很沮丧。
我尝试在RHEL上配置我的apache Web服务器,以便在指向我的tomcat时将HTTP请求重定向到HTTPS。
这是我的配置:
<VirtualHost *:80>
ServerName server.com
Redirect / https://server.com/
</VirtualHost>
<VirtualHost *:443>
ServerName server.com
ServerAlias www.server.com
ProxyPass / http://localhost:8080/
ProxyPassReverse / http://localhost:8080
SSLEngine on
SSLProxyEngine on
SSLCertificateFile /etc/pki/tls/certs/cert.cert.pem
SSLCertificateKeyFile /etc/pki/tls/private/key.key.pem
#SSLCACertificateFile /etc/pki/tls/certs/ca-chain.cert.pem
</VirtualHost>
当我说我尝试过这么多不同的组合时,请相信我。我已经评论并且没有评论Include conf.d / ssl.conf,仍然没有效果。
拜托,我在这里做错了什么?
答案 0 :(得分:0)
首先:&#34;不工作&#34;是一个相当薄弱的描述。我可能会或可能不会解决您的问题,但我看到了几个选项:
首先:测试前锋是否正常工作
第二:当您连接到https服务器时,结果是什么?您可以在没有转发的情况下尝试此操作 - 只需自己键入https协议,并确定是否可以完全排除正向配置。
我已经在另一台服务器上完成了这项工作,而且工作正常
您转发到localhost:8080
。如果那个其他服务器在端口8080上安装了tomcat(并且正在运行),但是你现在尝试的那个服务器没有 - 好吧,这就是你的解决方案。 localhost总是&#34;相同&#34;计算机。
正如Ortomala Lokni在评论中提到:您的ProxyPassReverse
指令缺少/
:
ProxyPassReverse / http://localhost:8080/
请注意,使用此配置,tomcat将不知道原始请求是通过https发送的 - 因此tomcat上的任何CONFIDENTIAL声明都假定请求已经以明文形式发送 - 它将尝试重定向到https。由于ProxyPass仍然通过http转发,因此Tomcat永远不会知道请求实际上已加密。有 hacks 解决此问题(例如,连接器配置上的secure="true"
)或更合适的解决方案(例如转发through AJP而不是http)
ProxyPass / ajp://localhost:8009/
(注意更改的端口)
出现更多错误的可能性 - 如果这些提示没有帮助,请说明&#34;不工作&#34;更多。
答案 1 :(得分:0)
非常感谢!特别是你,奥拉夫科克。你的建议是金色的!就像你建议的那样,我决定忘记转发并关注当我尝试直接连接到HTTPS时会发生什么,以及当我遇到这个错误时:
proxy: HTTP: disabled connection for (localhost)
我做了一些搜索,发现我必须运行此命令才能让事情滚动:/usr/sbin/setsebool -P httpd_can_network_connect 1
(注意,此命令还有其他变体,例如:setsebool -P httpd_can_network_connect on
或sudo setsebool -P httpd_can_network_connect on
)
然后我必须在<VirtualHost _default_:443>
标记下的ssl.conf文件中设置这些:
ServerName server.com
ServerAlias www.server.com
ProxyPass / http://localhost:8080/
ProxyPassReverse / http://localhost:8080/
它有效!
但是,我不想引用ssl.conf文件。我想要httpd.conf文件中的所有内容,所以经过一些修改,这对我有用,我相信应该适用于有类似问题的人。
因此,在评论出include conf.d/ssl.conf
行
LoadModule ssl_module modules/mod_ssl.so
Listen 443
#For HTTP requests, redirecting to HTTPS
<VirtualHost *:80>
ServerName server.com
Redirect / https://server.com/
</VirtualHost>
#For HTTPS requests
<VirtualHost *:443>
ServerName server.com
ServerAlias www.server.com
ProxyPreserveHost On
ProxyRequests Off
ProxyPass / http://localhost:8080/
ProxyPassReverse / http://localhost:8080/
SSLEngine on
SSLCertificateFile /etc/pki/tls/certs/cert.cert.pem
SSLCertificateKeyFile /etc/pki/tls/private/key.key.pem
#SSLCACertificateFile /etc/pki/tls/certs/ca-chain.cert.pem
</VirtualHost>
显然,您应该首先安装mod_ssl。
谢谢大家!