Мои скрипты CGI Perl CentOS 7 работают некорректно, они либо отображаются в виде простого текста, либо я получаю сообщение об ошибке сервера .
Я безуспешно помещал свои сценарии в каталог по умолчанию / var / www / cgi-bin
.
Я пытался разместить сценарии CGI в / var / www / html / another-dir
, но они появляются как обычный текст.
Вот как заставить скрипты CGI Perl правильно выполняться в CentOS 7.
Я оставляю это здесь, так как кажется, что многие ресурсы в Интернете не объединяют эти шаги и оставляют таких людей, как я, очень запутанными .
Короче говоря, вот что нужно сделать.
httpd.conf
. httpd.conf
. Установить и настроить программное обеспечение
sudo yum update
sudo yum install httpd
sudo yum install perl perl-CGI
sudo systemctl start httpd.service
sudo systemctl enable httpd.service
Создайте свой тестовый файл CGI
Даже полностью выполнив эти шаги, я ни разу не получил сценарий CGI внутри / var / www / cgi-bin
для загрузки без изменения корневого веб-каталога внутри httpd.conf
. Вместо этого я решил просто активировать CGI в другом каталоге.
На моем сервере я хочу, чтобы корневой веб-каталог html
содержал мои файлы CGI. Это /var/www/html/hello.cgi
#!/usr/bin/perl
print "Content-type: text/html\n\n"; # This is mandatory.
print "<h2>Hello world!</h2>";
Убедитесь, что модуль CGI загружен. Внутри httpd.conf
Вы можете легко проверить это с помощью команды.
grep -n "LoadModule" /etc/httpd/conf/httpd.conf
Я мог видеть, что модули CGI не были указаны, и я подтвердил их существование в папке модулей через:
find /etc/httpd/modules/ -iname "*cgi*"
Это тот, который мне нужен:
/etc/httpd/modules/mod_cgi.so
Давайте добавим это в файл /etc/httpd/conf/httpd.conf
:
LoadModule cgi_module modules/mod_cgi.so
Я считаю, что вам нужно загрузить модуль в другом в Ubuntu , имейте это в виду.
Измените настройки каталога в httpd.conf
Перед перезапуском httpd
мы должны изменить еще одну вещь внутри / etc / httpd / conf / httpd.conf
:
<Directory "var/www/html">
Options +ExecCGI
AddHandler cgi-script .cgi .pl
</Directory>
По мнению многих пользователей Google, вам, возможно, придется также изменить эту часть файла httpd.conf
, чтобы он указывал на тот же каталог, что и выше "var / www / html"
:
ScriptAlias /cgi-bin/ "/var/www/cgi-bin/"
Я не изменял свой, похоже, это не имело значения.
Измените разрешения, чтобы разрешить выполнение CGI
И это заставило меня сильно застрять! Не упускайте это из виду!
Вы должны сообщить своему серверу, что эти сценарии CGI могут выполняться как программы.
chmod 705 *.cgi
Или вы можете настроить таргетинг на отдельные сценарии CGI.
chmod 705 hello.cgi
(Некоторые люди в Интернете сказали, что chmod 755
и 777
также могут работать.)
Теперь перезапустите httpd
вот так:
sudo systemctl restart httpd.service
На данный момент мой CGI скрипты правильно отображаются в HTML.
Они обслуживаются из корневого веб-сайта следующим образом: http: //
] Пожалуйста, не стесняйтесь добавлять любую дополнительную информацию, которая может помочь другим .
(Некоторые люди в Интернете сказали, что chmod 755 и 777 также могут работать.)
Если вы разделяете сервер с кем-либо еще, и в целом из-за возможной атаки вы почти определенно не следует использовать / any / из 755, 705 или 777. Это даст другим пользователям, вошедшим на ваш сервер, возможность выполнять ваши скрипты с любыми аргументами, которые они выбирают. Вместо этого убедитесь, что в ваших сценариях и во всех каталогах над ним есть nginx, apache или любой другой пользователь / группа, запускающая ваш веб-сервер, и должна выполнять ваши сценарии как владелец или группа (с помощью команды chown или chgrp). Затем установите третий бит в chmod равным 0 (вы никогда не должны использовать что-то более разрешительное, чем 750), потому что другие пользователи на вашем сервере (кроме вас и nginx / apache, будь то злоумышленник или законный пользователь) имеют / no / business выполнение, чтение или изменение ваших скриптов из оболочки.
Вы можете прочитать о правах доступа к файлам Linux, например, https://www.digitalocean.com/community/tutorials/linux-permissions-basics-and-how-to-use-umask-on-a-vps#octal или https: / /www.digitalocean.com/community/tutorials/an-introduction-to-linux-permissions и т. д.
Удачи!
РЕДАКТИРОВАТЬ: Это объяснение того, что пользователь chick написал 28 января - хороший звонок , разрешения в учебнике слишком велики.
Еще одно примечание, которое следует упомянуть, это то, что если вы пишете свой код в среде Windows, а затем удаленно загружаете его в сервер, убедитесь, что вы преобразовали файл в Unix EOL (особенно при использовании Notepad ++, находящегося в меню «Правка»); в противном случае вы получите ошибку сервера.