访问 AWS EB PHP 5.4 上的 http X_* 标头

Posted

技术标签:

【中文标题】访问 AWS EB PHP 5.4 上的 http X_* 标头【英文标题】:Access to http X_* headers on AWS EB PHP 5.4 【发布时间】:2017-05-24 19:11:59 【问题描述】:

我已将 Wordpress 部署到 AWS EB 平台 php 5.4.45。当我使用 cookie 授权从 Angular 前端向 API 发出请求时,我需要包含 X_WP_NONCE 标头,否则,Wordpress 将忽略我的身份验证 cookie。

问题在于,在 EB 部署中,$_SERVER 变量中没有 X_WP_NOCE。也没有HTTP_X_WP_NONCE。根本没有随机数。

看起来所有以X_* 为前缀的标头都被删除了。

curl -XGET -H 'A: this works' -H 'X_A: this does not work' http://example.com/

var_dump($_SERVER);

--->

array(76) 
...
["HTTP_A"]=>
  string(19) "this works"
...

// But no HTTP_X_A variable
)

很遗憾,X_WP_NONCE 是 wordpress 核心的一部分,我无法编辑此代码。

如何告诉 EB 将 X_* 标头传递给 php?

谢谢,

更新 1: apache_request_headers() 确实看到了所需的标头。

【问题讨论】:

什么是 AWS EBT 平台?没有缩写为 EBT 的服务。你是说 Elastic Beanstalk 吗? @MarkB Elastic Beanstalk,人们偶尔称之为EBT 豆茎是指豆类植物的茎。如果您要(错误地)将其拆分为两个词,那将是“Bean Stalk”而不是“Beans Talk”。 考虑到在 Google 搜索“AWS EBT”时,这个问题是最重要的结果,我认为可以很安全地得出结论,没有人在野外将 Elastic Beanstalk 称为“EBT”。我建议使用“EB”以避免混淆,因为这是 Stack Overflow 上的缩写。 【参考方案1】:

由于我已将自定义 wp-config.php 提交到 repo(它从环境变量中读取密钥和密码,请不要嘘),我可以添加一个临时解决方法

if (function_exists('apache_request_headers')) 
  $all_headers = apache_request_headers();
  $_SERVER['HTTP_X_WP_NONCE'] = $all_headers['HTTP_X_WP_NONCE'];

【讨论】:

以上是关于访问 AWS EB PHP 5.4 上的 http X_* 标头的主要内容,如果未能解决你的问题,请参考以下文章

AWS EB CLI Django

AWS EC2 EB 上的 .htaccess 在哪里

在 ELB 后面可访问的 AWS EB url

AWS Cognito 可以在 EB 上的 Node/Express/React 应用程序中使用吗?

Heroku 上的 Laravel 5.4。 Forbidden 您无权访问此服务器上的 /

AWS EFS 是不是足够快以执行 PHP 代码?