使用 supervisord 时,nginx 不从 fcgiwrap 返回错误

nginx not returning errors from fcgiwrap when using supervisord

我目前正在 nginx 和 fcgiwrap 中测试 perl cgi 应用程序。它部分工作。但是我在回复错误时遇到问题。

所有请求return 200。如果cgi错误,它只是return的空白内容。

我 运行 来自 supervisord 的 nginx 和 fcgiwrap。

这是我的 supervisord.conf 文件...

[supervisord]
logfile=/tmp/supervisord.log
nodaemon=true

[fcgi-program:fcgiwrap]
command = /usr/sbin/fcgiwrap
user = www-data
socket = unix:///var/run/supervisor/%(program_name)s.sock
socket_owner = www-data:www-data
socket_mode = 0770
autorestart=true
autostart=true
startsecs=1
startretries=3
stopsignal=QUIT
stopwaitsecs=10
environment=PATH='/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin'
redirect_stderr=false
stdout_logfile=/var/log/fcgiwrap_out.log
stderr_logfile=/var/log/fcgiwrap_err.log

[program:nginx]
command=/usr/sbin/nginx -g 'daemon off;'

我得到 /var/log/fcgiwrap_err.log 中出现的错误。然而,错误消息,更重要的是状态,没有被 returned 到 nginx。

这是我的 nginx 配置...

server {
    listen 80 default_server;
    listen [::]:80 default_server;

    root /var/www/web;

    index index.html index.cgi;

    server_name _;

    location / {
            try_files $uri $uri/ =404;
    }

    location ~ \.cgi$ {
        gzip off;
        include /etc/nginx/fastcgi_params;
        fastcgi_pass unix:/var/run/supervisor/fcgiwrap.sock;
        fastcgi_index index.cgi;
        fastcgi_param SCRIPT_FILENAME /var/www/web$fastcgi_script_name;
    }

    # deny access to .htaccess files
    location ~ /\.ht {
           deny all;
    }
}

我不确定问题是否是由于 fcgiwrap、nginx 或 supervisord 配置错误造成的。

您告诉 supervisord 监视套接字 (/var/run/supervisor/fcgiwrap.sock) 但没有告诉 fcgiwrap 使用该套接字。 所以 PHP 通过这个空套接字的连接永远不会到达 fcgiwrap 进程,因此你没有来自 fcgiwrap 的错误消息。

您需要更改 fcgiwrap 命令 以指定套接字,使用 -s 参数