nginx(最新版)无法与 spawn-fcgi 协同工作

nginx(最新版)无法与 spawn-fcgi 协同工作

我的操作系统:Debian 7 (最新) x64 我的域名:www.DeadalusHD.com 我的 nginx-vhost:

server { listen 80; ## listen for ipv4; this line is default and implied listen [::]:80 default_server ipv6only=on; ## listen for ipv6

     root /online/www/dead-page/;
    index  index.html index.htm index.php;

    # Make site accessible from http://localhost/
    server_name DeadalusHD.com www.DeadalusHD.com;
    ssl_certificate /etc/nginx/ssl/nginx.crt;
    ssl_certificate_key /etc/nginx/ssl/nginx.key;

    location / {
            # First attempt to serve request as file, then
            # as directory, then fall back to displaying a 404.
            try_files $uri $uri/  /index.html /index.htm /index.php;
            # Uncomment to enable naxsi on this location
            # include /etc/nginx/naxsi.rules
    }

    location = /favicon.ico {
        alias    /online/www/dead-resource/assets/images/dfavicon.ico;
    }   

    location /doc/ {
            alias /usr/share/doc/;
            autoindex on;
            allow 127.0.0.1;
            allow ::1;
            deny all;
    }   

#error_page 404 /online/www/public-resources/assets/server-status/status/404.html;

    # redirect server error pages to the static page /50x.html
    #
    error_page 500 502 503 504 /50x.html;
    location = /online/www/public-resources/assets/server-status/status/50x.html {
            root /;
    }


  location ~ \.pl|cgi$ {
      try_files $uri =404;
      gzip off;
      fastcgi_pass  127.0.0.1:8999;
      fastcgi_index index.pl;
      fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
      include fastcgi_params;
      } 

        location ~ \.php$ {
                try_files $uri =404;
                fastcgi_split_path_info ^(.+\.php)(/.+)$;
                # NOTE: You should have "cgi.fix_pathinfo = 0;" in php.ini

                # With php5-cgi alone:
                #fastcgi_pass 127.0.0.1:9000;
                # With php5-fpm:
                fastcgi_pass 127.0.0.1:9000;
                fastcgi_index index.php;
                include fastcgi_params;
                }


    # deny access to .htaccess files, if Apache's document root
    # concurs with nginx's one
    #
    location ~ /\.ht {
            deny all;
} }

我的 spawn-fcgi 启动脚本:

#!/bin/sh
### BEGIN INIT INFO
# Provides:          fcgiwrap
# Required-Start:    $remote_fs
# Required-Stop:     $remote_fs
# Should-Start:
# Should-Stop:
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Short-Description: FastCGI wrapper
# Description:       Simple server for running CGI applications over FastCGI
### END INIT INFO

PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin

SPAWN_FCGI="/usr/bin/spawn-fcgi"
DAEMON="/usr/sbin/fcgiwrap"
NAME="fcgiwrap"
DESC="FastCGI wrapper"

PIDFILE="/var/run/$NAME.pids"

test -x $SPAWN_FCGI || exit 0
test -x $DAEMON || exit 0

# FCGI_APP Variables
FCGI_CHILDREN="1"
FCGI_SOCKET="/var/run/$NAME.socket"
FCGI_USER="stpuser"
FCGI_GROUP="www-data"

. /lib/lsb/init-functions

# Default options, these can be overriden by the information
# at /etc/default/$NAME
#DAEMON_OPTS=""          # Additional options given to the server

DIETIME=10              # Time to wait for the server to die, in seconds
                        # If this value is set too low you might not
                        # let some servers to die gracefully and
                        # 'restart' will not work

#STARTTIME=2            # Time to wait for the server to start, in seconds
                        # If this value is set each time the server is
                        # started (on start or restart) the script will
                        # stall to try to determine if it is running
                        # If it is not set and the server takes time
                        # to setup a pid file the log message might
                        # be a false positive (says it did not start
                        # when it actually did)


