2017-04-07 80 views
0

我使用Apache与mod_wsgi来为项目提供服务,它是静态文件。Django - Apache与mod_wsgi不提供静态文件

我用官方文档"How to use Django with Apache and mod_wsgi"和一切工作正常,除了没有找到静态文件。我还没有找到任何好的方法来调试这个问题,甚至没有找到可以指向错误的特定消息。

我做了什么至今:

  • 双重检查的静态文件是正确的静态文件目录的地方。

    [..] 
    DEBUG = False 
    STATIC_ROOT = '/var/www/djangoProject/static-files' 
    STATIC_URL = '/static/' 
    

    的Apache设置:

    WSGIDaemonProcess djangoProject 
    
    WSGIProcessGroup djangoProjectGroup 
    WSGIApplicationGroup %{GLOBAL} 
    
    WSGIPythonHome /var/www/djangoProject/venv/lib/python2.7/site-packages 
    WSGIPythonPath /var/www/djangoProject/ 
    
    WSGIScriptAlias//var/www/djangoProject/djangoProject/wsgi.py 
    <Directory /var/www/djangoProject/djangoProject> 
        <Files wsgi.py> 
         Require all granted 
        </Files> 
    </Directory> 
    
    Alias /static/ /var/www/djangoProject/static-files/ 
    <Directory /var/www/djangoProject/static-files> 
        Require all granted 
    </Directory> 
    

    WSG他们被collectstatic

  • 检查文件权限

settings.py收集i.py

import os, sys 

sys.path.append('/var/www/djangoProject') 
sys.path.append('/var/www/djangoProject/venv/lib/python2.7/site-packages') 

os.environ.setdefault("DJANGO_SETTINGS_MODULE", "djangoProject.settings") 

from django.core.wsgi import get_wsgi_application 
application = get_wsgi_application() 

Apache的访问日志:

"GET /static/app01/css/default.css HTTP/1.1" 404 346 "http://example.com/" 

apache2.conf:

Mutex file:${APACHE_LOCK_DIR} default 

PidFile ${APACHE_PID_FILE} 

Timeout 300 
KeepAlive On 
MaxKeepAliveRequests 100 
KeepAliveTimeout 5 

User ${APACHE_RUN_USER} 
Group ${APACHE_RUN_GROUP} 

HostnameLookups Off 

ErrorLog ${APACHE_LOG_DIR}/error.log 
LogLevel warn 

IncludeOptional mods-enabled/*.load 
IncludeOptional mods-enabled/*.conf 

Include ports.conf 

<Directory /> 
     Options FollowSymLinks 
     AllowOverride None 
     Require all denied 
</Directory> 

<Directory /usr/share> 
     AllowOverride None 
     Require all granted 
</Directory> 

<Directory /var/www/> 
     Options Indexes FollowSymLinks 
     AllowOverride None 
     Require all granted 
</Directory> 

AccessFileName .htaccess 

<FilesMatch "^\.ht"> 
     Require all denied 
</FilesMatch> 

LogFormat "%v:%p %h %l %u %t \"%r\" %>s %O \"%{Referer}i\" \"%{User-Agent}i\"" vhost_combined 
LogFormat "%h %l %u %t \"%r\" %>s %O \"%{Referer}i\" \"%{User-Agent}i\"" combined 

LogFormat "%h %l %u %t \"%r\" %>s %O" common 
LogFormat "%{Referer}i -> %U" referer 
LogFormat "%{User-agent}i" agent 

IncludeOptional conf-enabled/*.conf 
IncludeOptional sites-enabled/ 
+0

你是如何加载你的apache的conf?你可以显示你的主要httpd.conf? – lapinkoira

+0

我包含了主要的apache2.conf –

+0

与静态文件无关,但您如何设置Python虚拟环境已经搞乱了一点。确保您阅读http://modwsgi.readthedocs.io/en/develop/user-guides/virtual-environments.html以获取正确的方法。 –

回答

1

我找到了答案大 “Serving static files with mod_wsgi and Django”。

  • 顺序是相关的,对静态文件别名必须在首位。

的Apache设置:

WSGIDaemonProcess djangoProject 

WSGIProcessGroup djangoProjectGroup 
WSGIApplicationGroup %{GLOBAL} 

WSGIPythonHome /var/www/djangoProject/venv/lib/python2.7/site-packages 
WSGIPythonPath /var/www/djangoProject/ 

Alias /static/ /var/www/djangoProject/static-files/ 
<Directory /var/www/djangoProject/static-files> 
    Require all granted 
</Directory> 

WSGIScriptAlias//var/www/djangoProject/djangoProject/wsgi.py 
<Directory /var/www/djangoProject/djangoProject> 
    <Files wsgi.py> 
     Require all granted 
    </Files> 
</Directory>