3

我有一个ec2实例,使用apache2作为Web服务器正确安装了我的网站文件。 ec2被配置为只接收来自elb的端口80上的http流量(非常确定,但不是100%)。 elb有一个https监听器(端口443)和一个http监听器(端口80)。根据aws文档解密数据后,elb将流量发送到ec2实例。我的问题是,我无法弄清楚如何将所有流量重定向到http到https的负载均衡器。Apache2不重定向到https

我试着在网站的虚拟主机和apache2.conf中使用这个重写规则,但它没有任何一种效果(也没有错误)。

RewriteEngine On 
RewriteCond %{HTTP:X-Forwarded-Proto} !https 
RewriteRule ^.*$ https://%{SERVER_NAME}%{REQUEST_URI} 

整个虚拟主机看起来像这样(位于/etc/apache2/sites-available/SewaneeEats.conf):

ServerName classicloadbalancer-1929710381.us-east-1.elb.amazonaws.com 
ServerAdmin [email protected] 
DocumentRoot /var/www/html/SewaneeEats/public 

<Directory /var/www/html/SewaneeEats> 
    RewriteEngine On 
    RewriteCond %{HTTP:X-Forwarded-Proto} !https 
    RewriteRule ^.*$ https://%{SERVER_NAME}%{REQUEST_URI} 
    AllowOverride All 
</Directory> 

ErrorLog ${APACHE_LOG_DIR}/error.log 
CustomLog ${APACHE_LOG_DIR}/access.log combined 

我也可以确认该模块重写已启用。

所以当我输入网址sewaneeeats.com(这些链接是活的,如果你需要检查出来),它仍然是sewaneeeats.com(没有任何ssl),而不是重定向。我知道ssl正在处理https://www.sewaneeeats.com。在https://sewaneeeats.com上,我在chrome的url栏中看到一个破损的ssl红色符号。我认为它在https://sewaneeeats.com网址上被破坏的原因是因为该证书是为www子域名注册的,但我不确定。该域使用aws的路由53控制台进行配置,因此如果它有帮助,我可以提供相关信息。

任何帮助将非常感激,因为我一直试图找出这约12小时左右。本来会在serverfault.com上发布这个,但是我不能,因为当我在10个代表下时,我只能有一个问题的2个链接。

+0

其中是sewaneeeats.com到www.sewaneeeats.com重定向在您的配置?至于SSL证书,我看到您使用的是由亚马逊发行的证书,您可以将附加域名添加到证书中,只需添加sewaneeeats.com和www.sewaneeeats.com(您可能必须创建新证书) – at0mzk

+0

@ at0mzk重写规则位于站点的虚拟主机配置文件中,即/etc/apache2/sites-available/SewaneeEats.conf文件。我将尝试向证书添加其他域 – Daniel

+1

@ at0mzk我最终创建了一个新证书,该证书添加了所有子域以及裸域。感谢您的提示! – Daniel

回答

-1

我通常使用下面的规则将所有流量重定向到https:

RewriteCond %{HTTPS} =off 
RewriteRule ^/(.*) https://%{SERVER_NAME}/$1 [R,L] 

另外,如果你想全局应用规则的虚拟主机无需放置指令之间的重写规则。

+0

谢谢你的帮助,但这没有奏效。由于我使用的是弹性负载均衡器,负载均衡器应该在通过http接收请求时设置x-forward-proto头。然后,在apache2 conf中,我应该能够重写请求(使用上述配置),但是这没有任何影响 – Daniel