How to set up Mod_WSGI for Python on Ubuntu

44,892

Solution 1

I have found that this is a known bug with mod_wsgi apt-get package that is over a year old! Details at http://www.mail-archive.com/[email protected]/msg1147225.html. The apt-get package did not have the wsgi.load file so that needed to be created by doing the steps in the link above.

Thanks to everyone that helped!

Solution 2

See if the module is actually loaded properly with:

apache2ctl -t -D DUMP_MODULES

Solution 3

As far as I can see, you haven't loaded the mod_wsgi module into your httpd.conf.

I'd first try adding the wsgi files to the mods-enabled directory of Apache.

sudo ln -s /etc/apache2/mods-available/wsgi.load /etc/apache2/mods-enabled
sudo ln -s /etc/apache2/mods-available/wsgi.conf /etc/apache2/mods-enabled

Then restart Apache and it should work.

Solution 4

First confirm that the WSGI module is actually installed:

dpkg -l libapache2-mod-wsgi

This should give you output including name, version, etc. - look for the letters on the left of the name, this indicates current status of the package. To check manually, look in /etc/apache2/mods-available/ and you should see both wsgi.conf and wsgi.load. If these exist, they should have corresponding symlinks in /etc/apache2/mods-enabled/.

Should either set not exist, start by fixing that first - you can't interpret python code via apache if apache can't find the interpreter. Also, your test.py script will not work given the AddHandler directives you've configured - that directive tells apache to pass files of a certain extension to the relevant handler. Make your script test.wsgi or change the AddHandler directive.

Solution 5

Not sure if this is relevant, but after running:

apt-get install libapache2-mod-wsgi

... the following files did not exist:

/etc/apache2/mods-available/wsgi.conf
/etc/apache2/mods-available/wsgi.load

Reinstalling did not seem to replace the missing files. Weird! However, purge seemed do to the trick:

apt-get install libapache2-mod-wsgi
apt-get purge libapache2-mod-wsgi
apt-get install libapache2-mod-wsgi

# ls /etc/apache2/mods-available/ | grep wsgi
wsgi.conf
wsgi.load
Share:
44,892

Related videos on Youtube

AutomatedTester
Author by

AutomatedTester

Open Source Junkie and community helper! Python hacker, Automation expert, CI/CD believer...

Updated on September 17, 2022

