Всем привет, я копаюсь с apache и cgi программированием, на перле.
Возник ламерский вопрос, на который, однако, я не нашел ответа в сети: у меня не запускаются мои cgi приложения. Так, к примеру, в моем файле index.html создаю форму, которая отсылает данные скрипту в этом же каталоге. Захожу через браузер, заполняю форму, жму enter, и на экране появляется мой cgi скрипт, в текстовом виде. То есть браузер просто его выводит на экран, а не запускает.И еще вопрос. Я пробовал размещать скрипты в каталоге cgi-bin, но в браузере вываливается ошибка 404 Not Found. В файле httpd.conf есть строка ScriptAlias /cgi/bin "usr/local/www/apache22/cgi-bin". В логах сервера появляется запись:
Loading CGI at runtime. You could increase shared memory between prosesses by preloading it in your httpd.conf or handler.pl file
[Mason] Cannot resolve file to component: /usr/local/www/apache22/cgi-bin/printenv (is file outside component root?) at /usr/local/lib/perl5/site_perl/5.8.8/HTML/Mason/Apachehandler.pm line 853
Видимо надо написать не
ScriptAlias /cgi/bin "usr/local/www/apache22/cgi-bin
а
ScriptAlias /cgi-bin /usr/local/www/apache22/cgi-bin
а лучшe
ScriptAlias /cgi-bin/ /usr/local/www/apache22/cgi-bin/
>Видимо надо написать не
>ScriptAlias /cgi/bin "usr/local/www/apache22/cgi-bin
>а
>ScriptAlias /cgi-bin /usr/local/www/apache22/cgi-bin
>а лучшe
>ScriptAlias /cgi-bin/ /usr/local/www/apache22/cgi-bin/
подправил, ничего не изменилось. При попытке обратиться в браузере к каталогу /cgi-bin/ напрямую, выскакивает ошибка forbidden, хоть право доступа на чтение я выставил. При попытке доступа к cgi-bin/printenv - not found
>>Видимо надо написать не
>>ScriptAlias /cgi/bin "usr/local/www/apache22/cgi-bin
>>а
>>ScriptAlias /cgi-bin /usr/local/www/apache22/cgi-bin
>>а лучшe
>>ScriptAlias /cgi-bin/ /usr/local/www/apache22/cgi-bin/
>
>
>подправил, ничего не изменилось. При попытке обратиться в браузере к каталогу /cgi-bin/
>напрямую, выскакивает ошибка forbidden, хоть право доступа на чтение я выставил.
>При попытке доступа к cgi-bin/printenv - not foundforbidden -- это правильно
а not found это и значит нот фаунд: либо скрипт лежит не в /usr/local/www/apache22/cgi-bin/, либо разывается иначе. вы уверены, что он называется cgi-bin/printenv? может cgi-bin/printenv.cgi?
>>>Видимо надо написать не
>>>ScriptAlias /cgi/bin "usr/local/www/apache22/cgi-bin
>>>а
>>>ScriptAlias /cgi-bin /usr/local/www/apache22/cgi-bin
>>>а лучшe
>>>ScriptAlias /cgi-bin/ /usr/local/www/apache22/cgi-bin/
>>
>>
>>подправил, ничего не изменилось. При попытке обратиться в браузере к каталогу /cgi-bin/
>>напрямую, выскакивает ошибка forbidden, хоть право доступа на чтение я выставил.
>>При попытке доступа к cgi-bin/printenv - not found
>
>forbidden -- это правильно
>а not found это и значит нот фаунд: либо скрипт лежит не
>в /usr/local/www/apache22/cgi-bin/, либо разывается иначе. вы уверены, что он называется cgi-bin/printenv?
>может cgi-bin/printenv.cgi?Абсоютно точно - printenv. Из командной строки запускается нормально. Повторюсь, в error-логах сервера при попытке доступа к нему появляется запись:
Loading CGI at runtime. You could increase shared memory between prosesses by preloading it in your httpd.conf or handler.pl file
[Mason] Cannot resolve file to component: /usr/local/www/apache22/cgi-bin/printenv (is file outside component root?) at /usr/local/lib/perl5/site_perl/5.8.8/HTML/Mason/Apachehandler.pm line 853
Чет я непонял, а ExecCGI добавлял ?
>Чет я непонял, а ExecCGI добавлял ?
куда?
В доках, что я читал, написано про ScriptAlias
>>>>Видимо надо написать не
>>>>ScriptAlias /cgi/bin "usr/local/www/apache22/cgi-bin
>>>>а
>>>>ScriptAlias /cgi-bin /usr/local/www/apache22/cgi-bin
>>>>а лучшe
>>>>ScriptAlias /cgi-bin/ /usr/local/www/apache22/cgi-bin/
>>>
>>>
>>>подправил, ничего не изменилось. При попытке обратиться в браузере к каталогу /cgi-bin/
>>>напрямую, выскакивает ошибка forbidden, хоть право доступа на чтение я выставил.
>>>При попытке доступа к cgi-bin/printenv - not found
>>
>>forbidden -- это правильно
>>а not found это и значит нот фаунд: либо скрипт лежит не
>>в /usr/local/www/apache22/cgi-bin/, либо разывается иначе. вы уверены, что он называется cgi-bin/printenv?
>>может cgi-bin/printenv.cgi?
>
>Абсоютно точно - printenv. Из командной строки запускается нормально. Повторюсь, в error-логах
>сервера при попытке доступа к нему появляется запись:
>Loading CGI at runtime. You could increase shared memory between prosesses by
>preloading it in your httpd.conf or handler.pl file
>[Mason] Cannot resolve file to component: /usr/local/www/apache22/cgi-bin/printenv (is file outside component root?)
>at /usr/local/lib/perl5/site_perl/5.8.8/HTML/Mason/Apachehandler.pm line 853Так у вас там Mason? можут у вас ещё и mod_perl включен? вы уж рассказывайте доконца :-)
>>>>>Видимо надо написать не
>>>>>ScriptAlias /cgi/bin "usr/local/www/apache22/cgi-bin
>>>>>а
>>>>>ScriptAlias /cgi-bin /usr/local/www/apache22/cgi-bin
>>>>>а лучшe
>>>>>ScriptAlias /cgi-bin/ /usr/local/www/apache22/cgi-bin/
>>>>
>>>>
>>>>подправил, ничего не изменилось. При попытке обратиться в браузере к каталогу /cgi-bin/
>>>>напрямую, выскакивает ошибка forbidden, хоть право доступа на чтение я выставил.
>>>>При попытке доступа к cgi-bin/printenv - not found
>>>
>>>forbidden -- это правильно
>>>а not found это и значит нот фаунд: либо скрипт лежит не
>>>в /usr/local/www/apache22/cgi-bin/, либо разывается иначе. вы уверены, что он называется cgi-bin/printenv?
>>>может cgi-bin/printenv.cgi?
>>
>>Абсоютно точно - printenv. Из командной строки запускается нормально. Повторюсь, в error-логах
>>сервера при попытке доступа к нему появляется запись:
>>Loading CGI at runtime. You could increase shared memory between prosesses by
>>preloading it in your httpd.conf or handler.pl file
>>[Mason] Cannot resolve file to component: /usr/local/www/apache22/cgi-bin/printenv (is file outside component root?)
>>at /usr/local/lib/perl5/site_perl/5.8.8/HTML/Mason/Apachehandler.pm line 853
>
>Так у вас там Mason? можут у вас ещё и mod_perl включен?
>вы уж рассказывайте доконца :-)Да, у меня Apache с mod_perl и HTML::Mason.
Вот весь рассказ)
>Всем привет, я копаюсь с apache и cgi программированием, на перле.
>Возник ламерский вопрос, на который, однако, я не нашел ответа в сети:
>у меня не запускаются мои cgi приложения. Так, к примеру, в
>моем файле index.html создаю форму, которая отсылает данные скрипту в этом
>же каталоге. Захожу через браузер, заполняю форму, жму enter, и на
>экране появляется мой cgi скрипт, в текстовом виде. То есть браузер
>просто его выводит на экран, а не запускает.
>
>И еще вопрос. Я пробовал размещать скрипты в каталоге cgi-bin, но в
>браузере вываливается ошибка 404 Not Found. В файле httpd.conf есть строка
>ScriptAlias /cgi/bin "usr/local/www/apache22/cgi-bin". В логах сервера появляется запись:
>
>
>Loading CGI at runtime. You could increase shared memory between prosesses by
>preloading it in your httpd.conf or handler.pl file
>[Mason] Cannot resolve file to component: /usr/local/www/apache22/cgi-bin/printenv (is file outside component root?)
>at /usr/local/lib/perl5/site_perl/5.8.8/HTML/Mason/Apachehandler.pm line 853
Отчасти я разобрался. С ошибкой 404. Проблема была в том, что не был указан ComponentRoot для Mason, соответственно, файлы в каталоге cgi-bin были за пределами корневой директории, и Mason их не видел. Я добавил в httpd.conf строку
PerlAddVar MasonCompRoot "main => /usr/local/www/apache22"
Теперь директория с cgi-bin видна через браузер.Однако скрипты все равно не запускаются((((
Просто в браузере выводится текст скрипта.
Я добавил в httpd.conf строки
AddHandler cgi-script .cgi .pl
<Directory "/usr/local/www/apache22/cgi-bin".
Options ExecCGI
</Directory>Но это не помогло.
Как заставить apache выполнять cgi?
>[оверквотинг удален]
>Однако скрипты все равно не запускаются((((
>Просто в браузере выводится текст скрипта.
>Я добавил в httpd.conf строки
>AddHandler cgi-script .cgi .pl
><Directory "/usr/local/www/apache22/cgi-bin".
>Options ExecCGI
></Directory>
>
>Но это не помогло.
>Как заставить apache выполнять cgi?Аналогичную проблему решил включением модуля Apache для CGI:
LoadModule cgi_module modules/mod_cgi.so
Он у меня был закомментирован.