我在 Ubuntu Server 12.04 上使用 Django 运行 mod_wsgi,但似乎无法让 mod_headers 正常工作。我运行了 a2enmod 标头,并收到需要重新启动 apache 才能使其工作的响应,我已经这样做了。我添加了一个简单的指令,以便服务器在响应请求时包含一个虚拟标头属性/值,这只是一个测试,但它没有被处理。从我在 Firebug 中的网络选项卡中看到的情况来看,没有任何迹象。
我在服务器上请求的文件被成功访问,并且它被返回到浏览器,没有任何问题,内容正确。它只是没有那个额外的标头。这是我的 /etc/apache2/sites-available/DOMAIN 文件的样子(但 DOMAIN 被替换为我的实际域):
<VirtualHost *:80>
ServerAdmin root@DOMAIN
ServerName DOMAIN
Alias /static/ /srv/project/app/webapp/static/
Alias /robots.txt /srv/project/app/webapp/site_media/robots.txt
Alias /favicon.ico /srv/project/app/webapp/site_media/favicon.ico
CustomLog "|/usr/sbin/rotatelogs /srv/project/logs/access.log.%Y%m%d-%H%M 60M" combined
ErrorLog "|/usr/sbin/rotatelogs /srv/project/logs/error.log.%Y%m%d-%H%M 60M"
LogLevel info
WSGIDaemonProcess DOMAIN user=rtf group=rtf processes=1 threads=15 maximum-requests=10000 python-path=/srv/project/venv/lib/python2.7/site-packages python-eggs=/srv/project/run/eggs
WSGIProcessGroup DOMAIN
WSGIScriptAlias / /srv/project/app/conf/apache/django.wsgi
<Directory /srv/project/app/webapp/site_media>
Order deny,allow
Allow from all
Options -Indexes FollowSymLinks
</Directory>
<Directory /srv/project/app/conf/apache>
Order deny,allow
Allow from all
</Directory>
Header set MyHeader "It took %D microseconds for Apache to serve this request."
</VirtualHost>
上面的“MyHeader”未被添加到响应中。
我尝试再次安装 mod_headers,以防第一次出现我不知道的问题,但 a2enmod 告诉我它已经安装好了。
顺便说一句,我最终想要实现的是在某些文件请求的返回标头中将 Content-Disposition 设置为“附件”,这样当对符合特定模式的文件进行 GET 时,它将在浏览器中触发另存为对话框。
有人能指出问题出在哪里吗?
答案1
我让它工作了。之前它不工作的原因实际上与配置本身无关,而是因为我只获得了位于 /etc/apache2/sites-available/ 中的配置(在问题中发布)
因此,我也将其添加到 /etc/apache2/sites-enabled/ 中,新标头被很好地拾取。实际上,强制 Content-Disposition 对浏览器没有影响,即当客户端发出将 Content-Disposition 设置为附件的 GET 请求时,浏览器仍然拒绝打开另存为对话框。
看起来我必须在设置了下载属性的网页中动态插入一个超链接,然后尝试以编程方式强制点击该链接。但那是另一个问题。