负载均衡器

时间:2017-01-10 21:27:57

标签: wordpress amazon-web-services ssl https

我在AWS EC2实例上运行了一个Wordpress网站。这是通过AWS Elastic Load Balancer提供的,该平衡器启用了HTTPS,并带有我从亚马逊获得的证书。

目的是同时提供网站的http和https版本。加载http版本可以正常工作。

但是,当我加载https版本时,我收到混合内容错误,因为get_template_directory_uri()始终返回http链接。负载均衡器的工作方式是TLS终止于LB,并通过端口80与实际的EC2实例进行通信。因此,实例本身没有HTTPS。

这很多都超出了我的治愈技能。我知道这足以弄清楚问题似乎是什么,但我真的不确定解决问题的正确方法是什么。

假设我仍然想要同时提供页面的http和https版本(页面上没有电子商务或身份验证 - 它只是提供信息),我应该如何解决此问题?

仅供参考,EC2实例在Amazon ABI上运行,基本上是RHEL。

1 个答案:

答案 0 :(得分:2)

首先,您会发现很难同时运行相同数据库数据的http和https WordPress版本,因为WordPress会将大量链接保存为绝对链接(即使用http(s)://mydomain.com部分)和很多插件都不打扰适应当前的协议。

您最好的选择是通过htaccess文件重定向,将所有http流量重定向到https。

话虽如此,你可以通过get_template_directory_uri使用的过滤器实现你所要求的一种方式:

add_filter('template_directory_uri', 'smart_template_directory_uri', 10, 3);
function smart_template_directory_uri($template_dir_uri, $template, $theme_root_uri) {
    return preg_replace('/^https?\:/i', '//', $template_dir_uri); // replace "http://" or "https://" by "//", which browsers will automatically set to the current page's protocol
}

希望这有帮助!