Apache Web 服务器配置 - HTTP 到 HTTPS 不起作用



我已经在这里待了两个星期了,但仍然一无所获。更奇怪的是,我已经在不同的服务器上完成了此操作并且它有效,所以我不明白为什么这不起作用。在这里真的很沮丧。

我正在尝试在我的RHEL上配置我的apache Web服务器,以便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>

当我说我已经尝试了这么多不同的组合但什么都没有时,请相信我。我已经评论和取消评论包括conf.d/ssl.conf,仍然没有效果。

拜托,我在这里做错了什么?

首先:"不起作用"是一个相当弱的描述。我可能会也可能不会遇到您的问题,但我看到几个选项:

首先:测试转发是否有效

第二:连接到https服务器时的结果是什么?您可以在没有转发的情况下尝试此操作 - 只需自己键入https协议并确定是否可以完全排除转发配置。

我已经在不同的服务器上完成了此操作,并且它有效

您要转发到localhost:8080.如果另一台服务器在端口 8080 上安装了(并正在运行)了 tomcat,但您现在正在尝试的服务器没有 - 好吧,这是您的解决方案。本地主机始终是"同一"计算机。

正如Ortomala Lokni在评论中提到的:您的ProxyPassReverse指令缺少/

ProxyPassReverse / http://localhost:8080/

请注意,使用此配置,tomcat 将不知道原始请求已通过 https 发送 - 因此 tomcat 上的任何机密声明都假定请求已以明文形式发送 - 它将尝试重定向到 https。由于 ProxyPass 仍然通过 http 转发,Tomcat 永远不会知道请求实际上是加密的。有一些技巧可以解决这个问题(例如secure="true"连接器配置)或更合适的解决方案(例如通过 AJP 而不是 http 转发)

ProxyPass / ajp://localhost:8009/

(请注意更改的端口)

可能会出现更多错误 - 如果这些提示没有帮助,请更多地指定"不起作用"。

非常感谢!尤其是你,奥拉夫·科克。你的建议是金色的!就像您建议的那样,我决定忘记转发并专注于尝试直接连接到HTTPS时会发生什么,这就是我遇到此错误的时候:

proxy: HTTP: disabled connection for (localhost)

我做了一些搜索,发现我必须运行以下命令才能让事情顺利进行:/usr/sbin/setsebool -P httpd_can_network_connect 1

(请注意,此命令还有其他变体,例如:setsebool -P httpd_can_network_connect onsudo setsebool -P httpd_can_network_connect on)

然后我必须在 ssl.conf 文件中的<VirtualHost _default_:443>标签下设置这些:

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。

谢谢大家!

最新更新