Python CGI на микроэкземпляре Amazon AWS EC2 - с практическими рекомендациями!


23

Как сделать так, чтобы микроэкземпляр EC2 обслуживал CGI-скрипты из lighthttpd? Например Python CGI?

Ну, это заняло полдня, но я запустил Python cgi на бесплатном микроэкземпляре Amazon AWS EC2, используя сервер lighttpd. Я думаю, что это поможет моим собратьям собрать все шаги в одном месте. Вооружившись простыми шагами ниже, вам потребуется всего 15 минут, чтобы все настроить!

Мой вопрос к более опытным пользователям, читающим это: есть ли недостатки в том, что я сделал? (См. Права доступа к файлам и каталогам.)

Шаг 1: Запустите свой экземпляр EC2 и вставьте в него ssh.

Очевидно, что вам нужно зарегистрироваться на Amazon EC2 и сохранить пары ключей в файле * .pem. Я не буду это обсуждать, так как Amazon говорит вам, как это сделать.]

  1. Войдите в свою учетную запись AWS и запустите свой экземпляр EC2. В Интернете есть учебники по этому вопросу. Обратите внимание, что размер экземпляра по умолчанию, который вам представляет Amazon, «маленький». Это не «микро» и поэтому это будет стоить вам денег. Обязательно вручную выберите «микро». (Микро экземпляры бесплатны только на первый год ...)

  2. Найдите общедоступный код DNS для вашего работающего экземпляра. Чтобы сделать это, нажмите на экземпляр в верхней панели панели инструментов, и вы в конце концов увидите поле «Общедоступный DNS», заполненное в нижней панели. (Возможно, вам придется немного поковыряться.) Public DNS выглядит примерно так:
    ec2-174-129-110-23.compute-1.amazonaws.com

  3. Запустите консольную программу Unix. (В Max OS X он называется Terminal и находится в папке Applications -> Utilities.)

  4. Перейдите в каталог на настольном компьютере, в котором находится файл * .pem, содержащий ваши пары ключей AWS.

  5. SSH к вашему экземпляру EC2, используя такую ​​команду:
    ssh -i <<your *.pem filename>> ec2-user@<< Public DNS address >>

    Итак, для меня это было:
    ssh -i amzn_ec2_keypair.pem ec2-user@ec2-174-129-110-23.compute-1.amazonaws.com

  6. Ваш экземпляр EC2 должен впустить вас.

Шаг 2: Загрузите lighttpd в ваш экземпляр EC2.

  1. Чтобы установить lighttpd, вам понадобится root-доступ к вашему экземпляру EC2. Проблема в том, что Amazon не позволит вам войти в систему как root. (По крайней мере, не просто.) Но есть обходной путь. Введите эту команду:
    sudo /bin/bash

  2. Системный символ приглашения изменится с $ на #. Мы не выйдем из "sudo" до самого последнего шага во всем этом процессе.

  3. Установите приложение lighttpd (версия 1.4.28-1.3.amzn1 для меня):
    yum install lighttpd

  4. Установите библиотеки FastCGI для lighttpd (не нужно, но почему бы и нет?):
    yum install lighttpd-fastcgi

  5. Проверьте, что ваш сервер работает:
    /etc/init.d/lighttpd start

