Apache Версия 2.0 Сервера HTTP
Связанные Модули | Связанные Директивы |
---|---|
CGI (Общий Интерфейс Ворот) определяет путь для сервера сети, чтобы взаимодействовать с внешними производящими содержание программами, которые часто упоминаются как программы CGI или подлинники CGI. Это является самым простым, и самым обычным, путь поместить динамическое содержание в ваш вебсайт. Этот документ будет введением в настраивание CGI на вашем Apacheском сервере сети, и начинающем письме программы CGI.
чтобы заставить ваши программы CGI работать должным образом, Вы будете должны формировать Apacheа, чтобы разрешить выполнение CGI. Есть несколько способов сделать это.
ScriptAlias
директива говорит Apacheу, что специфический справочник обойден для программ CGI. Апач предположит, что каждый файл в этом справочнике - программа CGI, и попытается выполнить это, когда, который специфический ресурс требует клиент.
ScriptAlias
директива похожа:
ScriptAlias /cgi-bin/ /usr/local/apache2/cgi-bin/
показанный пример - от вашего неплатежа
httpd.conf
файл конфигурации, если Вы устанавливали Apacheа в местоположении по умолчанию.
ScriptAlias
директива очень походит
Alias
директива, которая определяет приставку URL, которая состоит в том, чтобы к нанесенному на карту к специфическому справочнику.
Alias
и
ScriptAlias
обычно используются для справочников, которые являются вне
DocumentRoot
справочник. Различие между
Alias
и
ScriptAlias
является этим
ScriptAlias
имеет добавленное подразумевение, что все, под которым приставку URL будут считать программой CGI. Так, пример выше говорит Apacheа что любой запрос о начинающемся ресурсе
/cgi-bin/
нужно служить от справочника
/usr/local/apache2/cgi-bin/
, и нужно рассмотреть как программа CGI.
например, если URL
http://www.example.com/cgi-bin/test.pl
требуется, Apache попытается выполнить файл
/usr/local/apache2/cgi-bin/test.pl
и возвращение продукция. Конечно, файл должен будет существовать, и быть выполнимым, и продукция возвращения специфическим способом, или Apache возвратит ошибочное сообщение.
программы CGI часто ограничиваются
ScriptAlias
'справочники редактора для соображений безопасности. Таким образом, администраторы могут сильно управлять, кому разрешают использовать программы CGI. Однако, если надлежащие меры безопасности приняты, нет никакой причины, почему программами CGI нельзя управлять от произвольных справочников. Например, Вы можете желать позволить пользователям иметь содержание сети в их домашних каталогах с
UserDir
директива. Если они хотят иметь их собственные программы CGI, но не иметь доступа к основному
cgi-bin
справочник, они будут должны быть в состоянии управлять программами CGI в другом месте.
есть два шага к позволению выполнения CGI в произвольном справочнике. Сначала,
cgi-script
тренер должен быть активизирован, используя
AddHandler
или
SetHandler
директива. Во вторых,
ExecCGI
должен быть определен в
Options
директива.
Вы могли явно использовать
Options
директива, в вашем главном файле конфигурации сервера, чтобы определить, что выполнение CGI разрешалось в специфическом справочнике:
<Directory /usr/local/apache2/htdocs/somedir>
Options +ExecCGI
</Directory>
вышеупомянутая директива говорит Apacheу разрешать выполнение файлов CGI. Вы будете также должны сказать сервер, какие файлы являются файлами CGI. Следующий
AddHandler
директива говорит серверу рассматривать все файлы с
cgi
или
pl
расширение как программы CGI:
AddHandler cgi-script .cgi .pl
.htaccess
tutorial
показы, как активизировать программы CGI, если Вы не имеете доступа к
httpd.conf
.
позволять выполнение программы CGI для любого файла, заканчивающегося в
.cgi
в справочниках пользователей, Вы можете использовать следующую конфигурацию.
<Directory /home/*/public_html>
Options +ExecCGI
AddHandler cgi-script .cgi
</Directory>
если Вы желаете определять a
cgi-bin
подсправочник справочника пользователя, где все будут рассматривать как программа CGI, Вы можете использовать следующий.
<Directory /home/*/public_html/cgi-bin>
Options ExecCGI
SetHandler cgi-script
</Directory>
есть два главных различия между "регулярным" программированием, и программированием CGI.
сначала, всей продукции из вашей программы CGI нужно предшествовать ударом головой ТИПА ПАНТОМИМЫ. Это - удар головой HTTP, который говорит клиенту, какое содержание это получает. Большинство времени, это будет похожо:
Content-type: text/html
во-вторых, ваша продукция должна быть в HTML, или некотором другом формате, который браузер будет в состоянии показать. Большинство времени, это будет HTML, но иногда Вы могли бы написать программу CGI, которую продукции изображение джифа, или другой не-HTML удовлетворяют.
кроме тех двух вещей, пишущий программу CGI будет много походить на любую другую программу, которую Вы могли бы написать.
следующее - пример программа CGI, которая печатает одну линию к вашему браузеру. Напечатайте в следующем, сэкономите это к названному файлу
first.pl
, и вставленный в это ваш
cgi-bin
справочник.
#!/usr/bin/perl
print "Content-type: text/html\n\n";
print "Hello, World.";
даже если Вы не знакомы с Perl, Вы должны быть в состоянии видеть то, что случается здесь. Первая линия говорит Apacheа (или безотносительно снаряда, которым Вы, случается, бежите под), что эта программа может быть выполнена, кормя файл переводчику, найденному в местоположении
/usr/bin/perl
. вторая линия печатает декларацию довольного типа, мы говорили о, сопровождаемый двумя переводами каретки newline пары. Это помещает чистую линию после удара головой, указывать конец ударов головой HTTP, и начала тела. Третья линия печатает вереницу "Привет, Мир.". И это - конец этого.
если Вы открываете ваш любимый браузер и говорите этому получать адрес
http://www.example.com/cgi-bin/first.pl
или везде, где Вы помещаете ваш файл, Вы будете видеть одну линию
Hello, World.
появитесь в вашем окне браузера. Это не является очень захватывающим, но как только Вы получаете ту работу, Вы будете иметь хороший шанс на получение примерно чем - нибудь работа.
есть четыре основных вещи, которые Вы можете видеть в вашем браузере, когда Вы пробуете получить доступ к вашей программе CGI от сети:
Content-Type
набор в вашей программе CGI.
помнить, что сервер не бежал как Вы. Таким образом, когда сервер запускает, это бежит с разрешениями непривилегированного пользователя - обычно
nobody
, или
www
- и таким образом это будет нуждаться в дополнительных разрешениях выполнить файлы, которые принадлежат Вам. Обычно, способ давать файл достаточные разрешения, которые будут выполнены
nobody
должен дать каждого, выполняют разрешение на файле:
chmod a+x first.pl
кроме того, если ваша программа будет читать от, или напишет, любые другие файлы, то те файлы будут должны иметь правильные разрешения разрешить этому.
когда Вы управляете программой от вашей линии команды, Вы имеете определенную информацию, которую передают к снаряду без Вас думающий об этом. Например, Вы имеете a
PATH
, который говорит снаряд, где это может искать файлы, на которые Вы ссылаетесь.
когда программа пробегает сервер сети как программа CGI, это, возможно, не имеет того же самого
PATH
. любые программы, которые Вы призываете в вашей программе CGI (как
sendmail
, например), будет должный быть определены полной дорожкой, так, чтобы снаряд мог найти их, когда это пытается выполнить вашу программу CGI.
общее проявление этого - дорожка к переводчику подлинника (часто
perl
) обозначенный в первой линии вашей программы CGI, которая будет выглядеть кое-что как:
#!/usr/bin/perl
удостоверьтесь, что это - фактически дорожка к переводчику.
кроме того, если ваша программа CGI зависит от другого environment variables , Вы будете должны уверить, что те переменные передает Apache.
большинство времени, когда программа CGI терпит неудачу, это - из-за проблемы с программой непосредственно. Это особенно верно, как только Вы приобретаете навык этого материала CGI, и больше не делаете вышеупомянутые две ошибки. Первое необходимое действие состоит в том, чтобы удостовериться, что ваша программа бежит от линии команды перед испытанием этого через сервер сети. Например, пробуйте:
cd /usr/local/apache2/cgi-bin
./first.pl
(не звоните
perl
переводчик. Снаряд и Apache должны найти переводчика, использующего
path information
на первой линии подлинника.)
первой вещью, которую Вы видите написанный в соответствии с вашей программой, должен быть ряд ударов головой HTTP, включая
Content-Type
, сопровождаемый чистой линией. Если Вы будете видеть что - нибудь еще, то Apache возвратится
Premature end of script headers
ошибка, если Вы пробуете управлять этим через сервер. См.
Writing a CGI program
выше для большего количества деталей.
ошибочные регистрации - ваш друг. Что - нибудь, что идет не так, как надо, производит сообщение в ошибочной регистрации. Вы должны всегда выглядеть там первыми. Если место, где Вы принимаете гостей за вашим вебсайтом, не разрешает Вам доступ к ошибочной регистрации, Вы должны вероятно принять гостей за вашим участком где-то в другом месте. Учитесь читать ошибочные регистрации, и Вы найдете, что почти все ваши проблемы быстро идентифицированы, и быстро решены.
suexec
программа поддержки позволяет программам CGI управляться согласно различным пользовательским разрешениям, в зависимости от какого действительного хозяина или пользовательского домашнего каталога они расположены в. Suexec имеет очень строгую проверку разрешения, и любой отказ в той проверке приведет к вашим программам CGI, терпящим неудачу с
Premature end of script headers
.
проверять, используете ли Вы suexec, которым управляют
apachectl -V
и чек на местоположение
SUEXEC_BIN
. если Apache находит
suexec
набор из двух предметов там на запуске, suexec будет активизирован.
если Вы полностью не понимаете suexec, Вы не должны использовать это. Чтобы повредить suexec, просто удалите (или переименуйте),
suexec
набор из двух предметов, на который указывают
SUEXEC_BIN
и затем повторно начните сервер. Если, после чтения о
suexec
, Вы все еще желаете использовать это, затем бежите
suexec -V
находить местоположение suexec файла системного журнала, и использовать тот файл системного журнала, чтобы найти, какую политику Вы нарушаете.
поскольку Вы становитесь более передовыми в программировании CGI, станет полезно понять больше о том, что случается негласно. Определенно, как браузер и сервер общаются друг с другом. Поскольку, хотя очень хорошо написать программу, которая печатает "Привет, Мир.", это не особенно полезно.
переменные окружающей среды - ценности, которые плавают вокруг Вас, поскольку Вы используете ваш компьютер. Они - полезные вещи как ваша дорожка (где компьютер ищет фактический файл, осуществляя команду, когда Вы печатаете это), ваше имя пользователя, ваш предельный тип, и так далее. Для полного списка вашего нормального, каждый день переменные окружающей среды, тип
env
в команде незамедлительно.
в течение сделки CGI, сервер и браузер также устанавливают переменные окружающей среды, так, чтобы они могли общаться друг с другом. Они - вещи как тип браузера (Netscape, ТО ЕСТЬ, Рысь), тип сервера (Apache, IIS, Вебсайт), название программы CGI, которой управляют, и так далее.
эти переменные доступны для программиста CGI, и - половина истории коммуникации клиент-сервер. Полный список необходимых переменных - в http://hoohoo.ncsa.uiuc.edu/cgi/env.html .
этот простой Perl CGI программа покажет все переменные окружающей среды, которые раздаются. Две подобных программы включены в
cgi-bin
справочник Apacheского распределения. Отметьте, что некоторые переменные требуются, в то время как другие являются дополнительными, таким образом Вы можете видеть, что некоторые переменные перечисляли, которые не были в официальном списке. Кроме того, Apache обеспечивает много различных путей для Вас к
add your own environment variables
к основным, обеспеченным по умолчанию.
#!/usr/bin/perl
print "Content-type: text/html\n\n";
foreach $key (keys %ENV) {
print "$key --> $ENV{$key}<br>";
}
другая коммуникация между сервером и клиентом случается по стандартному входу (
STDIN
) и стандартная продукция (
STDOUT
). В нормальном каждодневном контексте,
STDIN
означает клавиатуру, или файл, что программа дается, чтобы действовать на, и
STDOUT
обычно означает пульт или экран.
когда Вы
POST
форма сети к программе CGI, данные в той форме укутаны в специальный формат и поставляются вашей программе CGI
STDIN
. программа тогда может обработать те данные, как если бы это входило от клавиатуры, или от файла
"специальный формат" является очень простым. Полевое название и его ценность объединены с равнянием (=) признак, и пары ценностей объединены с амперсандом (&). Неудобные характеры как места, амперсанды, и равняются признакам, преобразованы в их эквивалентную ведьму так, чтобы они не делали работы клейким. Целая вереница данных могла бы выглядеть кое-что как:
name=Rich%20Bowen&city=Lexington&state=KY&sidekick=Squirrel%20Monkey
Вы будете иногда также видеть этот тип вереницы, приложенной к URL. Когда это сделано, сервер помещает ту вереницу в названную переменную окружающей среды
QUERY_STRING
. это назвало a
GET
запрос. Ваша форма HTML определяет ли a
GET
или a
POST
используется, чтобы поставить данные, устанавливая
METHOD
признак в
FORM
признак.
ваша программа тогда ответственна за то, что разделила ту вереницу на полезную информацию. К счастью, есть библиотеки и модули, доступные, чтобы помочь Вам обрабатывать эти данные, так же как обращаться с другими из аспектов вашей программы CGI.
когда Вы пишете программы CGI, Вы должны рассмотреть использование кодовой библиотеки, или модуля, сделать большинство работы ворчания для Вас. Это приводит к меньшему количеству ошибок, и более быстрому развитию.
если Вы пишете программы CGI в Perl, модули доступны на
CPAN
. самый популярный модуль с этой целью
CGI.pm
. Вы могли бы также рассмотреть
CGI::Lite
, который осуществляет минимальный набор функциональных возможностей, которые являются всем, что Вы нуждаетесь в большинстве программ.
если Вы пишете программы CGI в C, есть разнообразие вариантов. Один из них-
CGIC
библиотека, от
http://www.boutell.com/cgic/
.
есть большое количество ресурсов CGI на сети. Вы можете обсудить проблемы CGI с другими пользователями на группе Usenet comp.infosystems.www.authoring.cgi . и - список адресатов серверов от Гильдии Авторов HTML - большой источник ответов на ваши вопросы. Вы можете узнать больше в http://www.hwg.org/lists/hwg-servers/ .
и, конечно, Вы должны вероятно прочитать спецификацию CGI, которая имеет все детали относительно операции программ CGI. Вы можете найти оригинальную версию в NCSA и есть обновленный проект в Common Gateway Interface RFC project .
когда Вы объявляете вопрос о проблеме CGI, которую Вы имеете, ли к списку адресатов, или к телеконференции, удостоверьтесь, что Вы обеспечиваете достаточно информации о том, что случилось, что Вы ожидали случаться, и как то, что фактически случилось, было отлично, каким сервером Вы бежите, какой язык ваша программа CGI была в, и, если возможно, кодекс оскорбления. Это сделает обнаружение вашей проблемы намного более простым.
отметить, что вопросы о проблемах CGI должны никогда быть объявлен к Apacheской базе данных ошибки, если Вы не уверены, что Вы нашли проблему в Apacheском исходном тексте.