WordPress Https 反向代理问题

终于正式的把blog给搬上K8s,去深度体验了一下大家口口相传的先进技术。不得不说的确先进,监控以及istio 简直方便到惊掉下巴。

当然这篇只是一个debug 的文章,记录自己在解决问题的时候的思路和具体步骤。

正文

迁移到新环境之后,出现了熟悉的 wp-admin 的重定向问题。一直进行循环重定向。

经验告诉我是 Siturl 配置又问题,所以就进行进行修正。

K3S 的local-path 挂载点在 /var/lib/rancher/k3s/storage/xxxx 所以配置的修改还是比较方便的。

在配置里面加上这部分配置,就相当于灵活的使用 https的 schema。

define('FORCE_SSL_ADMIN', true);
// If we're behind a proxy server and using HTTPS, we need to alert WordPress of that fact
// see also https://wordpress.org/support/article/administration-over-ssl/#using-a-reverse-proxy
 if (isset($_SERVER['HTTP_X_FORWARDED_PROTO']) && strpos($_SERVER['HTTP_X_FORWARDED_PROTO'], 'https') !== false) {
        $_SERVER['HTTPS'] = 'on';
}

define( 'WP_HOME', 'http://' . $_SERVER['HTTP_HOST'] . '/' );
define( 'WP_SITEURL', 'http://' . $_SERVER['HTTP_HOST'] . '/' );

随后就发生了循环重定向的问题,检查之前的配置。发现应该是这个 HTTP_X_FORWARDED_PROTO 标头没有打进来。因为前面的边缘路由是 Traefik,所以参考之前的配置在Helm里面加上

additionalArguments:
- '--entryPoints.web.forwardedHeaders.trustedIPs=192.168.0.0/24'

发现还是发生循环重定向,所以这里就继续定位。发现一个 http的定位好工具

var_dump($_SERVER);

把server的值都打印出来,看到里面有 ["HTTP_X_REAL_IP"]=> string(9) "127.0.0.6" 这么一段,意识到问题,因为之前在swarm 上部署的时候是使用 的host模式,流量直接通过网卡进CNI网网络。但是在k8s的模式下。前面是经过了一级别的转发的。所以在这里的trust 应该再加一个

additionalArguments:
- '--entryPoints.web.forwardedHeaders.trustedIPs=192.168.0.0/24,127.0.0.6'

这样就能拿到正确的xff的Header了

这样就不会出现 mixed content 导致的页面加载错误,完美结局