CGI скрипты с Nginx в Fedora 15

Содержание материала

Звезда не активнаЗвезда не активнаЗвезда не активнаЗвезда не активнаЗвезда не активна
 

Этот урок показывает, как можно использовать CGI скрипты (Perl скрипты) с Nginx на Fedora 15. Хотя Nginx сам по себе не используют CGI, есть несколько способов обойти это. Я опишу два решения: во-первых, прокси-запросы для CGI-скриптов на Thttpd, небольшой веб-сервер, который поддерживает CGI, в то время как второе решение использует CGI-оболочку для обслуживания CGI-скриптов.

Я не даю никаких гарантий, что это будет работать для Вас!

Предварительные замечания

Здесь я использую веб-сайт www.example.com с корневом документом в /var/www/www.example.com/web/ ; виртуальный хост конфигурации находится в /etc/nginx/conf.d/www.example.com.vhost.

Использование Thttpd

В этой главе я собираюсь описать, как настроить Nginx для запросов прокси для CGI-скриптов (расширений *.cgi или *.pl) Thttpd. Я настроил Thttpd для запуска на 8000 порту.

Сначала установите Thttpd. Существует Thttpd пакет для Fedora 15, но страница Nginx ThttpdCGI говорит, что Thttpd должно быть пропатчен - поэтому мы скачиваем src.rpm пакет для Fedora 15, патчим его и собираем его в новый rpm пакет.

Мы должны установить инструменты, необходимые для создания нового rpm пакета:

  • yum groupinstall 'Development Tools'

Установить yum-utils (yum-утилиты) (пакет содержит yumdownloader инструмент, который позволяет скачать src.rpm ):

  • yum install yum-utils

Далее мы скачать Thttpd src.rpm пакет для Fedora 15:

  • cd /usr/src
  • yumdownloader --source thttpd
  • ls -l
[root@server1 src]# ls -l
total 160
drwxr-xr-x. 2 root root   4096 May 18 13:33 debug
drwxr-xr-x. 3 root root   4096 May 25 16:00 kernels
-rw-r--r--  1 root root 155581 Feb 12  2011 thttpd-2.25b-24.fc15.src.rpm
[root@server1 src]#
  • rpm -ivh thttpd-2.25b-24.fc15.src.rpm

Вы можете игнорировать следующие предупреждения:

[root@server1 src]# rpm -ivh thttpd-2.25b-24.fc15.src.rpm
   1:thttpd                 warning: user mockbuild does not exist - using root
warning: group mockbuild does not exist - using root
warning: user mockbuild does not exist - using root
warning: group mockbuild does not exist - using root
warning: user mockbuild does not exist - using root
warning: group mockbuild does not exist - using root
warning: user mockbuild does not exist - using root
warning: group mockbuild does not exist - using root
warning: user mockbuild does not exist - using root
warning: group mockbuild does not exist - using root
warning: user mockbuild does not exist - using root
warning: group mockbuild does not exist - using root
warning: user mockbuild does not exist - using root
warning: group mockbuild does not exist - using root
warning: user mockbuild does not exist - using root
warning: group mockbuild does not exist - using root
warning: user mockbuild does not exist - using root
warning: group mockbuild does not exist - using root
########################################### [100%]
[root@server1 src]#

Теперь скачать патч в /root/rpmbuild/SOURCES/ и измените /root/rpmbuild/SPECS/thttpd.spec файла соответственно:

  • cd /root/rpmbuild/SOURCES/
  • wget -O thttpd-2.25b-ipreal.patch http://www.danielclemente.com/amarok/ip_real.txt
  • cd /root/rpmbuild/SPECS/
  • vi thttpd.spec

Добавить строку Patch3: thttpd-2.25b-ipreal.patch и %patch3 -p1 -b .ipreal :

[...]
Patch0: thttpd-2.25b-CVE-2005-3124.patch
Patch1: thttpd-2.25b-fixes.patch
Patch2: thttpd-2.25b-getline.patch
Patch3: thttpd-2.25b-ipreal.patch
[...]
% Приготовительный
Установка%-д
% Patch0-p1-б. CVE-2005-3124
% Patch1-p1-б. Исправлений
% Patch2-p1-б. GetLine
% Patch3-p1-б. Ipreal
[...]

Теперь мы строим наш Thttpd rpm пакеты следующим образом:

  • rpmbuild -ba thttpd.spec

Наш Thttpd rpm пакет будет создан в /root/rpmbuild/RPMS/x86_64 ( /root/rpmbuild/RPMS/i386 если вы находитесь в i386 система), идем далее:

  • cd /root/rpmbuild/RPMS/x86_64
  • ls -l
