Apache 403 when using static Django files

I looked through a lot of related posts, but nothing helps.
Relevant Information:

Django version - 1.4

Apache Version - 2.2

Python version - 2.7

OS - Xubuntu 12.04

DB - Mysql

I am trying to get Apache to serve a django application and static files. The problem becomes apparent on the admin site, which does not display any of the CSS styles or images. Currently my admin site is as follows:

(well, I would include the image, but the stack overflow did not allow me. Suffice it to say that it looks like the admin page of all the others that are posted on this topic, see Apache does not execute static django admin files )

Parts of the application, such as my login page, and some dynamic work are working fine, but when I try to serve static content, I get error 403. Also, when I try to go to the stylesheet manually by looking at the hindml page presented by the administrator, and clicking the link to the stylesheet in

http://localhost/static/admin/css/base.css 

I get error 403. I can navigate there in the terminal and change permissions for the folder so that the www-data Apache user has explicit access to all files.

Here are the relevant snippets of my httpd.conf:

 #AliasMatch ^/([^/]*\.css) /usr/local/wsgi/static/styles/$1 Alias /media/ "/usr/local/wsgi/media/" Alias /static/ "/usr/local/wsgi/static/" <Directory "/usr/local/wsgi/static"> Order deny,allow Allow from all </Directory> <Directory "/usr/local/wsgi/media"> Order deny,allow Allow from all </Directory> WSGIScriptAlias / "/home/noah/Documents/Web/Basic/apache/django.wsgi" <Directory "/usr/local/wsgi/scripts"> Order allow,deny Allow from all </Directory> 

On a friend’s advice, I also copied the available default value above to my sites:

 <VirtualHost *:80> ServerAdmin webmaster@localhost DocumentRoot /var/www TypesConfig /etc/mime.types <Directory /> Options FollowSymLinks AllowOverride None </Directory> <Directory /home/noah/Documents/Web/Basic/apache/ > Options -Indexes FollowSymLinks AllowOverride AuthConfig FileInfo Order allow,deny Allow from all </Directory> <Directory /var/www/> Options Indexes FollowSymLinks MultiViews AllowOverride None Order allow,deny allow from all </Directory> SetEnv DJANGO_SETTINGS_MODULE Basic.settings ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/ <Directory "/usr/lib/cgi-bin"> AllowOverride None Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch Order allow,deny Allow from all </Directory> #AliasMatch ^/([^/]*\.css) /usr/local/wsgi/static/styles/$1 Alias /media "/usr/local/wsgi/media/" Alias /static "/usr/local/wsgi/static/" <Directory "/usr/local/wsgi/static"> Order deny,allow Allow from all </Directory> <Directory "/usr/local/wsgi/media"> Order deny,allow Allow from all </Directory> WSGIScriptAlias / "/home/noah/Documents/Web/Basic/apache/django.wsgi" <Directory "/usr/local/wsgi/scripts"> Order allow,deny Allow from all </Directory> ErrorLog ${APACHE_LOG_DIR}/error.log # Possible values include: debug, info, notice, warn, error, crit, # alert, emerg. LogLevel warn CustomLog ${APACHE_LOG_DIR}/access.log combined Alias /doc/ "/usr/share/doc/" <Directory "/usr/share/doc/"> Options Indexes MultiViews FollowSymLinks AllowOverride None Order deny,allow Deny from all Allow from 127.0.0.0/255.0.0.0 ::1/128 </Directory> </VirtualHost> 

Here is my django.wsgi

 import os import sys path = '/home/noah/Documents/Web/Basic' if path not in sys.path: sys.path.append(path) os.environ['DJANGO_SETTINGS_MODULE'] = 'Basic.settings' import django.core.handlers.wsgi application = django.core.handlers.wsgi.WSGIHandler() 

And finally, here are my .py settings:

 # Absolute filesystem path to the directory that will hold user-uploaded files. # Example: "/home/media/media.lawrence.com/media/" MEDIA_ROOT = '/usr/local/wsgi/media/' # URL that handles the media served from MEDIA_ROOT. Make sure to use a # trailing slash. # Examples: "http://media.lawrence.com/media/", "http://example.com/media/" MEDIA_URL = 'http://localhost/media/' # Absolute path to the directory static files should be collected to. # Don't put anything in this directory yourself; store your static files # in apps' "static/" subdirectories and in STATICFILES_DIRS. # Example: "/home/media/media.lawrence.com/static/" STATIC_ROOT = '/usr/local/wsgi/static/' # URL prefix for static files. # Example: "http://media.lawrence.com/static/" STATIC_URL = 'http://localhost/static/' # Additional locations of static files STATICFILES_DIRS = ( # Put strings here, like "/home/html/static" or "C:/www/django/static". # Always use forward slashes, even on Windows. # Don't forget to use absolute paths, not relative paths. ) # List of finder classes that know how to find static files in # various locations. STATICFILES_FINDERS = ( 'django.contrib.staticfiles.finders.FileSystemFinder', 'django.contrib.staticfiles.finders.AppDirectoriesFinder', # 'django.contrib.staticfiles.finders.DefaultStorageFinder', ) # Make this unique, and don't share it with anybody. SECRET_KEY = 'bmc&amp;epl=#u)r3elkvj#@90*cji*z^ cg8dnh$7j9kh@g9wzw (ih' # List of callables that know how to import templates from various sources. TEMPLATE_LOADERS = ( 'django.template.loaders.filesystem.Loader', 'django.template.loaders.app_directories.Loader', # 'django.template.loaders.eggs.Loader', ) MIDDLEWARE_CLASSES = ( 'django.middleware.common.CommonMiddleware', 'django.contrib.sessions.middleware.SessionMiddleware', 'django.middleware.csrf.CsrfViewMiddleware', 'django.contrib.auth.middleware.AuthenticationMiddleware', 'django.contrib.messages.middleware.MessageMiddleware', # Uncomment the next line for simple clickjacking protection: # 'django.middleware.clickjacking.XFrameOptionsMiddleware', ) ROOT_URLCONF = 'Basic.urls' # Python dotted path to the WSGI application used by Django runserver. WSGI_APPLICATION = 'Basic.wsgi.application' 

My Django project "Basic" lives in ~ / Documents / Web /, which is symbolically linked to / var / www /

Any help is greatly appreciated and let me know if you need more files / information.

+6
source share
3 answers

I ran into this problem.

I cannot place static files in /var/www , as Noah suggested.

Solved by adding to apache2.conf :

 <Directory /usr/local/django_apps/myapp/static> Options Indexes FollowSymLinks AllowOverride None Require all granted </Directory> 
+9
source

Another possibility might be the absence of a trailing slash in the static root directory. The following configuration resulted in 403 errors:

 WSGIPythonPath /home/foo/app/ WSGIPythonHome /home/foo/.envs/foo <VirtualHost *:80> Alias /static/ /home/foo/assets ServerAdmin foo@bar.com WSGIScriptAlias / /home/foo/app/wsgi.py ErrorLog ${APACHE_LOG_DIR}/app_wsgi_error.log CustomLog ${APACHE_LOG_DIR}/app_wsgi_access.log combined <Directory /home/foo/app/> <Files wsgi.py> Require all granted </Files> </Directory> <Directory /home/foo/assets> Require all granted </Directory> </VirtualHost> 

After adding the trailing slash to /home/foo/assets everything works fine. Hope this helps future Googlers.

+3
source

I get it. I moved all the static and multimedia files to / var / www, and apache seems a lot happier

+1
source

Source: https://habr.com/ru/post/917818/


All Articles