# Include defaults if available
if [ -f /etc/default/$NAME ] ; then
    . /etc/default/$NAME
fi

DAEMONUSER="$FCGI_USER"

# Check that the user exists (if we set a user)
# Does the user exist?
if [ -n "$DAEMONUSER" ] ; then
    if getent passwd | grep -q "^$DAEMONUSER:"; then
        # Obtain the uid and gid
        DAEMONUID=`getent passwd |grep "^$DAEMONUSER:" | awk -F : '{print $3}'`
        DAEMONGID=`getent passwd |grep "^$DAEMONUSER:" | awk -F : '{print $4}'`
    else
        log_failure_msg "The user $DAEMONUSER, required to run $NAME does not exist."
        exit 1
    fi
fi

set -e

running_pid() {
# Check if a given process pid's cmdline matches a given name
    pid=$1
    name=$2
    [ -z "$pid" ] && return 1
    [ ! -d /proc/$pid ] &&  return 1
    cmd=`cat /proc/$pid/cmdline | tr "\000" "\n"|head -n 1 |cut -d : -f 1`
    # Is this the expected server
    [ "$cmd" != "$name" ] && return 1
    return 0
}

running() {
# Check if the process is running looking at /proc
# (works for all users)
    # No pidfile, probably no daemon present
    [ ! -f "$PIDFILE" ] && return 1
    PIDS="$(cat "$PIDFILE")"
    for pid in $PIDS; do
      if [ -n "$pid" ]; then
        running_pid $pid $DAEMON && return 0 || true
      fi
    done
    return 1
}

start_server() {
    ARGS="-P $PIDFILE"
    # Adjust NUMBER of processes
    if [ -n "$FCGI_CHILDREN" ]; then
       ARGS="$ARGS -F '$FCGI_CHILDREN'"
    fi
    # Adjust SOCKET or PORT and ADDR
    if [ -n "$FCGI_SOCKET" ]; then
      ARGS="$ARGS -s '$FCGI_SOCKET'"
    elif [ -n "$FCGI_PORT" ]; then
      if [ -n "$FCGI_ADDR" ]; then
        ARGS="$ARGS -a '$FCGI_ADDR'"
      fi
      ARGS="$ARGS -p '$FCGI_PORT'"
    fi
    # Adjust user
    if [ -n "$FCGI_USER" ]; then
      ARGS="$ARGS -u '$FCGI_USER'"
      if [ -n "$FCGI_SOCKET" ]; then
        ARGS="$ARGS -U '$FCGI_USER'"
      fi
    fi
    # Adjust group
    if [ -n "$FCGI_GROUP" ]; then
      ARGS="$ARGS -g '$FCGI_GROUP'"
      if [ -n "$FCGI_SOCKET" ]; then
        ARGS="$ARGS -G '$FCGI_GROUP'"
      fi
    fi
    eval `echo $SPAWN_FCGI $ARGS $DAEMON` > /dev/null
    errcode="$?"
    return $errcode
}

stop_server() {
    # Force the process to die killing it manually
    [ ! -e "$PIDFILE" ] && return
    PIDS="$(cat "$PIDFILE")"
    for pid in $PIDS; do
      if running_pid '$pid' '$DAEMON'; then
        kill -15 $pid
        # Is it really dead?
        sleep "$DIETIME"s
        if running_pid $pid $DAEMON; then
          kill -9 $pid
          sleep "$DIETIME"s
          if running_pid $pid $DAEMON; then
              echo "Cannot kill $NAME (pid=$pid)!"
              exit 1
          fi
        fi
      fi
    done
    rm -f "$PIDFILE"
    if [ -n "$FCGI_SOCKET" ]; then
      rm -f "$FCGI_SOCKET"
    fi
}

