Как заставить Python работать с Lighttpd?

25

У меня есть установка Lighttpd на моем Raspberry Pi, но я бы хотел, чтобы серверный код работал сейчас. Я знаком с PHP, но я думаю, что должен попробовать Python, так как он должен быть языком "go to" для Raspberry Pi. Как я могу получить Python для обработки кода на стороне сервера через Lighttpd?

Марк Инграм
источник
ссылка на penzilla.net/tutorials/python/cgi не работает, но спасибо за отличную рецензию. Мой Пи прибывает завтра!

Ответы:

16

Что вам нужно, так это поддержка CGI для lighttpd.

Откройте файл конфигурации lighttpd ( /etc/lighttpd/lighttpd.conf ) и раскомментируйте строку «mod_cgi» (удалите # из начала строки, если она существует) или добавьте эту строку, если ее нет.

server.modules = (
            "mod_access",
            "mod_alias",
            "mod_accesslog",
            "mod_auth",
            "mod_ssi",
            "mod_cgi",
            "mod_compress",
            "mod_fastcgi",
            "mod_rewrite",
            "mod_magnet",
)

Добавьте следующее в конец файла:

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

Перезапустите демон lighttpd:

sudo service lighttpd force-reload

Затем создайте каталог cgi-bin в корневом каталоге вашего веб-сервера. Любые файлы, заканчивающиеся на .py в этом каталоге, будут обрабатываться Python.

Теперь вы можете писать скрипты Python для обработки веб-запросов. Вы можете прочитать это руководство по написанию CGI-программ на Python .

Если с другой стороны , вы предпочли бы использовать рамки для обработки некоторых деталей низкого уровня и повысить производительность труда разработчиков, я предлагаю проверить web.py . Вы можете установить его используя apt:

sudo apt-get install python-webpy

Lucas at Cloud 101 Blog опубликовал отличное руководство по написанию веб-страниц с использованием фреймворка webpy.

Стив Робиллард
источник
Это FastCGI или CGI?
Марк Ингрэм
Обратите внимание, что обычный CGI требует запуска интерпретатора Python для каждого запроса, поэтому он подходит только для случайного запроса.
Турбьерн Равн Андерсен
Увы, это сработало только частично. Теперь я могу запустить Python, вызвав «http: // (IP) /cgi-bin/test.py?parameter=xxx», но не «http: // (IP) /cgi-bin/test.cgi?parameter=xxx». "- позже выдает ошибку 404 ...
576i
@ 576i Попробуйте изменить эту строку cgi.assign = (".py" => "/ usr / bin / python") на cgi.assign = (".cgi" => "/ usr / bin / python")
Стив Робиллард
1
@ 576i Вместо того, чтобы продолжать это обсуждение в комментариях к другому вопросу, откройте новый вопрос и укажите, что работает и что вы пытались. Затем я удалю эти комментарии. Кстати, есть ли причина, по которой вы не можете просто использовать расширение .py, которое, как вы сказали, работает?
Стив Робиллард
3

Принятый ответ не работает для меня, и он также игнорирует предварительно настроенные пакеты, доступные для Lighttpd.

Правильный способ установки Python на Lighttpd для Raspberry:

Сначала включите cgi

sudo lighttpd-enable-mod cgi

Это создает новый файл конфигурации для Lighttpd:

/etc/lighttpd/conf-enabled/10-cgi.conf

Отредактируйте файл конфигурации nano /etc/lighttpd/conf-enabled/10-cgi.conf, чтобы он выглядел примерно так

server.modules += ( "mod_cgi" )

$HTTP["url"] =~ "^/cgi-bin/" {
        alias.url += ( "/cgi-bin/" => "/var/www/cgi-bin" )
        cgi.assign = (
                ".py"  => "/usr/bin/python",
        )
}

Убедитесь, что Python 2 установлен, выполнив:

/usr/bin/python --version

Теперь перезагрузите

sudo /etc/init.d/lighttpd force-reload

Удачи!

NDB
источник