如何在Django与mod_wsgi中设置PYTHONHASHSEED环境变量?
如何在设置了PYTHONHASHSEED环境变量为随机值的情况下,用mod_wsgi运行Django?在Django的设置中这样设置是否合适?
os.environ['PYTHONHASHSEED'] = 'random'
1 个回答
2
mod_wsgi 4.1.0版本引入了一个新选项,你可以在Apache的配置文件中添加这个选项,具体可以查看这个链接:http://modwsgi.readthedocs.org/en/latest/release-notes/version-4.1.0.html。
WSGIPythonHashSeed random
如果你不能运行这个版本,那么你需要在Apache进程的启动环境中设置一个变量,这个设置会根据操作系统的不同而有所不同。比如在Fedora或RHEL 7中,你可以创建一个文件:/etc/systemd/system/httpd.service:
.include /lib/systemd/system/httpd.service
[Service]
Environment=PYTHONHASHSEED=random
然后运行命令 systemctl daemon-reload; systemctl restart httpd.service
来重新加载服务并重启Apache。如果你使用的是较早的Red Hat版本(没有systemd),你可以编辑文件 /etc/sysconfig/httpd。而在Debian系统中,相关文件是 /etc/apache2/envvars。
这里有一个WSGI文件可以用来测试是否正常工作(这个例子是根据mod_wsgi文档中的示例来的):
import sys
def application(environ, start_response):
status = '200 OK'
try:
hr = sys.flags.hash_randomization
if hr == 0:
output = 'Hash randomization disabled'
elif hr == 1:
output = 'Hash randomization enabled'
else:
output = 'Unknown hash randomization: ' + str(hr)
except AttributeError:
output = 'Hash randomization not supported'
response_headers = [('Content-type', 'text/plain'),
('Content-Length', str(len(output)))]
start_response(status, response_headers)
return [output]