我尝试了一些使用抽象名称的 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 论坛主题,因为它引用了对补丁所做的各种更改。