![如何在 nginx 中将 unix 域套接字的抽象名称与 fastcgi 一起使用?](https://linux22.com/image/801045/%E5%A6%82%E4%BD%95%E5%9C%A8%20nginx%20%E4%B8%AD%E5%B0%86%20unix%20%E5%9F%9F%E5%A5%97%E6%8E%A5%E5%AD%97%E7%9A%84%E6%8A%BD%E8%B1%A1%E5%90%8D%E7%A7%B0%E4%B8%8E%20fastcgi%20%E4%B8%80%E8%B5%B7%E4%BD%BF%E7%94%A8%EF%BC%9F.png)
我尝试了一些使用抽象名称的 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 论坛主题,因为它引用了对补丁所做的各种更改。