Не удается запустить cgi, показывать только обычный текст (Ubuntu 13.10 Apache 2.4)

Я просто устанавливаю Ubuntu 13.10, и я пытаюсь установить Apache. Но когда я пытался запустить файл perl в cgi-bin, браузер показывал только обычный текст.

Мой default.conf из Apache находится ниже:

    AddHandler cgi-script .cgi .pl
    ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/
    <Directory "/usr/lib/cgi-bin">
            AllowOverride None
            Options +Indexes +ExecCGI +MultiViews +SymLinksIfOwnerMatch
            #Order allow,deny
            Require all granted
            Allow from all
    </Directory>

Это мой файл perl cgi:

    #!/usr/bin/perl
    print "Content-type: text/html\n\n";
    print "<html>\n";
    print "<title> PERL CGI</title>\n";
    print "<body>";
    print "hello perl-cgi!!!!!!!";
    print "</body>";
    print "</html>\n";

Я включил обработчик в файле mime.conf. Файл находится в /usr/lib/cgi -bin, и я запускаю его как http not file:///. Я также установил mod_perl. Я новичок в Apache. Я искал несколько часов, стараюсь бесконечные конфигурации Apache, читаю документ Apache, но все равно не могу его решить. Это потому, что код "+ ExecCGI" имеет некоторые проблемы? Я видел, как другой человек также сталкивался с подобной проблемой после обновления Ubuntu 12.04 до 13.10. Может быть, проблема Ubuntu? Пожалуйста помоги. Конфигурация Apache и разрешение Ubuntu почти сводят меня с ума.

Ответы

Ответ 1

Try sudo a2enmod cgi

Затем перезапустите apache!

Ответ 2

Я столкнулся с этой проблемой при попытке настроить bugzilla в Ubuntu 14.04 @Ответ на андер был helful, и поэтому были ссылки @Kevin.. так что кроме включения cgi, убедитесь, что установлен perl-модуль для apache2. Вы можете сделать это:

sudo apt-get install libapache2-mod-perl2

Это автоматически включит модуль, а также перезапустит сервер Apache. Если этого не сделать вручную.

У вас недостаточно репутации, чтобы поддержать вас обоих, поэтому спасибо.

Ответ 3

Развернув ответ из @tops.

Попробуйте sudo a2enmod cgi, если вы уже пробовали выполнить кучу учебников, таких как Учебник Apache: динамический контент с CGI, Ubuntu HTTDP или Как установить веб-сервер Apache2 с поддержкой PHP, CGI и Perl в Ubuntu Server и по-прежнему не может понять, что им не хватает.

Затем перезапустите apache!

Что можно сделать с помощью

sudo /etc/init.d/apache2 restart
sudo apache2ctl restart
sudo service apache2 restart < - попробуйте этот первый

Это работало для меня на Ubuntu 13.10.


Новые команды для пользователей, поступающих из дистрибутивов RedHad:

  • Модули
    • a2enmod
    • a2dismod
  • Конфигурации
    • a2enconf
    • a2disconf
  • Виртуальные сайты
    • a2ensite
    • a2dissite

Помните, что основной файл конфигурации по умолчанию равен /etc/apache2/apache2.conf, а отдельные компоненты конфигурации для модулей и веб-сайтов находятся в отдельных файлах.


РЕДАКТИРОВАТЬ: Расширенные сведения о том, почему люди, приходящие на эту страницу, могут испытывать трудности с включением Apache CGI в Ubuntu.

Ответ 4

Шаги по установке Apache на Ubuntu 13.10:

  • sudo apt-get install apache2
  • sudo service apache2 start

Шаги для тестирования Apache на Ubuntu 13.10:

  • Посетите http://your-host-here.com/ (или независимо от того, как настроен ваш хост).
  • См. веб-страницу "Это работает".

Шаги по использованию CGI-программ под Apache на Ubuntu 13.10:

  • Отсутствует. CGI настроен из коробки.

Шаги для тестирования CGI-программ под Apache на Ubuntu 13.10:

  • Редактирование файла в/usr/lib/cgi-bin/(например,/usr/lib/cgi-bin/test)
  • Добавьте код Perl (например, код выше)
  • sudo chmod + x/usr/lib/cgi-bin/test
  • Посетите http://your-host-here.com/cgi-bin/test

Примечание. "your-host-here.com" вполне может быть "localhost", но SO не позволит мне использовать это в URL-адресе: -/

Ответ 5

Убедитесь, что режим apgi cgi включен

sudo a2enmod cgi   //will enable the cgi mode
sudo a2dismod cgi  //Will disable the cgi mode

Храните все файлы в папке "cgi-bin" веб-корня

sudo mkdir /home/www/cgi-bin

Убедитесь, что разрешение файла файла .cgi в порядке

sudo chmod 755 yourFile.cgi

Попробуйте выполнить его через терминал

perl /Path_To_The_File/fileName.cgi

Убедитесь, что файл fileName.cgi содержит следующий код в верхней части файла

#!/usr/bin/perl -w

print "Content-type: text/html\n\n";

Если все вышеперечисленные шаги работают хорошо, то

Создайте виртуальный хост в apache для вашего проекта perl

cp /etc/apache2/sites-available/000-default.conf ./your_project.conf
sudo nano /etc/apache2/sites-available/your_project.conf

Внутри вашего файла your_project.conf замените эти строки

<VirtualHost *:80>
    ServerAdmin [email protected]
    DocumentRoot /var/www/html/cgi-bin          //Define where your project is
    ServerName your_project.com                 //URL through which you want to access
    ServerAlias your_project.com


    ErrorLog ${APACHE_LOG_DIR}/error.log        //Error for the project will store in this file
    CustomLog ${APACHE_LOG_DIR}/access.log combined


    ScriptAlias /cgi-bin/ "/var/www/html/cgi-bin/"  //particular directory is set aside for CGI programs

    <Directory /var/www/html/cgi-bin/>
    ##TO consider the files as cgi which has .cgi and .pl extension
    Options +ExecCGI
    AddHandler cgi-script .cgi .pl

    ##To consider all files as cgi file  (if want to use remove # from last two line add in above 2 line)
    #Options ExecCGI
    #SetHandler cgi-script
    </Directory>

</VirtualHost>

Запустите эти команды

sudo a2ensite your_project.conf      //Will enable your configuration file
sudo service apache2 restart         //Restarting apache2

Добавьте свой хост

sudo nano /etc/hosts
//add this line
127.0.0.1   your_project.com

Теперь запустите файл cgi

your_project.com/cgi-bin/fileName.cgi

Ответ 6

Я попытался воспроизвести эту проблему, и вот что я узнал: В /etc/apache 2/sites - доступно либо у вас установлено несколько сайтов, либо используется по умолчанию. В любом случае есть.... показывает путь к моему DocumentumentRoot (wherer мои .html файлы живут). Второй.... показывает путь к моим .cgi,.pl,.perl файлам:

<VirtualHost *:8080>
    ServerName casey.local
    **DocumentRoot /home/casey/work/htdocs/casey.local**
    <Directory />
      Options FollowSymlinks
      AllowOverride All
    </Directory>

    ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/ 
    **<Directory "/usr/lib/cgi-bin">**
      AllowOverride None
      Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
      Order allow,deny
      Allow from all
    </Directory>