不通过Apache为Django应用程序提供的静态文件

时间:2016-06-26 17:44:38

标签: django httpd.conf webfaction

我花了一整天的时间。我无法提供我的静态文件。我的Django应用程序运行正常。我正在使用:Python 3.4,Django 1.8.13,mod_wsgi 4.5.2。我已经使用SO中的其他问题解决了我的httpd.conf中的大多数错误。还需要做更多工作。

的httpd.conf

ServerRoot "/home/rajkumar2014/webapps/allure/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 alias_module      modules/mod_alias.so

LogFormat "%{X-Forwarded-For}i %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
CustomLog /home/rajkumar2014/logs/user/access_allure.log combined
ErrorLog /home/rajkumar2014/logs/user/error_allure.log

Listen 21188
KeepAlive Off
SetEnvIf X-Forwarded-SSL on HTTPS=1
ServerLimit 1
StartServers 1
MaxRequestWorkers 5
MinSpareThreads 1
MaxSpareThreads 3
ThreadsPerChild 5

WSGIRestrictEmbedded On
WSGILazyInitialization On

<VirtualHost *:21188>

    Alias /media "/home/webapps/allure_media"
    Alias /static "/home/webapps/allure_static"

    <Directory /home/rajkumar2014/webapps/allure_media>
    Require all granted
    </Directory>

    <Directory /home/rajkumar2014/webapps/allure_static>
    Require all granted
    </Directory>

    WSGIDaemonProcess allure processes=2 threads=12 python-path=/home/rajkumar2014/webapps/allure/allure:/home/rajkumar2014/webapps/allure/lib/python3.4/site-packages:/home/rajkumar2014/webapps/allure/lib/python3.4
    WSGIProcessGroup allure

    WSGIScriptAlias / /home/rajkumar2014/webapps/allure/allure/allure/wsgi.py
    <Directory /home/rajkumar2014/webapps/allure/apache2>
    Require all granted
    </Directory>

</VirtualHost>

settings.py

STATIC_URL = '/static/'

STATIC_ROOT = '/home/rajkumar2014/webapps/allure_static/'

STATICFILES_DIRS = (os.path.join(BASE_DIR, "static"),)

# Media files (All user uploaded content)

MEDIA_ROOT = '/home/rajkumar2014/webapps/allure_media/'

MEDIA_URL = '/media/'

请帮助。

2 个答案:

答案 0 :(得分:1)

我自己是djano / python的新手,上个月为我的第一款django应用打了这场战斗......我不是服务器管理员所以我无法说出你做错了什么但似乎你的语法与我所做的有点不同,我喜欢

 Alias /static/ /home/ksjdsd3/public_html/mysite/static/
<Directory /home/ksjdsd3/public_html/mysite/static>
  Require all granted
</Directory>

最值得注意的是,静态之后有一个/目录的路径不在引号中

答案 1 :(得分:0)

我曾经在使用Webfaction服务静态文件时遇到问题,这取决于我安装Django的方式(使用webfaction安装程序,你可以设置一个完整的django应用程序或只是一个apache / mod_wsgi应用程序,你可以部署你的django版本) 。

Webfaction在根级别运行了一个额外的nginx进程,用于提供静态文件。因此,您应该检查访问控制列表 - ACLs

对我来说,这个ACL曾经是问题, nginx用户对静态文件夹没有读取权限

所以也许你可以在webfaction上登录UNIX终端并运行getfacl(你应该得到类似于这个输出的东西):

[rajkumar2014@webXXX ~]$getfacl /home/rajkumar2014/webapps/allure_static/

# file: home/rajkumar2014/webapps/allure_static/
# owner: rajkumar2014
# group: rajkumar2014
user::rwx
user:apache:r-x
user:nginx:r-x
group::rwx
mask::rwx
other::r-x

[rajkumar2014@webXXX ~]$ getfacl /home/rajkumar2014/webapps/allure/allure/allure/wsgi.py
getfacl: Removing leading '/' from absolute path names
# file: home/rajkumar2014/webapps/allure/allure/allure/wsgi.py
# owner: rajkumar2014
# group: rajkumar2014
user:apache:r-x
user:nginx:r-x
group::rw-
mask::rwx
other::--

这就是apache用户和nginx用户应该对你的静态文件夹以及wsgi.py(如果它是从外部源 - 你的笔记本电脑上传)的读取权限。

还要检查日志中的静态文件夹的错误和引用:

  • 前端日志,nginx进程服务静态;位置:

    /home/rajkumar2014/logs/frontend/

  • 用户日志,用户安装的应用程序(如 Django

    /home/rajkumar2014/logs/user/

我很想知道:

  • 你使用过Webfaction Django安装程序吗?
  • 您是否创建了webfaction app to serve static assets
  • 您可以在frontend日志中找到对静态文件夹的引用吗?
  • 您有旧的(Centos 6.5,Apache 2.2)或新的(Centos 7,Apache 2.4)Webfaction计划吗?

Webfaction Docs

中的更多相关信息