首先,我的服务器位于负载均衡器后面。我的SSL证书位于负载平衡器上,并处理HTTPS。端口443上输入的数据通过端口80上的HTTP使用HTTP转发到Wordpress服务器。但是,wordpress和php不知道我的服务器配置。这会导致浏览器对我有效的SSL证书的有效性产生怀疑。

为解决此问题,我在functions.php中添加了以下代码。我在这里找到了此代码,并且得到了法典的同意。

/**
 * Make PHP HTTPS aware via HTTP_X_FORWARDED_PROTO
 */
if(isset($_SERVER['HTTP_X_FORWARDED_PROTO']) && $_SERVER['HTTP_X_FORWARDED_PROTO'] == 'https') {
    $_SERVER['HTTPS']='on';
}


这对前端非常有用,但是现在即使使用我的Admin帐户也无法访问/ wp-admin /。登录后,我收到一条消息,“抱歉,不允许您访问此页面。”没有提供其他帮助。

因此,我在wp-admin文件夹中进行了搜索,发现“抱歉,不允许您访问此页面”。会在17个不同的时间出现。

大多数错误消息都与用户权限检查相关。

如何使HTTPS保持打开状态并保留管理员访问权限?

摘要:


向功能添加HTTP_X_FORWARDED_PROTO逻辑之前。 php我可以在函数中添加HTTP_X_FORWARDED_PROTO逻辑后访问wp-admin /
。php我在函数中删除HTTP_X_FORWARDED_PROTO逻辑后不能访问wp-admin /

更新:

我发现错误消息来自wp-admin / menu.php,而这部分代码位于底部。我在错误末尾添加了menu.php,以弄清它是这个文件。

if ( !user_can_access_admin_page() ) {

    /**
     * Fires when access to an admin page is denied.
     *
     * @since 2.5.0
     */
    do_action( 'admin_page_access_denied' );

    wp_die( __( 'Sorry, you are not allowed to access this page. menu.php'), 403 );
}


我仍然不知道如何解决此问题。

评论

您无需对配置的其余部分说太多。您是否设置了define('FORCE_SSL_ADMIN',true);

我没有定义“ FORCE_SSL_ADMIN”。我会尝试的。
您需要检查是否也通过HTTP从负载均衡器发送了https cookie。听起来好像没有发送。显然,还需要检查另一种方法,即您设置的cookie是否通过https传输。

#1 楼

特别感谢user42826。

根据编解码器:


如果WordPress托管在提供SSL的反向代理的后面,但是托管在没有SSL的自身之上,则这些选项将首先发送任何内容请求进入无限重定向循环。为避免这种情况,您可以配置WordPress以识别HTTP_X_FORWARDED_PROTO标头(假设您已经正确配置了反向代理来设置标头)。


以下操作将解决此问题。

将其添加到wp-config.php。 (编解码器参考)

/* SSL Settings */
define('FORCE_SSL_ADMIN', true);

/* Turn HTTPS 'on' if HTTP_X_FORWARDED_PROTO matches 'https' */
if (strpos($_SERVER['HTTP_X_FORWARDED_PROTO'], 'https') !== false) {
    $_SERVER['HTTPS'] = 'on';
}


从不必要的功能中删除此函数。

/**
 * Make PHP HTTPS aware via HTTP_X_FORWARDED_PROTO
 */
if(isset($_SERVER['HTTP_X_FORWARDED_PROTO']) && $_SERVER['HTTP_X_FORWARDED_PROTO'] == 'https') {
    $_SERVER['HTTPS']='on';
}


评论


原因是安全会话cookie在负载均衡器后面时会丢失,因为LB正在使用SSL,但后端是纯http。很高兴看到其他人在企业级架构上工作;)

–user42826
16 Dec 24'3:02

@ user42826这种设置的好处是,如果我想禁止管理员访问,可以将FORCE_SSL_ADMIN注释掉,或者是否有其他副作用使我重新考虑这种思路?

–nu珠穆朗玛峰
16 Dec 24 '15:32



在您的设置中,听起来好像没有设置FORCE_SSL_ADMIN会阻止管理员访问,但是根据您的要求,有更好的方法来执行此操作。示例:阻止在.htaccess或apache配置中访问wp-admin或wp-login.php,通过插件删除WP本机身份验证,重新架构WP,以使wp-admin URL与公共URL不同,等等。

–user42826
16 Dec 25 '18:42

确保将此代码添加到require_once(ABSPATH。'wp-settings.php');之前;线。特别感谢jtl在这个答案中。

– Aaroninus
17年9月14日在16:02

@Aaroninus谢谢,我使用Cloudflare flexible SSL,如果没有您的评论,我会花时间再次搜索。我之前发现了这个相关问题:wordpress.stackexchange.com/questions/170165/…

–baptx
17/12/21在12:33