case "$1" in
  start)
        log_daemon_msg "Starting $DESC" "$NAME"
        # Check if it's running first
        if running ;  then
            log_progress_msg "apparently already running"
            log_end_msg 0
            exit 0
        fi
        if start_server ; then
            # NOTE: Some servers might die some time after they start,
            # this code will detect this issue if STARTTIME is set
            # to a reasonable value
            [ -n "$STARTTIME" ] && sleep $STARTTIME # Wait some time 
            if  running ;  then
                # It's ok, the server started and is running
                log_end_msg 0
            else
                # It is not running after we did start
                log_end_msg 1
            fi
        else
            # Either we could not start it
            log_end_msg 1
        fi
        ;;
  stop|force-stop)
        log_daemon_msg "Stopping $DESC" "$NAME"
        if running ; then
            # Only stop the server if we see it running
            errcode=0
            stop_server || errcode=$?
            log_end_msg $errcode
        else
            # If it's not running don't do anything
            log_progress_msg "apparently not running"
            log_end_msg 0
            exit 0
        fi
        ;;
  restart|force-reload)
        log_daemon_msg "Restarting $DESC" "$NAME"
        errcode=0
        stop_server || errcode=$?
        # Wait some sensible amount, some server need this
        [ -n "$DIETIME" ] && sleep $DIETIME
        start_server || errcode=$?
        [ -n "$STARTTIME" ] && sleep $STARTTIME
        running || errcode=$?
        log_end_msg $errcode
        ;;
  status)

        log_daemon_msg "Checking status of $DESC" "$NAME"
        if running ;  then
            log_progress_msg "running"
            log_end_msg 0
        else
            log_progress_msg "apparently not running"
            log_end_msg 1
            exit 1
        fi
        ;;
 # Use this if the daemon cannot reload
  reload)
        log_warning_msg "Reloading $NAME daemon: not implemented, as the daemon"
        log_warning_msg "cannot re-read the config file (use restart)."
        ;;
  *)
        N=/etc/init.d/$NAME
        echo "Usage: $N {start|stop|force-stop|restart|force-reload|status}" >&2
        exit 1
        ;;
esac

exit 0

现在的问题是,每当我尝试加载 php 或 html 文件时,都会出现 502 错误。我在 Gooogle 上搜索并尝试修复此问题,现在已经 12 天了 =/

我不会切换到 php5-fpm 并且不会使用 Apache2 ;)

谢谢你的帮助,

亚历克斯

答案1

我终于让我的 spawn-fcgi 工作了!其他人的脚本:

#! /bin/sh

### BEGIN INIT INFO
# Provides:          spawn-fcgi-php
# Required-Start:    $all
# Required-Stop:     $all
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Short-Description: starts FastCGI for PHP
# Description:       starts FastCGI for PHP using start-stop-daemon
### END INIT INFO

PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
NAME=spawn-fcgi-php
PID=/var/run/spawn-fcgi-php.pid
DAEMON=/usr/bin/spawn-fcgi
DAEMON_OPTS="-f /usr/bin/php-cgi -a 127.0.0.1 -p 9000 -u stpuser -g www-data -P $PID"

if [ ! -x $DAEMON ]; then
    exit 0
fi

set -e

case "$1" in
  start)
        echo "Starting $NAME: "
        start-stop-daemon --start --pidfile $PID --exec $DAEMON -- $DAEMON_OPTS
        echo "Server started successfully"
        ;;
  stop)
        echo "Stopping $NAME: "
        start-stop-daemon --stop  --pidfile $PID --retry 5
        rm -f $PID
        echo "Server stopped successfully"
        ;;
  restart)
        echo "Stopping $NAME: "
        start-stop-daemon --stop  --pidfile $PID --retry 5
        rm -f $PID
        echo "done..."
        sleep 1
        echo "Starting $NAME: "
        start-stop-daemon --start --pidfile $PID --exec $DAEMON -- $DAEMON_OPTS
        echo "Restarzed!"
        ;;
  *)
        echo "Usage: /etc/init.d/$NAME {start|stop|restart}" >&2
        exit 1
        ;;
esac

exit 0

相关内容