Nginx fcgi 连接被拒绝套接字文件 sympa

Nginx fcgi 连接被拒绝套接字文件 sympa

两天来我一直在尝试安装 Sympa 邮件列表(用 Perl 编写),但遇到了一个我无法解决的问题。我安装了包含 wwsympa 的 sympa debian 软件包,并配置了 System V 脚本来启动 wwsympa。我在 nginx 中收到的错误是:

[error] 4807#4807: *1 connect() to unix:/var/run/sympa/wwsympa.socket failed (111: Connection refused) while connecting to upstream, client: 127.0.0.1, server: 127.0.0.1, request: "GET /sympa HTTP/1.1", upstream: "fastcgi://unix:/var/run/sympa/wwsympa.socket:", host: "127.0.0.1"

这是套接字的 System V 初始化文件:

#!/bin/sh
#
# wwsympa                       Sympa Web Interface
#
# Written by IKEDA Soji  2011-10-20
#
# chkconfig: 345 95 05
# description: sympa is a powerful mailing lists management system.

if [ -f /etc/rc.d/init.d/functions ]; then
    # Source function library.
    . /etc/rc.d/init.d/functions

    ## Set a flag
    use_functions=1
fi

# WWSympa parameters
# WWSympa binaries directory
sympafcgidir="/usr/lib/cgi-bin/sympa"

# Sympa config files directory
sympaconf="/etc/sympa/sympa.conf"

FCGI_CHILDREN=5
FCGI_USER=sympa
FCGI_GROUP=sympa
FCGI_PID_DIR=/var/run/sympa
FCGI_OPTS='-s /var/run/sympa/wwsympa.socket -M 0777 -U sympa'
if [ -e /etc/sysconfig/sympa ]; then
    . /etc/sysconfig/sympa
fi

# Current state of WWSympa
wwsympa_status() {
    if [ ${use_functions} ]; then
        status wwsympa
    else
        if [ -f ${FCGI_PID_DIR}/wwsympa.pid ]; then
            pid=`cat ${FCGI_PID_DIR}/wwsympa.pid | perl -pe0777 'chomp $_; s/\s+/|/g'`
            if [ "$pid" != "" ]; then
                running=`ps -A | egrep "$pid"`
                if [ "$running" != "" ]; then
                    echo "$1 (pid(s) $pid) is active..."
                    return 0
                else
                    echo "$1 died, pid file remains."
                    return 1
                fi
            fi
        fi
        echo "$1 is stopped."
        return 3
    fi
}

# Start WWSympa
wwsympa_start() {
    wwsympa_status > /dev/null
    rc=$?
    case "$rc" in
    3)
        echo -n "Starting wwsympa: "
        ;;
    1)
        echo -n "Starting wwsympa, overwriting old pid file."
        ;;
    0)
        echo "WWSympa seems active. No action will be taken."
        echo "Try \"wwsympa status\" or \"wwsympa restart"\".
        return
    esac

    /usr/bin/spawn-fcgi -F ${FCGI_CHILDREN} -P ${FCGI_PID_DIR}/wwsympa.pid \
    -u ${FCGI_USER} -g ${FCGI_GROUP} ${FCGI_OPTS} -- \
    ${sympafcgidir}/wwsympa.fcgi
}

# Stop WWSympa
wwsympa_stop() {
    if [ -f ${FCGI_PID_DIR}/wwsympa.pid ]; then
        runcount=0
        pids=`cat ${FCGI_PID_DIR}/wwsympa.pid`
        if [ "$pids" != "" ]; then
            for pid in "$pids"; do
                killcount=0
                running=`ps -A | grep "$pid ..* wwsympa"`
                while [ "$running" != "" ]; do
                    if [ $killcount -gt 10 ]; then
                        if [ ${use_functions} ]; then
                            failure
                        else
                            echo 'failure'
                        fi
                        return 3
                    fi

                    kill -TERM $pid >/dev/null 2>&1
                    running=`ps -A | grep "$pid ..* $1\\.pl"`
                    if [ "$running" = "" ]; then
                        runcount=`expr $runcount + 1`
                        break
                    fi
                    sleep 2
                    running=`ps -A | grep "$pid ..* $1\\.pl"`
                    if [ "$running" = "" ]; then
                        runcount=`expr $runcount + 1`
                        break
                    fi
                    killcount=`expr $killcount + 1`
                done
            done
        fi
        if [ $runcount -gt 0 ]; then
            if [ ${use_functions} ]; then
                success
            else
                echo 'success'
            fi
        else
            echo 'died'
        fi
        echo
    else
        echo "Module $1.pl not running"
    fi
    return 0
}

# Check config files
[ -d $sympafcgidir ] || exit 0
[ -f $sympaconf ] || exit 0

# See how we were called.
case "$1" in
start)
    if [ ! -f /var/lock/subsys/wwsympa ]; then
        echo "Starting WWSympa: "
        wwsympa_start
        touch /var/lock/subsys/wwsympa
        echo
    else
        echo "WWSympa seems active. No action will be taken."
        echo "Try \"wwsympa status\" or \"wwsympa restart"\".
    fi
    ;;
stop)
    echo "Stopping WWSympa: "
    wwsympa_stop
    if [ -f /var/lock/subsys/wwsympa ]; then
        rm -f /var/lock/subsys/wwsympa
    fi
    ;;
status)
    echo "Status of WWSympa: "
    wwsympa_status
    ;;
restart)
    echo "Restarting WWSympa: "
    $0 stop && $0 start
    echo
    ;;
*)
    echo "Usage: $0 {start|stop|status|restart}"
    exit 1
    ;;
esac

exit 0

/var/run/sympa/ 目录中的内容

total 24
-rw-r--r-- 1 sympa sympa  5 Feb  7 02:48 archived.pid
-rw-r--r-- 1 sympa sympa  5 Feb  7 02:48 bounced.pid
-rw-r--r-- 1 sympa sympa  5 Feb  7 02:48 bulk.pid
-rw-r--r-- 1 sympa sympa  5 Feb  7 02:48 sympa.pid
-rw-r--r-- 1 sympa sympa  5 Feb  7 02:48 task_manager.pid
-rw-r--r-- 1 root  root   0 Feb  7 05:06 text.tt
-rw-r--r-- 1 sympa sympa 24 Feb  7 02:48 wwsympa.pid
srwxrwxrwx 1 sympa sympa  0 Feb  7 02:48 wwsympa.socket

我的 nginx 配置:

server {
    listen 80 default_server;

    root /var/www/html;

    server_name 127.0.0.1;

    location / {
        include sympa_fcgi.conf;
        # First attempt to serve request as file, then
        # as directory, then fall back to displaying a 404.
        try_files $uri $uri/ =404;
    }

    location /sympa {
    include       /etc/nginx/fastcgi_params;
        fastcgi_pass  unix:/var/run/sympa/wwsympa.socket;
    include       /etc/nginx/fastcgi_params;

        # If you changed wwsympa_url in sympa.conf, change this regex too!
        fastcgi_split_path_info ^(/sympa)(.*)$;
        fastcgi_param SCRIPT_FILENAME /usr/lib/cgi-bin/sympa/wwsympa.fcgi;
        fastcgi_param PATH_INFO $fastcgi_path_info;
    }

    location /static-sympa {
        alias /var/lib/sympa/static_content;
    }
}

相关内容