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

26,034

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
Share:
26,034
RevolutionTech
Author by

RevolutionTech

Updated on July 09, 2022

Comments

  • RevolutionTech
    RevolutionTech almost 2 years

    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.