Как запустить CGI-скрипты в Apache2 в Debian 10

Если вы намерены использовать сценарии Apache CGI на удаленном сервере, читайте дальше, в противном случае пропустите первый абзац «Подключение к серверу» и прочитайте следующий.
Подключение к серверу
Чтобы получить доступ к серверу, вам нужно знать IP-адрес. Вам также потребуется пароль для аутентификации. Чтобы подключиться к серверу как root, введите эту команду:
ssh root@IP_DEL_SERVER
Далее вам будет предложено ввести пароль пользователя root. Если вы не используете пользователя root, вы можете войти под другим именем пользователя с помощью той же команды, а затем изменить первый параметр:
ssh VOSTRO_UTENTE@IP_DEL_SERVER
Затем вам будет предложено ввести пароль пользователя. Теперь вы подключены к вашему серверу.
Предпосылки
Конфигурация апача 2
После установки Apache2 в Debian 10 первое, что нужно сделать, это включить модуль CGI для Apache2.
sudo a2enmod cgi
Затем перезапускаем Apache2:
sudo service apache2 restart
Создадим папку cgi-bin:
sudo mkdir /var/www/cgi-bin
Заходим в папку:
cd /var/www/cgi-bin
Откроем файл apache2.conf:
sudo nano /etc/apache2/apache2.conf
Добавим в конец файла следующие строки кода:
ServerName localhost ScriptAlias /cgi-bin//var/www/cgi-bin/Options +ExecCGI AddHandler cgi-script.cgi.pl.py
Сохраните и закройте файл.
Теперь откройте файл serve.cgi.bin.conf:
sudo nano /etc/apache2/conf-available/serve-cgi-bin.conf
Отредактируйте файл следующим образом:
Define ENABLE_USR_LIB_CGI_BIN Define ENABLE_USR_LIB_CGI_BIN #ScriptAlias /cgi-bin//usr/lib/cgi-bin/# # AllowOverride None # Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch # Require all granted # ## cgi-bin config ScriptAlias /cgi-bin//var/www/cgi-bin/ AllowOverride None Options +ExecCGI
Сохраните и закройте файл.
sudo service apache2 restart
Давайте создадим пример сценария CGI для проверки нашей конфигурации: Заходим в папку:
cd /var/www/cgi-bin
Давайте создадим файл:
sudo touch hello.py
Давайте изменим разрешения для только что созданного файла:
sudo chmod o+x hello.py
sudo nano hello.py
Вставляем в файл следующие строки кода:
#!/usr/bin/env python import cgitb cgitb.enable() print("Content-Type: text/html;charset=utf-8") print "Content-type:text/html\r\n\r\n" print '' print '' print ' Hello Word ' print '' print '' print 'Hello Word
' print '' print ''
Сохраните и закройте файл.
Откроем браузер и подключимся к локальному серверу через доменное имя или IP-адрес:
http://TUO_INDIRIZZO_IP/cgi-bin/hello.py
Если скрипт не работает, проверьте error.log на наличие ошибок.
/var/log/apache2/error.log
Supportaci se ti piacciono i nostri contenuti. Grazie.
Noviello.it Newsletter
Ricevi gli ultimi approfondimenti direttamente nella tua casella di posta!
Каким образом можно включить поддержку CGI во всем сайте, не только в CGI-BIN?
Для этого перейдите в раздел «Управление сайтом», «Настройка PHP».
Далее совершите следующие действия:
1. Выберите из выпадающего списка сайт или поддомен, для котрого Вы хотите приманить настройки.
2. Перейдете в раздел «Настройки APACHE».
3. В поле «Options +ExecCGI» поставьте галочку «ON».

4. Нажмите кнопку «».
На серверах до сервера S26 включительно настройки применяться в течении часа, на сервер S27 и старше настройки вступят в силу моментально.
- Cтраницы ошибок HTTP сервера.
- Управление HTTP логами.
- Как можно изменить кодировку по умолчанию по для моего сайта?
- Каким образом можно включить поддержку CGI во всем сайте, не только в CGI-BIN?
- Что такое лог suhosin?
- Файл .htaccess
- Ограничение доступа по HTTP
- Как изменить индексный файл для каталога?
- Поддерживается ли Вашим хостингом mod_expires (как включить кэширование статики)?
- Как сделать редирект с www на без www через htaccess
Apache и CGI скрипты
CGI Apache — способ обработки скриптов самым популярным веб-сервером. В режиме CGI можно обрабатывать и выводить результат в браузер скрипты, написанные на bash, perl и python. Это может быть очень удобно особенно при создании админских инструментов — например, веб-интерфейсов.
CGI Apache настройка отдачи cgi скриптов
Потребуется написать простейший CGI скрипт — сделаем это на bash, также нужно активировать соответствующий модуль Apache.
Прежде всего приводим конфигурационный файл стандартного виртуального хоста apache2 в соответствие приведенному ниже образцу
ServerName www.example.com
ServerAdmin webmaster@localhost
DocumentRoot /var/www/html
ErrorLog $/error.log
CustomLog $/access.log combined
ScriptAlias /cgi-bin/ /var/www/cgi-bin/
Options +Indexes
Options +ExecCGI
AddHandler cgi-script .cgi
# vim: syntax=apache ts=4 sw=4 sts=4 sr noet
Опционально — в /etc/hosts добавляем строку, согласно которой при обращении к www.example.com будет задействоваться виртуальный хост на локальной машине
127.0.01 www.example.com
Включаем модуль веб-сервера и перезапускаем сервер
Создаем каталог, в котором будут размещаться скрипты и переходим в него
Далее нужно написать какой-то скрипт. Пусть он выводит слово hello и актуальное время обращения к скрипту
#!/bin/bash
echo Content-type: text/plain
echo ‘ ‘
echo ‘hello‘
Как любой bash скрипт он должен быть исполняемым
Настройка CGI Apache на этом завершена — теперь в браузере достаточно обратиться по адресу localhost/cgi-bin/script.cgi чтобы увидеть результат.
Поскольку ранее в /etc/hosts добавили нужное правило тот же вывод можно получить обратившись к www.example.com/cgi-bin/script.cgi
CGI скрипты требуют прав на исполнение и небезопасны, если скрипт написан плохо ему можно передать любые параметры и получить доступ к хост системе сервера.
CGI в настоящее время используется ограниченно, в основном для скриптов, для сайтов применяется более безопасный способ исполнения — fastcgi
Как открыть в CGI доступ к переменым веб сервера apach? к примеру HTTP_AUTHORIZATION
Искал информацию почему HTTP_AUTHORIZATION = nil пришел к выводу, что apach не передает некоторые переменные CGI скрипту. Так вот как передать их скрипту ? Искал решение, но в моем apach не работает.
# # Redirect: Allows you to tell clients about documents that used to # exist in your server's namespace, but do not anymore. The client # will make a new request for the document at its new location. # Example: # Redirect permanent /foo http://www.example.com/bar # # Alias: Maps web paths into filesystem paths and is used to # access content that does not live under the DocumentRoot. # Example: # Alias /webpath /full/filesystem/path # # If you include a trailing / on /webpath then the server will # require it to be present in the URL. You will also likely # need to provide a section to allow access to # the filesystem path. # # ScriptAlias: This controls which directories contain server scripts. # ScriptAliases are essentially the same as Aliases, except that # documents in the target directory are treated as applications and # run by the server when requested rather than as documents sent to the # client. The same rules about trailing "/" apply to ScriptAlias # directives as to Alias. # #ScriptAlias /cgi-bin/ "/srv/httpd/cgi-bin/" Alias /cgi-bin /var/www/cgi-bin #Alias /cgit /var/www/htdocs/cgit # AddHandler cgi-script .cgi .lua Options ExecCGI Require all granted RewriteRule .* - [E=HTTP_AUTHORIZATION:%] //тут потом переставлял по разному такой пример. RewriteCond % !-f RewriteCond % !-d Header set Access-Control-Allow-Origin "*" RewriteRule ^(.*)$ index.php/$1 [L] //но без успешно // и сюда пытался вставить пример
При перезапуске сервера выдает ошибку
Invalid command ‘RewriteRule’, perhaps misspelled or defined by a module not included in the server configuration
sudo a2enmod rewrite a2enmod не найден дистрибутив slackware 15