FastCGI、Lighttpd 和 Flask

FastCGI, Lighttpd, and Flask

提问人:user1610406 提问时间:3/29/2016 最后编辑:Communityuser1610406 更新时间:8/29/2023 访问量:3004

问:

我正在我的 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"
    )
)

这在 .第一行看起来不对,所以我在胖箭头后面添加了一组 parens:/etc/init.d/lighttpd start

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

这并没有吐出错误,但是当我尝试连接时,我进入了Chrome。然后我尝试删除,这有同样的问题。我也尝试了这个问题中显示的配置也出现了同样的问题。ERR_CONNECTION_REFUSED"/test" =>

在:/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>"

当我用 启动它时,电流失败。lighttpd.conf/etc/init.d/lighttpd start

Python 烧瓶 lighttpd

评论


答:

0赞 Kinetic 4/15/2016 #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"
    ))
)

评论

0赞 Prahlad Yeri 6/26/2019
这是假设正在运行一个单独的进程,该进程在端口 9000 上处理这些请求。这与 nginx 中的方法相同。php-fpm 已经运行了该服务,但对于 python,您需要安装一个专用服务器,例如 OR,并将其配置为在该指定端口上运行您的应用程序。proxy-passgunicornuwsgi
0赞 xPetersue 8/29/2023 #2

考虑到您ERR_CONNECTION_REFUSED收到了错误消息,问题似乎可能与不正确的身份验证或权限受限有关,而不是语法问题。

可能性:

  1. 检查lighttpd、fastcgi的运行端口状态。(IPv6 检查)
    netstat --listen

或者 lighttpd 日志。

  1. 你有没有意识到你写了'/test'=>'test',只要确保格式如下。
fastcgi.server = ("/hello.fcgi" =>
    ((
        "socket" => "/tmp/hello-fcgi.sock",
        "bin-path" => "/var/www/demoapp/hello.fcgi",
        "check-local" => "disable",
        "max-procs" => 1 
    ))
)
  1. 由于应用程序是从您的应用程序导入的,因此您需要将此行 'if name == 'main' 添加到 /var/www/py/test.fcgi 中。
#!/usr/bin/python
from flup.server.fcgi import WSGIServer
from yourapplication import app

if __name__ == '__main__':
    WSGIServer(app, bindAddress="/tmp/test-fcgi.sock").run()

这是参考。

请事先确保应用程序文件中可能存在的任何 app.run() 调用都在 if name == 'main': 块内或移动到单独的文件中。只要确保它没有被调用,因为这将始终启动一个本地WSGI服务器,如果我们将该应用程序部署到FastCGI,我们不希望这样做。

https://flask.palletsprojects.com/en/2.0.x/deploying/fastcgi/

一旦你检查了所有的可能性,让我们看看会发生什么。