在Apache上通过Passenger 5.0.15使用Node.js,我正在寻找一种方法来检索Node.js http.IncomingMessage
object内的每个HTTP请求环境变量或任何替代方案。
每个请求环境变量的一个例子是Apache mod_rewrite设置的一个例子。这不是一个真实的例子,我知道任何与路径相关的细节都可以在Node应用程序中轻松检索。 Apache模块可以为请求 1 :
设置环境变量# Apache sets an environment variable for this HTTP request
RewriteRule path/([^/]+) - [E=pathvar:$1]
在Ruby的Rack中,the input environment is passed to request.env
。在PHP中,它被传递到$_SERVER["pathvar"]
。
Passenger确实试图设置它们,但这样做有点不正确by setting them for the entire Node.js process,与它们设置的HTTP请求无关。这可能会在Passenger中得到修复或更改,但无法帮助我找到每个请求变量。
console.log(process.env.pathvar);
// Has the value, but has been set for the entire Node.js process
// Subsequent requests retain the SAME value due to Passenger's current implementation
// Environment variables aren't present
// in the http server request object
var s = http.createServer(function(request, response) {
// undefined, which makes sense because they're not headers
console.log(request.headers.pathvar);
});
http
模块的支持,我该如何检索它们? http
模块,是否有支持它们的中间件? (我没有提到环境变量among Connect's middleware collection)1 我们试图解决的真实用例是检索Shibboleth用户身份验证属性,由Apache mod_shib设置为环境变量,类似于mod_rewrite在调用Node.js应用程序之前如何设置它们。事实上,这是首先涉及Apache + Passenger的原因。 Shibboleth配置中有一个可用但不合需要的解决方法,即将用户属性作为HTTP标头发送。 Node.js还有其他SAML模块,但是当前的基础设施已经依赖于Apache mod_shib。