Sockets 套接字和文件描述符魔术
我已经编写了一个在Web服务器中使用的FCGI实现。我想用lighttpd替换一个简单的设置 我发现了一些奇怪的事情。Sockets 套接字和文件描述符魔术,sockets,fastcgi,lighttpd,flup,Sockets,Fastcgi,Lighttpd,Flup,我已经编写了一个在Web服务器中使用的FCGI实现。我想用lighttpd替换一个简单的设置 我发现了一些奇怪的事情。 当我尝试生成一个Python Flup服务器并连接到它时,它只有在使用TCP套接字时才起作用 (). 但是,在我使用Flup和lighttpd的现有设置中,它也适用于Unix域套接字 (在FCGI中,web服务器将侦听套接字作为stdin提供给FCGI服务器)。 所以我看了一下Flups代码(发现它只是本地和本地的)。似乎只处理TCP,所以UDS不应该工作。 但在lighttp
当我尝试生成一个Python Flup服务器并连接到它时,它只有在使用TCP套接字时才起作用 (). 但是,在我使用Flup和lighttpd的现有设置中,它也适用于Unix域套接字 (在FCGI中,web服务器将侦听套接字作为stdin提供给FCGI服务器)。 所以我看了一下Flups代码(发现它只是本地和本地的)。似乎只处理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",pid=349092,fd=0))
但是怎么做呢?我错过了什么
我认为相关部分是和
是因为这个吗
我感到困惑lighttpd打开并绑定到配置的侦听套接字
“socket”=>“/tmp/fastcgi2.python.sock”
,无论是TCP还是UDS,然后在配置“bin path”=>“/var/www/heiz/flup.fcgi”
我的理解是,Flup认识到在
STDIN\u FILENO
(又称FCGI\u LISTENSOCK\u FILENO
)上有一个监听套接字,并简单地使用它。你是对的。然而,Flup只是尝试使用STDIN\u FILENO
作为AF\u INET
。这对UDS来说是失败的。然而,不管怎样,只要它来自lighttpd,Flup最终就可以使用UDS。哦,没关系——如果UDS是从FD作为AF_INET打开的(至少对python来说),这显然并不重要