Apache Web服务器配置 - HTTP到HTTPS无法正常工作

时间:2018-01-28 06:46:14

标签: apache

我已经在这里呆了两个星期了,但仍然没有。什么甚至奇怪的是我在另一台服务器上完成了这项工作并且它有效,所以我不明白为什么这不起作用。真的很沮丧。

我尝试在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,仍然没有效果。

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

2 个答案:

答案 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 onsudo 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。

谢谢大家!