Invalid command 'WSGIScriptAlias', perhaps misspelled or defined by a module not included in the server configuration

RevolutionTech picture RevolutionTech · Jan 27, 2014 · Viewed 25.6k times · Source

I am trying to set up a Django server for production. In my browser, if I type in the IP address that corresponds to my server, I get the default Apache page "It works!" instead of a Django-related page.

I have modified httpd.conf to include the line:

WSGIScriptAlias / /var/the-1/django/The1/apache/django.wsgi

And I created the actual file django.wsgi, which looks like:

import os
import sys

path = '/var/the-1/django/The1'
if path not in sys.path:
    sys.path.append(path)

os.environ['DJANGO_SETTINGS_MODULE'] = 'The1.settings'

import django.core.handlers.wsgi
application = django.core.handlers.wsgi.WSGIHandler()

But when I restart the server, I receive the error:

AH00526: Syntax error on line 506 of /usr/local/apache2/conf/httpd.conf:
Invalid command 'WSGIScriptAlias', perhaps misspelled or defined by a module not included in the server configuration

when I try to restart Apache using:

/usr/local/apache2/bin/apachectl -k restart

However, if I use the command:

sudo service apache2 restart

I don't receive the error (though I think they're not really doing the same thing).

If I run apache2ctl -M, the following two lines appear (among others):

alias_module (shared)
wsgi_module (shared)

so I believe those modules are running correctly.

I have already tried completely uninstalling and reinstalling libapache2-mod-wsgi. The server I am working on is a Raspberry Pi running Raspbian. This is my first time setting up a server, so I know very little about Apache or how to set up Django.

EDIT: Below is my httpd.conf file (note that because the actual file is so long, I have removed all comments):

ServerRoot "/usr/local/apache2"

Listen 80

LoadModule authn_file_module modules/mod_authn_file.so
LoadModule authn_core_module modules/mod_authn_core.so
LoadModule authz_host_module modules/mod_authz_host.so
LoadModule authz_groupfile_module modules/mod_authz_groupfile.so
LoadModule authz_user_module modules/mod_authz_user.so
LoadModule authz_core_module modules/mod_authz_core.so
LoadModule access_compat_module modules/mod_access_compat.so
LoadModule auth_basic_module modules/mod_auth_basic.so
LoadModule reqtimeout_module modules/mod_reqtimeout.so
LoadModule filter_module modules/mod_filter.so
LoadModule mime_module modules/mod_mime.so
LoadModule log_config_module modules/mod_log_config.so
LoadModule env_module modules/mod_env.so
LoadModule headers_module modules/mod_headers.so
LoadModule setenvif_module modules/mod_setenvif.so
LoadModule version_module modules/mod_version.so
LoadModule unixd_module modules/mod_unixd.so
LoadModule status_module modules/mod_status.so
LoadModule autoindex_module modules/mod_autoindex.so
LoadModule dir_module modules/mod_dir.so
LoadModule alias_module modules/mod_alias.so
LoadModule wsgi_module modules/mod_wsgi.so

<IfModule unixd_module>
User daemon
Group daemon
</IfModule>

ServerAdmin [email protected]
ServerName [SERVER_IP_ADDRESS]:80 # Removed for security reasons

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

DocumentRoot "/usr/local/apache2/htdocs"
<Directory "/usr/local/apache2/htdocs">
    Options Indexes FollowSymLinks
    AllowOverride None
    Require all granted
</Directory>

<IfModule dir_module>
    DirectoryIndex index.html
</IfModule>

<Files ".ht*">
    Require all denied
</Files>

ErrorLog "logs/error_log"

LogLevel warn

<IfModule log_config_module>
    LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
    LogFormat "%h %l %u %t \"%r\" %>s %b" common
    <IfModule logio_module>
      LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\" %I %O" combinedio
    </IfModule>
    CustomLog "logs/access_log" common
</IfModule>

<IfModule alias_module>
    ScriptAlias /cgi-bin/ "/usr/local/apache2/cgi-bin/"
</IfModule>

<IfModule cgid_module>
</IfModule>

<Directory "/usr/local/apache2/cgi-bin">
    AllowOverride None
    Options None
    Require all granted
</Directory>

<IfModule mime_module>
        TypesConfig conf/mime.types
    AddType application/x-compress .Z
    AddType application/x-gzip .gz .tgz
</IfModule>

<IfModule proxy_html_module>
Include conf/extra/proxy-html.conf
</IfModule>

<IfModule ssl_module>
SSLRandomSeed startup builtin
SSLRandomSeed connect builtin
</IfModule>

<VirtualHost *:80>
    ServerName [SERVER_IP_ADDRESS]:80 # Removed for security reasons
    WSGIScriptAlias / /var/the-1/django/The1/apache/django.wsgi
    <Directory /var/the-1/django/The1/apache>
        ###<Files django.wsgi>
            Order allow,deny
            Allow from all
        ###</Files>
    </Directory>
</VirtualHost>

EDIT 2 (Solution): There were some problems with my above config file. I was missing a LoadModule line for mod_wsgi.so and I also had to comment out one of the sections. The comments in the first solution go through it a bit.

Answer

Anup picture Anup · Jan 28, 2014

First you might want to check the config using

/etc/init.d/httpd configtest 

or sudo apache2ctl -t

and also check if the module is enabled.

sudo a2enmod wsgi