Як змусити 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.