1) Install Python
$ dnf (or yum) install python3
.
2) Install mod_wsgi for Apache
$ dnf install mod_wsgi
Check installation:
$ httpd -M | grep wsgi
The output should be smth like this:
wsgi_module (shared)
.
3) Configure Apache to load mod_wsgi
Firstly, locate the installed module path:
$ find / -type f -name "mod_wsgi.so"
Let’s assume it’s: /usr/lib64/httpd/modules/mod_wsgi.so
Put the next line at the of the apache configuration file (/etc/httpd/conf/httpd.conf)
LoadModule wsgi_module /usr/lib64/httpd/modules/mod_wsgi.so
.
4) Modify virtual host file
<VirtualHost [IP:PORT]>
...
<Directory {PATH}>
...
<IfModule mod_wsgi.c>
# Explicitly permit CGI execution:
Options +ExecCGI
# Handle .wsgi files with mod_wsgi
<FilesMatch ".+\.wsgi$">
SetHandler wsgi-script
</FilesMatch>
# Deny direct access to python files
RedirectMatch 404 ".+\.py$"
# Deny access to compiled binaries
<FilesMatch ".+\.py(c|o)$">
Order Deny,Allow
Deny from all
</FilesMatch>
# Add a default Python index page
DirectoryIndex index.wsgi
</IfModule>
...
</Directory>
</VirtualHost>
.
5) Additional Configuration
There might be applied some other directives such as WSGIDaemonProcess, WSGIDaemonProcess, WSGIScriptAlias, WSGIPythonPath, etc.
Especially WSGIPythonPath might be very useful as the specified path (or comma separated paths) as an import directory.
.
Note
After every configuration file update do not forget to test configuration file & restart the apache:
$ httpd -t && service httpd restart
Don’t forget to modify Virtual host file for SSL connection too, but as a best practice – to avoid code duplication, put the code above into a separate file, like _wsgi.conf and include it into the body of virtual hosts, like: Include /full/path/../_wsgi.conf
.
Bonus
index.wsgi file sample:
def application(environ,start_response):
status = '200 OK'
html = 'html content goes here'
response_headers = [('Content-type','text/html')]
start_response(status,response_headers)
return [html]
.
@source:
https://modwsgi.readthedocs.io/en/master/
https://httpd.apache.org/docs/2.4/howto/cgi.html