Назад | Перейти на главную страницу

Почему CGI не работает в apache

У меня такой URL:

http: // IP-адрес / проект / cgi / sessionlogin.cgi? login = usernmae и пароль = somepass

но когда я открываю этот URL, я вижу действие загрузки файла cgi, а не результаты. У меня есть .htaccess в папке со сценариями cgi (/ var / www / html / project / cgi) с этой информацией:

AllowOverride None
Options +Indexes +ExecCGI +MultiViews +SymLinksIfOwnerMatch
#Order allow,deny
Require all granted
Allow from all

У меня также есть эта часть в конфигурации виртуального хоста:

ScriptAlias /cgi-bin "/var/www/html/project/cgi/"

<Directory "/var/www/html/project/cgi">
        AllowOverride None
        Options +Indexes +ExecCGI +MultiViews +SymLinksIfOwnerMatch
        #Order allow,deny
        Require all granted
        Allow from all
</Directory>

Но все это не работает. Модуль cgi включен. Это двоичные файлы cgi на C ++. Что я делаю не так?

Хотя моя система - Apache24 на Windows 8.1, я думаю, что эта проблема является более общей независимо от системы. У меня была рабочая конфигурация с Apache22 в Windows 7, и я не сделал никаких заметных изменений при обновлении до apache24 в Windows 8.1. Когда я искал эту проблему в Google, я понял, что общего решения нет. Очевидно, Apache24 не видел my_file_extension как исполняемый файл.

Более того, хотя я очистил кеш Firefox из каталога «c: \ users \ appdata \ local \ temp» и удалил файл с диска; firefox постоянно выдавал один и тот же файл из моей файловой системы (а именно file: \\ c: \ users \ appdata \ local \ temp \ the-file). И эта ситуация существовала для каждого из моих серверов (один сервер на моей основной машине и сервер на другой тестовой машине).

Итак, решение, которое я нашел (я думаю, более общее, по крайней мере, работает для меня), использует директиву «Module mod_actions» (директива «Action»).

Подводя итог: моя старая конфигурация такая

#for alias_module
ScriptAlias /cgi-bin/ "c:/Apache24/cgi-bin/"

# for cgi directory
# my_file_extension is ksp
<Directory   "c:/Apache24/cgi-bin">  
  AllowOverride None
  Options +ExecCGI 
  Require all granted       
  Addhandler cgi-script .ksp
</Directory>

и новая конфигурация такая

#for alias_module
ScriptAlias /cgi-bin/ "c:/Apache24/cgi-bin/"

# for cgi directory
# my_file_extension is ksp
<Directory   "c:/Apache24/cgi-bin">  
  AllowOverride None
  Options +ExecCGI 
  Require all granted           
</Directory>

# then the new directive i added;
# for any file in the server root directory that has an extension .ksp
<Location />     
  AddHandler ksp  .ksp
  Action ksp "/cgi-bin/CGI_KSP.exe"
</Location>

В документации apache для директивы Action, например,

Example: File extension

# Files of a particular file extension
AddHandler my-file-type .xyz
Action my-file-type "/cgi-bin/program.cgi"

In this example, requests for files with a file extension of .xyz are handled by the specified cgi script /cgi-bin/program.cgi.

Надеюсь это поможет...

Для начала, установка AllowOverride None означает, что любой .htaccess файл будет проигнорирован (что хорошо, поскольку у вас уже есть доступ к основной конфигурации Apache VirtualHost), поэтому вы также можете удалить .htaccess файл.

Во-вторых, фактический файл CGI должен иметь правильные разрешения для выполнения Apache (chmod 755), а если вы используете SELinux, вам может потребоваться активировать httpd_enable_cgi SELinux boolean и убедитесь, что файл CGI помечен как httpd_sys_script_exec_t.