在 Apache 2.2.17 中让 mod_geoip 与 mod_wsgi 一起工作
Posted
技术标签:
【中文标题】在 Apache 2.2.17 中让 mod_geoip 与 mod_wsgi 一起工作【英文标题】:Getting mod_geoip to work with mod_wsgi in Apache 2.2.17 【发布时间】:2011-03-25 16:19:50 【问题描述】:我想从以守护程序模式在 mod_wsgi 上运行的 Django 访问 GEOIP_COUNTRY_CODE
环境变量。问题是,我可以从服务器上运行的 php 脚本中看到该变量,但它似乎没有通过 WSGI 传递到我的 Django 站点。
request.META.get('GEOIP_COUNTRY_CODE')
不起作用。
mod_wsgi 中是否有类似WSGIPassAuthorization
的附加环境变量?
【问题讨论】:
您首先在哪里设置 GEOIP_COUNTRY_CODE?如果不知道它是在哪里/如何设置的,就无法回答这个问题。 AFAICT 它由 Apache2 中的 mod_geoip 设置。 【参考方案1】:如果变量被扩展模块设置为环境变量,那么它可以被访问为:
import os
value = os.environ['GEOIP_COUNTRY_CODE']
即,就像任何其他环境变量一样。
更新 1:
如果在 Apache 模块中设置,例如 mod_geoip,则将其传输到 WSGI 应用程序领域的唯一方法是在 Apache 请求结构的 req.subprocess_env 中设置。即,就像在 Apache 中使用了 SetEnv 指令一样。在这种情况下,它应该出现在传递给 WSGI 应用程序的 WSGI 环境字典中。
要尝试验证是否发生这种情况,请使用以下所示的 WSGI 回显测试脚本:
http://code.google.com/p/modwsgi/wiki/DebuggingTechniques#Displaying_Request_Environment
【讨论】:
也试过了,但GEOIP_COUNTRY_CODE
不包含在 os.environ 字典中。
似乎从 Django 1.3 开始,WSGi 环境字典被合并到 request.META 中,所以现在我可以轻松调用 request.META.get('GEOIP_COUNTRY_CODE') 来获得我想要的值。
我怀疑合并只是 Django 1.3。你总是能够通过 Django 请求对象访问 WSGI 环境字典,我非常怀疑他们会改变这样做的方式,因为它会破坏很多使用现有做事方式的东西.以上是关于在 Apache 2.2.17 中让 mod_geoip 与 mod_wsgi 一起工作的主要内容,如果未能解决你的问题,请参考以下文章