事件场景

如果我们使用内网穿透把本地的 wordpress 服务穿透到公网上,同时希望仍能用内网 ip 访问后台的话,会遇到 wordpress 主站地址冲突的问题,即 wordpress 不知道要把内网 ip 当作地址还是把公网访问用的域名当作地址。

比如你的内网地址是192.168.1.114

外网地址可能是106.114.514.191,然后再套个dns,比如什么114514.persist1.cn

这是ipv4的情况,ipv6的太长了,反正一个情况

那wordpress到底用哪个?🫤

如果我们使用 https 协议访问 wordpress 会遇到无法登录进管理后台的问题。

内网穿透下的地址冲突

wordpress 会有两个重要参数

1.wordpress 地址

2.站点地址

tips: 大部分情况下个人网站两个值是一样的

正常来说,内网的wordpress后台管理应该是上图这样,显示的是内网的ip端口,比如这里的10.0.15.103就是我服务器的内网ipv4地址;

那你穿透后,使用外网的ip端口访问时,就会出现 502 Bad Gateway 错误响应,这显然是我们不想见到的。

解决方案

wp-config.php文件里添加下面两行(别着急实操,先看到后面):

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

可以自行定义http访问时的wordpress 地址站点地址

我们可以通过区分https访问和http访问来解决内网访问和外网访问的地址冲突

if(is_numeric(substr($_SERVER['HTTP_HOST'],0,1)))
{
        $http_type = 'http://';
}
else
{
        $http_type = 'https://';

		$_SERVER['HTTPS'] = 'on';
		define('FORCE_SSL_LOGIN', true);
		define('FORCE_SSL_ADMIN', true);
}

define('WP_SITEURL', $http_type . $_SERVER['HTTP_HOST']);
define('WP_HOME', $http_type . $_SERVER['HTTP_HOST']);

内网用http,外网用https(外网访问挂个ssl证书开tls验证)

同时https访问时,会开启https访问标识,并强制https登录

这段代码放在wp-config.phpwp-settings.php中,都有效果

此时,问题解决🥰