Comments

  • AutomatedTester
    AutomatedTester almost 2 years

    I am trying to setup MOD_WSGI on my Ubuntu box. I have found steps that said I needed to do the following steps I found at http://ubuntuforums.org/showthread.php?t=833766

    1. sudo apt-get install libapache2-mod-wsgi
    2. sudo a2enmod mod-wsgi
    3. sudo /etc/init.d/apache2 restart
    4. sudo gedit /etc/apache2/sites-available/default and update the Directory
    <Directory /var/www/>
      Options Indexes FollowSymLinks MultiViews ExecCGI
    
      AddHandler cgi-script .cgi
      AddHandler wsgi-script .wsgi
    
      AllowOverride None
      Order allow,deny
      allow from all
    </Directory>
    
    1. sudo /etc/init.d/apache2 restart
    2. Created test.wsgi with

      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]
      

    Step 2 fails because it says it can't find mod-wsgi even though the apt-get found it. If I carry on with the steps the python app just shows as plain text in a browser.

    Any ideas what I have done wrong?


    EDIT: Results for questions asked

    automatedtester@ubuntu:~$ dpkg -l libapache2-mod-wsgi
    Desired=Unknown/Install/Remove/Purge/Hold
    | Status=Not/Inst/Cfg-files/Unpacked/Failed-cfg/Half-inst/trig-aWait/Trig-pend
    |/ Err?=(none)/Reinst-required (Status,Err: uppercase=bad)
    ||/ Name                                   Version                                Description
    +++-======================================-======================================-============================================================================================
    ii  libapache2-mod-wsgi                    2.5-1                                  Python WSGI adapter module for Apache
    automatedtester@ubuntu:~$ dpkg -s libapache2-mod-wsgi
    Package: libapache2-mod-wsgi
    Status: install ok installed
    Priority: optional
    Section: python
    Installed-Size: 376
    Maintainer: Ubuntu MOTU Developers <[email protected]>
    Architecture: i386
    Source: mod-wsgi
    Version: 2.5-1
    Depends: apache2, apache2.2-common, libc6 (>= 2.4), libpython2.6 (>= 2.6), python (>= 2.5), python (<< 2.7)
    Suggests: apache2-mpm-worker | apache2-mpm-event
    Conffiles:
     /etc/apache2/mods-available/wsgi.load 06d2b4d2c95b28720f324bd650b7cbd6
     /etc/apache2/mods-available/wsgi.conf 408487581dfe024e8475d2fbf993a15c
    Description: Python WSGI adapter module for Apache
     The mod_wsgi adapter is an Apache module that provides a WSGI (Web Server
     Gateway Interface, a standard interface between web server software and
     web applications written in Python) compliant interface for hosting Python
     based web applications within Apache. The adapter provides significantly
     better performance than using existing WSGI adapters for mod_python or CGI.
    Original-Maintainer: Debian Python Modules Team <[email protected]>
    Homepage: http://www.modwsgi.org/
    automatedtester@ubuntu:~$ sudo a2enmod libapache2-mod-wsgi
    ERROR: Module libapache2-mod-wsgi does not exist!
    automatedtester@ubuntu:~$ sudo a2enmod mod-wsgi
    ERROR: Module mod-wsgi does not exist!
    

    FURTHER EDIT FOR RMYates

    automatedtester@ubuntu:~$ apache2ctl -t -D DUMP_MODULES
    apache2: Could not reliably determine the server's fully qualified domain name, using 127.0.1.1 for ServerName
    Loaded Modules:
     core_module (static)
     log_config_module (static)
     logio_module (static)
     mpm_worker_module (static)
     http_module (static)
     so_module (static)
     alias_module (shared)
     auth_basic_module (shared)
     authn_file_module (shared)
     authz_default_module (shared)
     authz_groupfile_module (shared)
     authz_host_module (shared)
     authz_user_module (shared)
     autoindex_module (shared)
     cgid_module (shared)
     deflate_module (shared)
     dir_module (shared)
     env_module (shared)
     mime_module (shared)
     negotiation_module (shared)
     python_module (shared)
     setenvif_module (shared)
     status_module (shared)
    Syntax OK
    automatedtester@ubuntu:~$ 
    
    • Dana the Sane
      Dana the Sane over 14 years
      What can't find mod_wsgi, Apache or Python?
    • AutomatedTester
      AutomatedTester over 14 years
      the a2enmod command could not find mod_wsgi
  • AutomatedTester
    AutomatedTester over 14 years
    the test.py was a typo in the question. I meant to put test.wsgi.
  • AutomatedTester
    AutomatedTester over 14 years
    the test.py was a typo in the question. I meant to put test.wsgi. I did run the a2enmod but it said that it could not find mod_wsgi as I put at the end of my question
  • Zayne S Halsall
    Zayne S Halsall over 14 years
    Fine, but have you confirmed that the module is installed and correctly linked in per the instructions above?
  • AutomatedTester
    AutomatedTester over 14 years
    I have put the information that you asked for in the question.
  • AutomatedTester
    AutomatedTester over 14 years
    it doesn't look like it has loaded properly
  • Zayne S Halsall
    Zayne S Halsall over 14 years
    Not all the information - please check manually if the files wsgi.conf and wsgi.load in /etc/apache2/mods-available/ are symbolically linked to /etc/apache2/mods-enabled as requested. A simple long listing of the directory should suffice (i.e. ls -alh /etc/apache2/mods-enabled/).
  • Almett
    Almett over 2 years
    Installing this fixed my issue. Thanks a lot!