Python – Apache running Python with mod_wsgi

apache-2.2permissionspythonwsgi

I need help setting up a local Apache2 to run Python. Got it to work just fine with html, php and mysql on my Mac running Mountain Lion.

Python running. Installed mod_wsgi through MacPorts and checked that it got loaded by Apache after adding the following to the httpd.conf:

LoadModule wsgi_module modules/mod_wsgi.so
<Directory /opt/local/apache2/htdocs>
AddHandler wsgi-script .py
Options +ExecCGI
Order deny,allow
Allow from all
</Directory>

Put my index.py file into htdocs:

def application(environ, start_response):
    status = '200 OK'
    output = 'Hello World!'

    response_headers = [('Content-type', 'text/plain'),
                        ('Content-Length', str(len(output)))]
    start_response(status, response_headers)

    return [output]

Gave chmod 777 permission to whole path /opt/local/apache2/htdocs/index.py

No matter what I do, I keep getting the "Forbidden. You don't have permission to access /index.py on this server." when going to localhost/index.py.

The Apache error-log says:

[Thu Aug 30 17:46:46 2012] [error] [client 127.0.0.1] Options ExecCGI is off in this directory: /opt/local/apache2/htdocs/index.py, referer: http://localhost/

How can I resolve this permission issue? What is Options ExecCGI?

Best Answer

Try using .wsgi extension instead of .py. You likely have a conflicting definition in your Apache setup somewhere that says that .py is a CGI script. Also use WSGIScriptAlias in preference to AddHandler method for setting up mod_wsgi. See the documentation:

http://code.google.com/p/modwsgi/wiki/QuickConfigurationGuide http://code.google.com/p/modwsgi/wiki/ConfigurationGuidelines