[英]Apache web server configuration - HTTP to HTTPS not working
我已经在这里待了两个星期了,仍然一无所获。 什至奇怪的是,我已经在另一台服务器上完成了此操作,并且它可以正常工作,所以我不明白为什么它不起作用。 真的很沮丧。
我正在尝试在RHEL上配置apache网络服务器,以便将HTTP请求重定向到HTTPS,然后再将其指向我的tomcat。
这是我的配置:
<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的评论,但仍然没有效果。
拜托,我这里做错了什么?
首先:“不起作用”的描述很微弱。 我可能会也可能不会遇到您的问题,但是我看到了几种选择:
第一:测试前锋是否有效
第二:连接到https服务器后会得到什么结果? 您可以在没有转发的情况下尝试此操作-只需自己输入https协议,然后确定是否可以完全排除转发配置。
我已经在另一台服务器上完成了这项工作
您正在转发到localhost:8080
。 如果另一台服务器在端口8080上安装了(并正在运行)tomcat,但是您现在尝试的服务器却没有,那么,这就是您的解决方案。 本地主机始终是“同一台”计算机。
正如Ortomala Lokni在评论中提到的那样:您的ProxyPassReverse
指令缺少/
:
ProxyPassReverse / http://localhost:8080/
请注意,使用此配置,tomcat将不知道原始请求已通过https发送-因此,tomcat上的任何CONFIDENTIAL声明都假定该请求已以明文形式发送-它将尝试重定向到https。 由于ProxyPass仍然通过http转发,因此Tomcat将永远不会知道该请求实际上是加密的。 有一些可以解决此问题的技巧 (例如,连接器配置上的secure="true"
)或更合适的解决方案(例如, 通过AJP而不是http转发)
ProxyPass / ajp://localhost:8009/
(注意更改的端口)
可能会出现更多错误-万一这些提示无济于事,请进一步指定“无效”。
非常感谢! 特别是你,Olaf Kock。 您的建议是黄金! 就像您建议的那样,我决定忽略转发,而专注于尝试直接连接到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。
感谢大家!
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.