【问题标题】:FastCGI with LIGHTTPD in PythonPython 中带有 LIGHTTPD 的 FastCGI
【发布时间】:2021-08-15 12:41:38
【问题描述】:

我目前正在尝试将 lighttpd 服务器与启用 fastcgi 并使用 python 语言一起设置。但是我遇到了这个错误,经过几个小时的谷歌搜索,我似乎无法找到解决方案,我不知道是什么导致了这个错误,因为我对此还很陌生。看看吧,我希望你能帮助我!非常感谢,祝您有美好的一天!

重要细节: 操作系统 --> Fedora Python 版本 --> 3.9.4

我遇到的错误:

Traceback (most recent call last):
  File "/etc/lighttpd/conf.d/test.py", line 8, in <module>
    WSGIServer(myapp).run()
  File "/usr/local/lib/python3.9/site-packages/flup/server/fcgi.py", line 111, in run
    sock = self._setupSocket()
  File "/usr/local/lib/python3.9/site-packages/flup/server/fcgi_base.py", line 1025, in _setupSocket
    sock = socket.fromfd(FCGI_LISTENSOCK_FILENO, socket.AF_INET,
  File "/usr/lib64/python3.9/socket.py", line 545, in fromfd
    return socket(family, type, proto, nfd)
  File "/usr/lib64/python3.9/socket.py", line 232, in __init__
    _socket.socket.__init__(self, family, type, proto, fileno)
OSError: [Errno 88] Socket operation on non-socket

我的python文件,目录:/etc/lighttpd/conf.d/test.py:

#!/usr/bin/python3.9
def myapp(environ, start_response):
    start_response('200 OK', [('Content-Type', 'text/plain')])
    return ['Hello World!\n']

if __name__ == '__main__':
    from flup.server.fcgi import WSGIServer
    WSGIServer(myapp).run()

我的 fastcgi 配置文件在目录:/etc/lighttpd/conf.d/fastcgi.conf

fastcgi.server = (
    ".py" =>
    (
        "python-fcgi" =>
        (
         "socket" => "/var/run/lighttpd/socketsfastcgi.python.socket",
         "bin-path" => "test.py",
         "check-local" => "disable",
         "max-procs" => 1,
        )
    ))

在我的 /var/run/lighttpd 中有一个文件 socketsfastcgi.python.socket-0

(我试图更改我的套接字路径以将 -0 合并为“/var/run/lighttpd/socketsfastcgi.python.socket-0”,它创建了一个文件 socketsfastcgi.python.socket-0-0)

【问题讨论】:

    标签: python python-3.x web fastcgi lighttpd


    【解决方案1】:

    在 Fedora 系统上,在我执行 pip install flup 之后,一切正常(我无法重现您的问题),因为我的 Fedora 34 测试系统上没有。

    检查您的环境以确保您没有覆盖 python 包位置并意外指向 python2 包。

    顺便说一句:您应该更喜欢在"bin-path" 中使用完整路径,例如"bin-path" =&gt; "/path/to/test.py"

    仅供参考:根据 max-procs,lighttpd 在 "socket" 上创建带有 -0-1-2-3 等后缀的套接字,因为套接字必须唯一命名。您在"socket" 路径中指定的内容不需要-0 后缀,如您所见。

    【讨论】:

    • 您好,非常感谢您的回复!请问如何检查我的环境以确保我没有覆盖我的python包位置?
    • env | grep PYTHON
    • 您好@gstrauss,我意识到当我发出该命令时,没有输出,这可能是它不起作用的原因吗?你能给我你的帮助吗?
    • 没有输出表明您没有覆盖环境中的路径,这很好,因为除非您知道自己在做什么,否则您不应该这样做。至于你的第二个问题,我必须承认,不,我无法进一步帮助你。尽可能简化事情并尝试让一些简单的事情发挥作用。 redmine.lighttpd.net/projects/lighttpd/wiki/HowToPythonWSGI
    猜你喜欢
    • 1970-01-01
    • 2014-08-23
    • 2016-07-16
    • 2022-11-25
    • 1970-01-01
    • 2013-03-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多