我的操作系统: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