我正在使用Webfaction来托管我的一个Django Web应用程序。我一直在使用符号链接应用程序来提供我的媒体。最近我一直试图设置一个.htaccess文件来设置我所有图像的到期标题,但.htaccess文件还没有工作。我联系了Webfaction的支持,他们回答了这个问题:
"您没有在文件中看到过期标记,因为您没有从apache堆栈中提供feature_homemobile_fieldagent.jpg等文件。 / home / doc4design / webapps / django_2016 / doc4_2016 / media /目录下的所有内容都在https://my.webfaction.com/applications/971721/edit-application的符号链接应用之后由我们的前端nginx服务器提供。由于我们的nginx服务器不知道您的设置,因此未设置此类标记。 如果你想这样做,你需要删除符号链接应用程序并使用正确的别名和位置节更新你的httpd.conf。或者构建和配置您自己的nginx服务器,您可以完全控制其配置。"
我尝试在我的Apache2配置文件中添加一个新的Alias,但是我收到了这个错误
Invalid command 'Allow', perhaps misspelled or defined by a module not included in the server configuration
更新
我发现在Apache2.4上意味着它不再是“允许来自所有人”,而现在是“要求全部授予”#39;。我重置了我的服务器,一切顺利,我通过Webfaction暂时从我的网站上删除了我的Symlink应用程序。所有图片都停止投放,并停止在我的网站上显示。我等了10分钟,但没有任何改变。我还有一些额外的步骤吗?
Apache2 httpd.conf
ServerRoot "/home/doc4design/webapps/django_2016/apache2"
LoadModule authz_core_module modules/mod_authz_core.so
LoadModule dir_module modules/mod_dir.so
LoadModule env_module modules/mod_env.so
LoadModule log_config_module modules/mod_log_config.so
LoadModule mime_module modules/mod_mime.so
LoadModule rewrite_module modules/mod_rewrite.so
LoadModule setenvif_module modules/mod_setenvif.so
LoadModule wsgi_module modules/mod_wsgi.so
LoadModule unixd_module modules/mod_unixd.so
LoadModule headers_module modules/mod_headers.so
LoadModule expires_module modules/mod_expires.so
LoadModule filter_module modules/mod_filter.so
LoadModule deflate_module modules/mod_deflate.so
#LoadModule pagespeed_module modules/mod_pagespeed_ap24.so
<Directory /home/doc4design/webapps/django_2016/doc4_2016>
AllowOverride All
</Directory>
Alias /media/ /home/doc4design/webapps/django_2016/doc4_2016/media
<Directory /home/doc4design/webapps/django_2016/doc4_2016/media>
Allow from all
</Directory>
LogFormat "%{X-Forwarded-For}i %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
CustomLog /home/doc4design/logs/user/access_django_2016.log combined
ErrorLog /home/doc4design/logs/user/error_django_2016.log
Listen 30651
KeepAlive Off
SetEnvIf X-Forwarded-SSL on HTTPS=1
ServerLimit 1
StartServers 1
MaxRequestWorkers 5
MinSpareThreads 1
MaxSpareThreads 3
ThreadsPerChild 5
WSGIDaemonProcess django_2016 processes=2 threads=12 maximum-requests=100 python-path=/home/doc4design/webapps/django_2016:/home/doc4design/webapps/django_2016/doc4_2016:/home/doc4design/webapps/django_2$
WSGIProcessGroup django_2016
WSGIRestrictEmbedded On
WSGILazyInitialization On
WSGIScriptAlias / /home/doc4design/webapps/django_2016/doc4_2016/webapp/wsgi.py
答案 0 :(得分:1)
我看到你还在战斗。
注意: 对于HTTP缓存标头,您可以指定expires max, when you create a Webfaction Static app [oficial Webfaction docs]。但是,expires max很棘手,因为它将在未来设置一个到期日期,你将无法告诉客户端浏览器该文件已被更改。您必须重命名该文件(imageV1.jpg)...
Webfaction support should be able to set it for you如果您已经创建了静态应用(不是符号链接应用)。
您应该能够使用自己的apache实例提供静态服务。您正确地提到,对于Apache 2.4,您需要设置需要所有已授予的,但是在您的httpd.conf中我可以看到您仍在使用允许来自所有。
使用Apache 2.4提供Django App所需部分的简化表示是:
Alias /media/ /path/to/mysite.com/media/
Alias /static/ /path/to/mysite.com/static/
<Directory /path/to/mysite.com/static>
Require all granted
</Directory>
<Directory /path/to/mysite.com/media>
Require all granted
</Directory>
WSGIScriptAlias / /path/to/mysite.com/mysite/wsgi.py
<Directory /path/to/mysite.com/mysite>
<Files wsgi.py>
Require all granted
</Files>
</Directory>
您还可以从官方Django文档中查看Django Apache Serving Files。
我在服务静态资产时遇到的一个特殊的webfaction问题是有权限的。
转到www.yoursite.com/media/file.jpg
当您尝试访问图像时,会得到什么HTTP错误代码?
如果你得到403,试试这个:
chmod 710 $HOME/webapps/django_2016/doc4_2016/media/file.jpg
setfacl -m u:apache:r-x $HOME/webapps/django_2016/doc4_2016/media/file.jpg
祝你好运!