Шаг 3: Пусть внешний мир увидит ваш сервер.

  1. Если вы сейчас попытаетесь подключиться к вашему серверу из браузера на рабочем столе, произойдет сбой. Причина: по умолчанию Amazon AWS не открывает никаких портов для вашего экземпляра EC2. Итак, вы должны открыть порты вручную.

  2. Перейдите на панель управления EC2 в браузере на рабочем столе. Нажмите «Группы безопасности» на левой панели. В верхней правой панели появится одна или несколько групп безопасности. Выберите тот, который был назначен вашему экземпляру EC2 при запуске вашего экземпляра.

  3. В нижней правой панели появится таблица «Разрешенные подключения». Всплывающее меню позволит вам выбрать «HTTP» в качестве метода подключения.

  4. Другие значения в этой строке таблицы должны быть: tcp, 80, 80, 0.0.0.0/0

  5. Теперь поразите сервер вашего экземпляра EC2 с рабочего стола в вашем браузере. Используйте публичный DNS-адрес, который вы использовали ранее для входа в SSH. Вы должны увидеть общую веб-страницу lighttpd. Если нет, я не могу вам помочь, потому что я такой нуб. :-(

Шаг 4: Настройте lighttpd для обслуживания CGI.

  1. Вернитесь в консольную программу, перейдите в каталог конфигурации для lighttpd:
    cd /etc/lighttpd

  2. Чтобы включить CGI, вы должны раскомментировать одну строку в файле <modules.conf>. (Я мог бы включить быструю CGI, но детские шаги лучше всего!) Вы можете сделать это с помощью редактора «ed» следующим образом:
    ed modules.conf
    /include "conf.d\/cgi.conf"/
    s/#//
    w
    q

  3. Создайте каталог, в котором будут жить CGI-программы. (Файл /etc/lighttpd/lighttpd.conf определяет, где это будет.) Мы создадим наш каталог в расположении по умолчанию, поэтому нам не нужно редактировать файлы конфигурации:
    cd /var/www/lighttpd
    mkdir cgi-bin
    chmod 755 cgi-bin

  4. Почти готово! Конечно, вам нужно поместить тестовую CGI-программу в каталог cgi-bin. Вот один из них:
    cd cgi-bin
    ed
    a
    #!/usr/bin/python
    print "Content-type: text/html\n\n"
    print "<html><body>Hello, pyworld.</body></html>"
    .
    w hellopyworld.py
    q
    chmod 655 hellopyworld.py

  5. Перезагрузите сервер lighttpd:
    /etc/init.d/lighttpd restart

  6. Протестируйте свою программу CGI. В браузере вашего рабочего стола нажмите этот URL, заменив публичный DNS-адрес вашего экземпляра EC2:
    http://<<Public DNS>>/cgi-bin/hellopyworld.py

    Для меня это было:
    http://ec2-174-129-110-23.compute-1.amazonaws.com/cgi-bin/hellopyworld.py

Шаг 5: Вот и все! Уберись и поблагодари!

  • Чтобы выйти из команды «sudo / bin / bash», указанной ранее, введите:
    exit

  • Благодарности: Огромное спасибо:

    wiki.vpslink.com/Install_and_Configure_lighttpd

    www.cyberciti.biz/tips/lighttpd-howto-setup-cgi-bin-access-for-perl-programs.html

    aws.typepad.com/aws/2010/06/building-three-tier-architectures-with-security-groups.html

  • Удачи, амигос! Я прошу прощения за нетрадиционную природу этого «вопроса», но я получил такую ​​большую помощь от Stackoverflow, что мне не терпелось что-то вернуть.


4
Я приветствую вас за публикацию руководства, но ТАК за вопросы. Я бы порекомендовал blogspot или что-то подобное для этого. Если вы хотите отдать, вы должны ответить на вопросы :)

Я утверждаю, что любое «как» содержит неявный вопрос, то есть «Как мне сделать Х?» В будущем я поставлю вопрос в явном виде, хотя изначально он казался педантичным. Но, поскольку это может помочь поисковым системам и избежать путаницы в читательской аудитории, теперь я думаю, что это стоит. Спасибо.

Очень любезно с новым участником размещать такие инструкции. В любом случае, он отвечает на вопросы, которые еще не задавались. Кстати, он дает мне информацию, в которой я нуждался несколько дней назад, теперь я знаю о существовании такого рода услуг. Кстати, в то время, когда много говорят о Облаке, этот пост, вероятно, будет очень полезен для большого количества людей. Так что он не заслуживает разочарования, и я одобряю.

@ user595585 Утвержденная практика - задавать вопрос «Как мне» и отвечать на него самостоятельно. Вы даже получите больше повторений за свои проблемы таким образом. Пожалуйста, смотрите FAQ . «Также вполне нормально задавать и отвечать на свой вопрос, если вы притворяетесь, что находитесь в опасности: сформулируйте это в форме вопроса».
К. Росс

3
@user Редактировать ваш вопрос , так что это вопрос, то ответить на него со всеми подробностями вы обеспечили. Кроме того, отбросьте некоторые из этих паренов, вы говорите о хостинге python на EC2, а не о lisp.
Сорвал

Ответы:


3

(Странный пост, так что, надеюсь, это не будет таким странным ответом).

По вопросу о недостатках безопасности: обычно считается плохой практикой хранить скрипты cgi-bin в корне документа веб-сервера. Даже W3C ускользает от него в разделе «Являются ли скомпилированные языки, такие как C безопаснее ...» в их часто задаваемых вопросах по безопасности в World Wide Web :

Рассмотрим следующий сценарий. Для удобства вы решили идентифицировать CGI-скрипты на сервере, используя расширение .cgi. Позже вам нужно внести небольшое изменение в интерпретируемый скрипт CGI. Вы открываете его с помощью текстового редактора Emacs и модифицируете скрипт. К сожалению, редактирование оставляет резервную копию исходного кода скрипта, лежащего в дереве документа. Хотя удаленный пользователь не может получить исходный код, извлекая сам скрипт, он теперь может получить резервную копию, слепо запросив URL:

    http://your-site/a/path/your_script.cgi~

(Это еще одна веская причина ограничить использование сценариев CGI для cgi-bin и убедиться, что cgi-bin отделен от корня документа.)

Это не такая существенная угроза, как возможность записи файла в корень документа. Однако злоумышленник может получить исходный код cgi, разработать направленную атаку против него и использовать его в качестве ступеньки на сервере.

Чтобы смягчить это, вы можете добавить следующие строки в файл lighttpd.conf (или некоторые его варианты), чтобы направить cgi-bin в каталог, отдельный от корня документа / var / www / lighttpd.

$HTTP["url"] =~ "/cgi-bin/" { cgi.assign = ( "" => "" ) }
alias.url = ( "/cgi-bin/" => "/usr/lib/cgi-bin/" )

Для этого требуются модули cgi и alias для lighttpd.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.