403 Forbidden error with Django and mod_wsgi

34,756

Solution 1

Apparently this is an issue that is related to Apache 2.4 and older versions. You need to replace in your apache configuration:

Allow from all

with

Require all granted

in the <Files wsgi.py> section

Solution 2

You can use the following:

<Directory /home/aettool/aet/apache>
  <IfVersion < 2.3 >
   Order allow,deny
   Allow from all
  </IfVersion>
  <IfVersion >= 2.3>
   Require all granted
  </IfVersion>
</Directory>

Solution 3

This has been reported in Django ticket 19319:

https://code.djangoproject.com/ticket/19319

Your Apache config now needs the following for your file wsgi.py.

<Directory /path/to/your/wsgi-script>
<Files wsgi.py>
  Order deny,allow
  Allow from all
  Require all granted
</Files>
</Directory>

Solution 4

There is one other gotcha:

Check your httpd.conf file for the following configuration:

<IfModule mime_module>
      AddHandler cgi-script .cgi .pl .py
</IfModule>

This will cause the error.

.py MUST NOT be configured as a CGI script

Share:
34,756
g4ur4v
Author by

g4ur4v

N00B.

Updated on April 19, 2020

Comments

  • g4ur4v
    g4ur4v about 4 years

    I created Django project in home directory so it is in home directory.

    Setup

    Django Verison  : 1.5.1
    Python Version  : 2.7.5
    mod_wsgi Version: 3.4
    Home Directory  : /home/aettool
    

    Contents of /home/aettool/aet/apache/django.wsgi

    import os
    import sys
    os.environ['DJANGO_SETTINGS_MODULE'] = 'aet.settings'
    
    import django.core.handlers.wsgi
    application = django.core.handlers.wsgi.WSGIHandler()
    

    Contect of httpd.conf

    WSGIScriptAlias / /home/aettool/aet/apache/django.wsgi
    
    <Directory /home/aettool/aet/apache>
    Order deny,allow
    Allow from all
    </Directory>
    

    Error in error_log

    [Sun Jul 21 02:01:30.923364 2013] [authz_core:error] [pid 21540:tid 1193011520] [client 10.20.17.184:51340] AH01630: client denied by server configuration: /home/aettool/aet/apache/django.wsgi
    

    Contents of urls.py

    from django.conf.urls import patterns, include, url
    from django.contrib import admin
    admin.autodiscover()
    
    urlpatterns = patterns('',
        url(r'^admin/doc/', include('django.contrib.admindocs.urls')),
        url(r'^admin/', include(admin.site.urls)),
    )
    

    Permissions of /home/aettool/aet : 775

    Permissions of /home/aettool/aet/apache : 755

    Permissions of django.wsgi file : 664

    I am getting error on browser 403 Forbidden You don't have permission to access / on this server.

    Please help me out with the configuration .

    EDIT

    For now I am moving forward by changing

    <Directory />
        AllowOverride none
        Require all denied
    </Directory>
    

    to

    <Directory />
        Order deny,allow
        Allow from all
    </Directory>
    

    So,this has definitely something to do with httpd.conf file configuration,but my worry is that I only added 5 lines in that file and not able to figure out what's wrong .