FastCGI、Lighttpd 和 Flask

Posted

技术标签:

【中文标题】FastCGI、Lighttpd 和 Flask【英文标题】:FastCGI, Lighttpd, and Flask 【发布时间】:2016-07-16 07:03:27 【问题描述】:

我正在 Raspberry Pi 上设置一个简单的 Web 服务器,但我似乎无法正确设置 lighttpd、fastcgi 和 flask。

到目前为止,我已经对/etc/lighttpd/lighttpd.conf 进行了几次迭代,最近的一次是

fastcgi.server = ("/test" =>
    "test" => (
        "socket" => "/tmp/test-fcgi.sock",
        "bin-path" => "/var/www/py/test.fcgi",
        "check-local" => "disable"
    )
)

这在/etc/init.d/lighttpd start 上吐出一个错误。第一行看起来不对,所以我在粗箭头之后添加了一组括号:

fastcgi.server = ("/test" => (
...
))

这并没有吐出错误,但是当我尝试连接时,我在 Chrome 中得到了ERR_CONNECTION_REFUSED。然后我尝试删除"/test" =>,也遇到了同样的问题。我也试过this question,中显示的配置,同样的问题发生了。

/var/www/py/test.fgci:

#!/usr/bin/python
from flup.server.fcgi import WSGIServer
from test import app

WSGIServer(app, bindAddress="/tmp/test-fcgi.sock").run()

/var/www/py/test.py:

from flask import Flask
app = Flask(__name__)

@app.route("/test")
def hello():
    return "<h1 style='color:red'>&#9773; hello, comrade &#9773;</h1>"

当我用/etc/init.d/lighttpd start 启动当前的lighttpd.conf 时,它会失败。

【问题讨论】:

【参考方案1】:

Python 部分超出了我的技能范围,因此我无法真正帮助您,但是当将 php 作为 fcgi 服务器运行时,我会使用如下所示的 lighttpd.conf。

fastcgi.server += ( ".php" =>
    ((
        "host" => "127.0.0.1",
        "port" => "9000",
        "broken-scriptfilename" => "enable"
    ))
)

所以我假设你需要以下类似的东西来使用 python。

fastcgi.server += ( "/test" =>
    ((
        "socket" => "/tmp/test-fcgi.sock",
        "bin-path" => "/var/www/py/test.fcgi",
        "check-local" => "disable"
    ))
)

【讨论】:

假设正在运行一个单独的进程来处理端口 9000 上的这些请求。这与 nginx 中的proxy-pass 方法相同。 php-fpm 已经运行了该服务,但是对于 python,您需要安装一个专用服务器,例如 gunicornuwsgi 并将其配置为在该指定端口上运行您的应用程序。

以上是关于FastCGI、Lighttpd 和 Flask的主要内容,如果未能解决你的问题,请参考以下文章

lighttpd与fastcgi+cgilua

fastcgi 分布式

Lighttpd 403 禁止 PHP 文件

lighttpd + perl + mojolicious =?

使用lighttpd搭建轻量级web服务器详解

lighttpd 轻量级WEB服务器