serbinСтремящайся
- Изменено
Ранее мы рассматривали что такое CGI? Теперь рассмотрим настройки выполнения CGI на примере.
Я буду работать на CentOS Linux, поэтому примеру будут соответствовать этой системе.
Для Debian систем пути к apache будут отличаться + вы сможете воспользоваться командой для активации модуля mod_cgi. В остальном настройка должна совпадать.
Настройка CGI в Apache:
Добавим конфигурацию CGI к конфигу сайта. У меня на ВМ используется default конфигурация в файле
/etc/httpd/bx/conf/default.conf
. Вы должны использовать конфиг вашего сайта (или добавить в общийcat /etc/httpd/conf/httpd.conf
):<Directory /home/serbin/www/project_cgi_dir> Options +ExecCGI AddHandler cgi-script .cgi .py .pl AllowOverride None Order allow,deny allow from all </Directory> ScriptAlias /cgi-bin/ /home/serbin/cgi-bin/ <Directory /home/serbin/cgi-bin> Options +ExecCGI AddHandler cgi-script .cgi AllowOverride None Order allow,deny Allow from all </Directory>
Первый блок отвечает за директорию CGI скриптов проекта - папка project_cgi_dir в корне сайта
Второй блок отвечает за общие CGI скрипты. У меня они лежат в директории пользователя/home/serbin/cgi-bin/
, часто для них используют/usr/lib/cgi-bin/
директорию.Активируем модуль CGI для Apache.
Для начала найдем подключение модуля командой grep[root@localhost www]# grep -n "LoadModule" /etc/httpd/conf/httpd.conf ... 68:#LoadModule mem_cache_module modules/mod_mem_cache.so 69:#LoadModule cgi_module modules/mod_cgi.so
Видим, что в файле
/etc/httpd/conf/httpd.conf
на 69 строке закоментировано подключение модуля mod_cgi.so. Раскоментируйте подключение используя любимый редактор и перазагрузите сервис apache:
sudo systemctl restart httpd
Создадим директории для cgi скриптов:
mkdir /home/serbin/www/project_cgi_dir && mkdir /home/serbin/cgi-bin
Создадим скрипт на языке Python и дадим ему права на выполнение
cd /home/serbin/www/project_cgi_dir vim python.cgi
Со следующим содержимым
[bitrix@localhost project_cgi_dir]$ cat python.cgi #!/usr/bin/env python print "Content-type: text/html\n\n" print "<html>\n<body>" print "<div style=\"width: 100%; font-size: 40px; font-weight: bold; text-align: center;\">" print "Hello from Python Script" print "</div>\n</body>\n</html>"
дадим скрипту права на выполнение
sudo chmod 775 /home/bitrix/www/project_cgi_dir/python.cgi
Протестируем в браузере:
Создадим скрипт на языке PERL
cd /home/serbin/www/project_cgi_dir vim perl.cgi
#!/usr/bin/perl print "Content-type: text/html\n\n"; print "<h1>Hello from PERL programming language</h1>";
sudo chmod 775 /home/bitrix/www/project_cgi_dir/perl.cgi
Давайте напишем библиотеку, хоть и очень простую, на языке С для расширения умений и кругозора. То что мы делали до этого было на интерпретируемых языках, но мы знаем что многие библиотеки ради быстродействия пишутся на компилируемых языках - в частности на С и С++.
На этот раз поработаем в нашей общей папке cgi скриптовcd /home/serbin/cgi-bin/ vim c-hello.c
Вставим в файл следующий код
#include <stdio.h> int main(void) { printf("Content-type: text/html\n"); // Пустой заголовок printf("\n"); printf("<h2>Hello from C language</h2>"); return 0; }
Скомпилируем скрипт
gcc c-hello.c -o 'c-hello.cgi'
Если на вашей машине отсутствует компилятор gcc установите используя пакетный менеджер.
Дадим права файлу на выполнениеsudo chmod 775 /home/serbin/cgi-bin/c-hello.cgi
И наконец проверим в браузере
Готово теперь наш веб-сервер обрабатывает запросы при помощи скриптов написанных на разных языках программирования!
А как передать данные в CGI скрипт мы рассмотрели в статье Создаем CGI на C с параметрами.