【问题标题】:CGI from Apache, broken pipe来自 Apache 的 CGI,损坏的管道
【发布时间】:2023-11-26 01:28:01
【问题描述】:

当客户端(我的意思是浏览器或 TCP 网关)在中间断开连接时,运行 CGI 脚本的 Apache(或 Nginx)会发生什么?

  1. Apache/Nginx 是否记录错误? (如果有,是哪一个?在哪里?)

  2. CGI 脚本是否发送了 SIGPIPE?

【问题讨论】:

    标签: apache nginx signals cgi epipe


    【解决方案1】:

    Apache CGI 脚本中断时没有 SIGPIPE。

    用以下代码测试:

    #!/usr/bin/perl
    
    use strict;
    use warnings;
    
    $| = 1;
    
    #$SIG{PIPE} = "IGNORE";
    $SIG{PIPE} = sub {
      open my $f, '>', 'log.txt';
      print $f "PIPE: $ENV{SERVER_NAME}\n";
      close $f;
    };
    
    print "Content-Type: text/plain\n\n";
    
    sleep 10;
    
    print "OK";
    

    【讨论】: