Перейти к содержимому

Как включить cgi в apache

  • автор:

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

Как запустить 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 и старше настройки вступят в силу моментально.

  1. Cтраницы ошибок HTTP сервера.
  2. Управление HTTP логами.
  3. Как можно изменить кодировку по умолчанию по для моего сайта?
  4. Каким образом можно включить поддержку CGI во всем сайте, не только в CGI-BIN?
  5. Что такое лог suhosin?
  6. Файл .htaccess
  7. Ограничение доступа по HTTP
  8. Как изменить индексный файл для каталога?
  9. Поддерживается ли Вашим хостингом mod_expires (как включить кэширование статики)?
  10. Как сделать редирект с 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

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *