You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

WP多站点配置AWS负载均衡与ACM SSL后HTTPS访问异常求助

解决AWS上WP多站点+ALB+ACM SSL的HTTPS访问问题

我之前在AWS上配置WordPress多站点+应用负载均衡(ALB)+ACM SSL证书时,遇到过和你几乎一模一样的问题,给你梳理下我当时排查和解决的关键步骤,应该能帮到你:

一、先检查负载均衡(ALB)的核心配置

  • 证书覆盖范围:确保你在ACM申请的证书同时包含foobar.com和www.foobar.com两个域名(申请时选「多域名证书」或者用通配符*.foobar.com),如果证书只覆盖其中一个,另一个域名的SSL请求肯定会出问题。
  • 监听器设置:
    • 80端口:配置为HTTP到HTTPS的重定向(不要直接转发到EC2),这样所有HTTP请求都会自动跳转到HTTPS。
    • 443端口:绑定你的ACM证书,转发协议选HTTP(因为ALB已经终止了SSL,EC2只需要处理HTTP请求即可),目标组指向EC2的80端口。
  • 目标组健康检查:确认ALB的目标组显示EC2实例是「健康」状态,如果健康检查失败,请求会直接超时。
  • DNS解析:不管是foobar.com还是www.foobar.com,DNS解析都要指向ALB的CNAME地址(不要直接解析到EC2实例),这是很多人容易犯的错误,会导致超时或SSL失效。

二、EC2上Apache(httpd)的配置调整

  • 启用X-Forwarded-Proto头部识别:因为ALB会把HTTPS请求转换成HTTP转发给EC2,WordPress需要知道原始请求是HTTPS的,否则会出现跳转错误。在httpd.conf或者你的虚拟主机配置文件中添加:
SetEnvIf X-Forwarded-Proto "https" HTTPS=on
  • 允许.htaccess生效:确保虚拟主机配置里有AllowOverride All,因为WordPress多站点的重写规则完全依赖.htaccess文件,否则自定义的重写规则不会生效:
<Directory /var/www/html>
    AllowOverride All
    Require all granted
</Directory>
  • 重启Apache服务:修改配置后记得执行sudo systemctl restart httpd(CentOS/RHEL)或者sudo systemctl restart apache2(Ubuntu)让配置生效。

三、wp-config.php的关键配置

在wp-config.php文件末尾添加以下代码,强制WordPress使用HTTPS并适配多站点环境:

// 强制后台使用HTTPS
define('FORCE_SSL_ADMIN', true);

// 动态识别HTTPS协议,适配ALB转发
if (isset($_SERVER['HTTP_X_FORWARDED_PROTO']) && $_SERVER['HTTP_X_FORWARDED_PROTO'] === 'https') {
    $_SERVER['HTTPS'] = 'on';
}
define('WP_SITEURL', 'https://' . $_SERVER['HTTP_HOST']);
define('WP_HOME', 'https://' . $_SERVER['HTTP_HOST']);

// 多站点Cookie安全设置,避免登录或会话问题
define('COOKIE_SECURE', true);
define('COOKIE_HTTPONLY', true);
define('COOKIE_SAMESITE', 'Strict');

// 多站点核心配置(根据你的模式调整)
define('DOMAIN_CURRENT_SITE', 'foobar.com'); // 主域名
define('SUBDOMAIN_INSTALL', true); // 子域名模式设为true,子目录模式设为false
define('PATH_CURRENT_SITE', '/');
define('SITE_ID_CURRENT_SITE', 1);
define('BLOG_ID_CURRENT_SITE', 1);

四、更新WordPress多站点的.htaccess规则

替换你的.htaccess文件内容为以下适配HTTPS的规则(子域名模式,子目录模式可以参考WP后台给出的规则调整):

RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]

# 强制HTTPS跳转(适配ALB的X-Forwarded-Proto头部)
RewriteCond %{HTTP:X-Forwarded-Proto} !=https
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]

# 处理wp-admin的尾部斜杠
RewriteRule ^wp-admin$ wp-admin/ [R=301,L]

RewriteCond %{REQUEST_FILENAME} -f [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^ - [L]
RewriteRule ^(wp-(content|admin|includes).*) $1 [L]
RewriteRule ^(.*\.php)$ $1 [L]
RewriteRule . index.php [L]

五、排查你遇到的具体问题

  • https://foobar.com超时:先检查根域名的DNS解析是否指向ALB,再看ALB目标组的EC2实例是否健康,EC2的安全组是否允许ALB的80端口流量(不要只允许443,因为ALB转发的是HTTP到EC2的80)。
  • https://www.foobar.com SSL被忽略:优先检查ACM证书是否包含www.foobar.com,然后看ALB的443监听器是否绑定了正确的证书,最后确认www域名的DNS解析是否指向ALB。

最后说句题外话,确实,如果是简单的WordPress站点,WPEngine这类托管服务确实能省掉很多服务器配置的麻烦,但AWS的优势在于灵活性和可扩展性,折腾完这套流程也能学到不少东西😉

内容的提问来源于stack exchange,提问作者HelloWorld

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.14 09:04:35