[root@server1 x86_64]# ls -l
total 196
-rw-r--r-- 1 root root  68909 Oct  5 17:16 thttpd-2.25b-24.fc15.x86_64.rpm
-rw-r--r-- 1 root root 129701 Oct  5 17:16 thttpd-debuginfo-2.25b-24.fc15.x86_64.rpm
[root@server1 x86_64]#

Установить Thttpd пакет следующим образом:

  • rpm -ivh thttpd-2.25b-24.fc15.x86_64.rpm

Затем мы делаем резервную копию оригинала /etc/thttpd.conf файл и создаем новый следующим образом:

  • mv /etc/thttpd.conf /etc/thttpd.conf_orig
  • nano /etc/thttpd.conf
# BEWARE : No empty lines are allowed!
# This section overrides defaults
# This section _documents_ defaults in effect
# port=80
# nosymlink         # default = !chroot
# novhost
# nocgipat
# nothrottles
# host=0.0.0.0
# charset=iso-8859-1
host=127.0.0.1
port=8000
user=thttpd
logfile=/var/log/thttpd.log
pidfile=/var/run/thttpd.pid
dir=/var/www
cgipat=**.cgi|**.pl

Это сделает Thttpd читаемым на порту 8000 на 127.0.0.1, а его корневой документ /var/www . Создайте автозапуск для Thttpd ...

  • chkconfig --levels 235 thttpd on

... и запустить его:

  • /etc/init.d/thttpd start

Затем создайте /etc/nginx/proxy.conf :

  • nano /etc/nginx/proxy.conf
proxy_redirect          off;
proxy_set_header        Host            $host;
proxy_set_header        X-Real-IP       $remote_addr;
proxy_set_header        X-Forwarded-For $proxy_add_x_forwarded_for;
client_max_body_size    10m;
client_body_buffer_size 128k;
proxy_connect_timeout   90;
proxy_send_timeout      90;
proxy_read_timeout      90;

Теперь откройте Dаш виртуальный хост файл конфигурации ...

  • nano /etc/nginx/conf.d/www.example.com.vhost

... и добавьте location /cgi-bin {} раздел в server {} контейнер:

server {
[...]
   location /cgi-bin {
      include proxy.conf;
      proxy_pass http://127.0.0.1:8000;
   }
[...]
}

Перезагрузить Nginx:

  • /etc/init.d/nginx reload

Поскольку корнем Thttpd является /var/www , location /cgi-bin переводится в каталог /var/www/cgi-bin (это верно для всех ваших виртуальных доменов, что означает, что каждый виртуальный хост должен распологать свои CGI-скрипты в /var/www/cgi-bin; это недостаток для виртуального хостинга; решением которого является использование CGI-оболочка).

Создайте каталог ...

  • mkdir /var/www/cgi-bin

... , а затем разместить CGI-скрипты в нем и сделайте их исполняемыми. Для тестирования я создам небольшой Hello World Perl скрипт (вместо hello_world.cgi вы также можете использовать расширение .pl -> hello_world.pl ):

  • nano /var/www/cgi-bin/hello_world.cgi
#!/usr/bin/perl -w
   # Tell perl to send a html header.
   # So your browser gets the output
   # rather then <stdout>(command line
   # on the server.)
   print "Content-type: text/html\n\n";
   # print your basic html tags.
   # and the content of them.
   print "<html><head><title>Hello World!! </title></head>\n";
   print "<body><h1>Hello world</h1></body></html>\n";
  • chmod 755 /var/www/cgi-bin/hello_world.cgi

Откройте в браузере и проверьте работу скрипта http://www.example.com/cgi-bin/hello_world.cgi, если все пойдет хорошо, вы должны получить страницу с набписью Hello World.


Обмениваться, хранить, передавать Ваши файлы стало просто как никогда.
yandex-disk
Читать подробнее: для чего Yandex-Диск проекту Mini-Server. Практика установки, настройки и использования сетевого хранилища на Ubuntu server LTS 12.04 в статье Резервное копирование сервера Ubuntu на Яндекс Диск.

>> Ubuntu 12.04 + Nginx Скачать сервер
>> Fedora 15 Скачать сервер
>> Простой Debian 6.0.6 Скачать сервер
>> CentOS 6.0 и
+ (5.6) другой
Скачать сервер
>> OpenSUSE 11.4
MAX
Скачать сервер

Вход на сайт

ВНИМАНИЕ!

Регистрация на сайте только по согласованию с администратором ресурса. Обращаться через форму обратной связи.