【问题标题】:Error when adding Alias to Apache2 config file将别名添加到 Apache2 配置文件时出错
【发布时间】:2018-03-02 07:40:32
【问题描述】:

我正在使用 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 配置文件添加新别名,但出现此错误

Invalid command 'Allow', perhaps misspelled or defined by a module not included in the server configuration

更新

我发现在 Apache2.4 上意味着它不再是“全部允许”,现在是“要求全部授予”。我重置了我的服务器,一切顺利,我通过 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

【问题讨论】:

    标签: apache2 alias media httpd.conf


    【解决方案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,您需要设置 Require all grant,但是在您的 httpd.conf 中,我可以看到您仍在使用 Allow from all

    使用 Apache 2.4 为 Django 应用程序提供服务所需的部分的简化表示是:

    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 Apache Serving Files,来自官方 Django 文档。

    我在提供静态资产时遇到的一个特定的 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
    

    祝你好运!

    【讨论】:

    • 哈,是的,还在战斗。我提出的问题数量增加了很大比例,而且都是基于 Apache 或 Apache 模块的。不过,它的好处是我学到了很多东西。我会试试这个。谢谢 ionescu77
    • 另外,我是否需要在 Webfaction 中创建一个“仅静态”应用程序才能通过我的 Apache 服务器提供文件,还是根本不需要应用程序?
    • 如果只创建静态,则静态和媒体不需要apache。我的 Webfaction django 设置(针对一个项目/网站): - 我在 WF 面板中创建了一个 django 应用程序(这实际上将在 $HOME/webapps/yourApp 中安装一个带有 mod_wsgi 和预配置 django 项目的 apache 实例) - 默认情况下将为您服务Django 动态页面 - 我为媒体创建了一个静态应用程序(我曾经将图像放在这里,但 django 仅将 MEDIA 用于通过您的网站/项目上传的文件) - 我为静态(jpg、css、js 一切 django)创建了一个静态应用程序STATIC 中的商店)希望这会有所帮助!祝你好运
    猜你喜欢
    • 2014-08-29
    • 2022-11-02
    • 1970-01-01
    • 1970-01-01
    • 2011-11-28
    • 2015-06-24
    • 2013-07-27
    • 2016-04-30
    • 1970-01-01
    相关资源
    最近更新 更多