Как заставить сервер Apache2 передавать на обработку CGI скрипты? Это можно сделать, выполнив команду a2enmod cgi и настроив файл /etc/apache2/conf-available/serve-cgi-bin.conf

Выполните в терминале

sudo a2enmod cgi
AH00558: apache2: Could not reliably determine the server's fully qualified domain name, using 127.0.1.1. Set the 'ServerName' directive globally to suppress this message
Your MPM seems to be threaded. Selecting cgid instead of cgi.
Enabling module cgid.
To activate the new configuration, you need to run:
  service apache2 restart

Нам рекомендуют перезагрузить Apache2

service apache2 restart
==== AUTHENTICATING FOR org.freedesktop.systemd1.manage-units ===
Authentication is required to restart 'apache2.service'.
Authenticating as: orangepi,,, (orangepi)
Password: 
==== AUTHENTICATION COMPLETE ===
Warning: apache2.service changed on disk. Run 'systemctl daemon-reload' to reload units.

Или так:

sudo /etc/init.d/apache2 restart
[....] Restarting apache2 (via systemctl): apache2.serviceWarning: apache2.service changed on disk. Run 'systemctl daemon-reload' to reload units.
. ok

Измените настройки в файле /etc/apache2/conf-available/serve-cgi-bin.conf в соответствии со своими потребностями:

<IfModule mod_alias.c>
        <IfModule mod_cgi.c>
                Define ENABLE_USR_LIB_CGI_BIN
        </IfModule>

        <IfModule mod_cgid.c>
                Define ENABLE_USR_LIB_CGI_BIN
        </IfModule>

        <IfDefine ENABLE_USR_LIB_CGI_BIN>
#               ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/
#               <Directory "/usr/lib/cgi-bin">
                ScriptAlias /cgi-bin/ /var/www/cgi-bin/
                <Directory "/var/www/cgi-bin">
                        AllowOverride None
                        Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
                        Require all granted
                </Directory>
        </IfDefine>
</IfModule>

# vim: syntax=apache ts=4 sw=4 sts=4 sr noet

Я заменил в файле serve-cgi-bin.conf директорию по умолчанию для CGI скриптов.

Для скриптов на Python

У Python без дополнительных настроек наблюдаются проблемы с выводом на русском языке в кодировке UTF-8.

Следующий скрипт на Python 2.7 работает

#! /usr/bin/python
# -*- coding: utf-8 -*-
import cgi, os
print ("Content-type: text/html\n\n")
print ("<H1>Привет из логова ПИТОНА</H1>")

А если добавить эти 2 строки в файл /etc/apache2/apache2.conf

AddDefaultCharset UTF-8    
SetEnv PYTHONIOENCODING utf8

то будет работать и Python3.5

#! /usr/bin/python3
# -*- coding: utf-8 -*-
import cgi, os
print ("Content-type: text/html\n\n")
print ("<H1>Привет из логова ПИТОНА 3</H1>")