Как заставить 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

Удачи!

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