如何在 nginx 中将 unix 域套接字的抽象名称与 fastcgi 一起使用?

如何在 nginx 中将 unix 域套接字的抽象名称与 fastcgi 一起使用?

我尝试了一些使用抽象名称的 unix 域套接字的 perl 示例:创建了一个以空字符开头的套接字:

my $socket_path = "\0wibble";

使用 netstat -nlp 我可以看到套接字:

unix  2      [ ACC ]     STREAM     LISTENING     309510   3448/perl            @wibble

在示例中,所有功能均正常,但是...
我想在 nginx 中使用带有抽象名称的 unix 域套接字的 fastCGI:

因此在 nginx.conf 中:

Using       fastcgi_pass  "/tmp/wibble"; #is Ok
But using       fastcgi_pass  "unix:Any_name"; #is not Ok!!

我试过了\0wibble \zwibble \x{0}wibble但是没用!

在 fastcgi-wrapper.pl 我尝试过:

Using        $socket = FCGI::OpenSocket( "/tmp/wibble", 10 ); #is Ok
But using       fastcgi_pass  "unix:Any_name"; #is not Ok!!

我试过了\0wibble \zwibble \x{0}wibble但是没用!

顺便提一句:我想在 nginx 上使用 chroot 并在 perl 中使用 chroot,所以我不能使用文件系统套接字,因为这将成为一条越狱之路和一个安全漏洞……

答案1

nginx 不支持抽象套接字(截至目前)。但是存在非官方补丁提供此支持。应用后,您可以将抽象套接字称为@wibble。如果您使用此补丁,请务必阅读有关它的整个 nginx 论坛主题,因为它引用了对补丁所做的各种更改。

相关内容