如何解决套接字和文件描述符魔术
我编写了一个用于 Web 服务器的 FCGI 实现。我想用 lighttpd 替换一个简单的设置。
我发现了一些奇怪的东西。
当我尝试生成 Python-Flup 服务器然后连接到它时,它仅在我使用 TCP 套接字时才有效
(My Code)。
但是,在我现有的 Flup 和 lighttpd 设置中,它也适用于 Unix 域套接字。
(在 FCGI 中,Web 服务器将侦听套接字作为标准输入提供给 FCGI 服务器)。 所以我看了一下 Flups 代码(发现它只有本地和 here)。好像只处理了TCP,所以UDS应该不行。 但是有了 lighttpd 就可以了!
fastcgi.server = (
"/heiz" =>
(
"python-fcgi" =>
(
"socket" => "/tmp/fastcgi2.python.sock","bin-path" => "/var/www/heiz/flup.fcgi","check-local" => "disable","max-procs" => 1
)
)
)
运行如下:
sudo ss -lxp | grep /tmp/fastcgi2.python.sock
u_str LISTEN 0 1024 /tmp/fastcgi2.python.sock-0 4378053 * 0 users:(("flup.fcgi",pid=349092,fd=3),("flup.fcgi",fd=0))
但是怎么样?我错过了什么?
是因为这个magic吗?
我很困惑
解决方法
lighttpd 打开并绑定到已配置的监听套接字 "socket" => "/tmp/fastcgi2.python.sock"
,无论是 TCP 还是 UDS,然后在您配置 STDIN_FILENO
时使该监听套接字成为您的 fastcgi 后端的 "bin-path" => "/var/www/heiz/flup.fcgi"
我的理解是 Flup 识别出 STDIN_FILENO
(也称为 FCGI_LISTENSOCK_FILENO
)上有一个侦听套接字并简单地使用它。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。