【问题标题】:Wordpress and AWS CloudFront (Sorry, you are not allowed to access this page.)Wordpress 和 AWS CloudFront(抱歉,您无权访问此页面。)
【发布时间】:2017-10-02 16:53:36
【问题描述】:

我一直在将网站从经典托管迁移到 AWS (EC2 + CloudFront),我想使用 Flexible-SSL,这意味着客户端(浏览器)使用 SSL(HTTPS) 与 CloudFront 通信,并且 CloudFront 调用来源不安全地使用 HTTP。然后需要将 'home' 和 'siteurl' 设置为 'https://www.myowndomain.com' 以生成所有带有 https 的 URL 并避免重定向循环。

第一个问题是混合内容。我在 wp-config.php 中使用此代码解决了它(为了帮助需要它的人):

if (isset($_SERVER['HTTP_CLOUDFRONT_FORWARDED_PROTO']) && $_SERVER['HTTP_CLOUDFRONT_FORWARDED_PROTO'] == 'https'){
    $_SERVER['HTTPS']='on';
}

第二个问题还没有解决,花了我太多天...

当我进入 wp-login 并登录时...页面回复我:

403 - 抱歉,您无权访问此页面

如果我返回主页,会显示带有菜单栏的网站,但是当我单击一个选项时,它会再次以相同的消息(和 HTTP 状态)回复我。

来之前我做过的事情:

  • 禁用所有插件,重命名所有插件文件夹。
  • 使用 wp-cli 禁用插件。
  • 使用 wp-cli 在数据库中搜索并将所有“http://”字符串替换为“https://”。
  • 检查 homesiteurl wordpress 变量是否为“https://www.myowndomain.com”。
  • 将主题更改为默认主题。
  • 重新加载/删除 .htaccess
  • 启用 wordpress 日志并且没有任何记录。
  • 检查所有权限,显然一切正常。
  • 检查数据库表前缀配置。
  • 使用 Apache 服务器端的取证模块检查所有标头。一些 CloudFront 标头添加到请求中,但显然没有任何可能影响问题的内容。
  • 检查 wordpress 所需的所有 cookie 是否由浏览器发送并由 Apache 服务器通过 CloudFront 接收:wordpress_logged_in_ 和 wordpress_sec_
  • 稍微调试一下,在代码中添加一些检查点...但我不是 wordpress 开发人员,要理解为什么会发生这种情况,我花了很多时间。 403 页面是从函数 get_admin_page_parent() 中的 /var/www/html/wp-admin/includes/plugin.php 触发的。
  • 一次又一次地清理浏览器缓存。
  • 显然一遍又一遍地搜索。

真是一团糟!我采取的最后一项措施是进行全新的 wordpress 安装。结果……一样。

我现在卡住了。欢迎提出任何建议。

提前致谢。

【问题讨论】:

    标签: php wordpress apache amazon-web-services


    【解决方案1】:

    1) 在您的分配的 CloudFront 行为中,启用“将 HTTP 重定向到 HTTPS”。

    2) 您需要将以下代码添加到您的 wp-config.php。

    if (strpos($_SERVER['HTTP_X_FORWARDED_PROTO'], 'https') !== false)
    {
           $_SERVER['HTTPS'] = 'on';
    }
    
    if ( isset($_SERVER['HTTP_X_FORWARDED_FOR']) && !empty($_SERVER['HTTP_X_FORWARDED_FOR']) )
    {
            $ips = explode(',', $_SERVER['HTTP_X_FORWARDED_FOR']);
    
            $_SERVER['REMOTE_ADDR'] = trim($ips[0]);
    }
    elseif ( isset($_SERVER['HTTP_X_REAL_IP']) && !empty($_SERVER['HTTP_X_REAL_IP']) )
    {
            $_SERVER['REMOTE_ADDR'] = $_SERVER['HTTP_X_REAL_IP'];
    } elseif ( isset($_SERVER['HTTP_CLIENT_IP']) && !empty($_SERVER['HTTP_CLIENT_IP']) )
    {
            $_SERVER['REMOTE_ADDR'] = $_SERVER['HTTP_CLIENT_IP'];
    }
    

    【讨论】:

    • 谢谢约翰,首先,评论 CloudFront 配置为直通。您从浏览器请求或发送的所有内容都会转发到 Origin。另一方面,我按照您告诉我的做了,结果是: 1. 混合内容又回来了。 2. 当我进入 wp-admin 时,浏览器会进入重定向循环。
    • 这里是代码执行前后的变量值: Configuracion before: HTTP_X_FORWARDED_FOR 78.9.73.148 REMOTE_ADDR 216.133.41.75 HTTP_X_REAL_IP (empty) REMOTE_ADDR 216.133.41.75 HTTP_CLIENT_IP (empty) Configuracion after: HTTP_X_FORWARDED_FOR 78.9.73.148 REMOTE_ADDR 78.9.73.148 HTTP_X_REAL_IP (empty) REMOTE_ADDR 78.9.73.148 HTTP_CLIENT_IP (empty)
    【解决方案2】:

    做这个清单:

    首先,确认您的 wp-config.php 中有以下内容

    define( 'WP_HOME', 'https://example.com' );
    define( 'WP_SITEURL', 'https://example.com' );
    if (strpos($_SERVER['HTTP_X_FORWARDED_PROTO'], 'https') !== false)
               $_SERVER['HTTPS']='on';
    

    第二,确认您至少将HostOrigin 标头传递给源。

    第三,确认您在此配置下具有这些 Cloudfront 缓存行为:

    参考:https://aws.amazon.com/blogs/startups/how-to-accelerate-your-wordpress-site-with-amazon-cloudfront/

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-06-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多