Як змусити Python працювати з Lighttpd?


25

У мене є налаштування Lighttpd на моєму Raspberry Pi, але я хотів би, щоб код на стороні сервера працював зараз. Я знайомий з PHP, але я думаю, що я повинен спробувати Python, оскільки це повинен бути "перейти" на мову 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 в блозі Cloud 101 опублікував чудовий підручник з написання веб-сторінок за допомогою webpy фрейму.


Це FastCGI чи CGI?
— Позначити Інграма

Зауважте, що звичайний CGI вимагає запуску інтерпретатора python для кожного запиту, тому він добре підходить лише для випадкових запитів.
— Thorbjørn Ravn Andersen

На жаль, це спрацювало лише частково. Тепер я можу запустити 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.