我有nginx的经验,但它总是为我预先安装(通过VPS.net预先configuration的图像)。 我真的很喜欢它为我做了什么,现在我试图用apt-get将它安装在我自己的服务器上。 这是一个相当新的Debian 5安装。 我已经安装了一些额外的软件包,但他们都是.deb,没有手动编译或任何疯狂的事情。
Apache已经安装,但我禁用它。 我做了apt-get安装nginx并且工作正常。 尽pipe即将使用默认configuration,即使我要描述的问题也会发生,但是稍微改变了一下configuration。
我花了一段时间才发现nginx的默认debian软件包没有自动产生fastcgi进程。 这是相当蹩脚的,但我想出了如何使用这个脚本,我发现在许多不同的网站发布:
#!/bin/bash ## ABSOLUTE path to the PHP binary PHPFCGI="/usr/bin/php5-cgi" ## tcp-port to bind on FCGIPORT="9000" ## IP to bind on FCGIADDR="127.0.0.1" ## number of PHP children to spawn PHP_FCGI_CHILDREN=10 ## number of request before php-process will be restarted PHP_FCGI_MAX_REQUESTS=1000 # allowed environment variables sperated by spaces ALLOWED_ENV="ORACLE_HOME PATH USER" ## if this script is run as root switch to the following user USERID=www-data ################## no config below this line if test x$PHP_FCGI_CHILDREN = x; then PHP_FCGI_CHILDREN=5 fi ALLOWED_ENV="$ALLOWED_ENV PHP_FCGI_CHILDREN" ALLOWED_ENV="$ALLOWED_ENV PHP_FCGI_MAX_REQUESTS" ALLOWED_ENV="$ALLOWED_ENV FCGI_WEB_SERVER_ADDRS" if test x$UID = x0; then EX="/bin/su -m -c \"$PHPFCGI -q -b $FCGIADDR:$FCGIPORT\" $USERID" else EX="$PHPFCGI -b $FCGIADDR:$FCGIPORT" fi echo $EX # copy the allowed environment variables E= for i in $ALLOWED_ENV; do E="$E $i=${!i}" done # clean environment and set up a new one nohup env - $E sh -c "$EX" &> /dev/null &
当我做一个“ps -A | grep php5-cgi”时,我看到10个进程正在运行,应该准备好收听。
但是当我尝试通过nginx查看网页时,我只是得到了502错误的网关错误。
经过一段时间后,我尝试telneting到127.0.0.1 9000(fastcgi正在监听端口9000,而nginx被configuration为与该端口交谈),但它只是立即closures连接。
这让我觉得问题是与fastcgi,但我不知道我能做些什么来testing它。 它可能只是closures连接,因为它没有得到任何数据处理,但它会立即closures,这使我觉得不然。
那么…有什么build议? 我无法弄清楚。 这不是上午1点,但我要疯了!
在我的服务器上,我也使用nginx + fcgi。
我的解决scheme不是万无一失的,但至less可以工作。 我有这个脚本,它使用/etc/init.d/下的spawn-fcgi和php5-cgi
#!/bin/bash PHP_SCRIPT='/usr/bin/spawn-fcgi -a 127.0.0.1 -p 9000 -u www-data -f /usr/bin/php5-cgi' RETVAL=0 case "$1" in start) $PHP_SCRIPT RETVAL=$? ;; stop) killall -9 php5-cgi RETVAL=$? ;; restart) killall -9 php5-cgi $PHP_SCRIPT RETVAL=$? ;; *) echo "Usage: php-fastcgi {start|stop|restart}" exit 1 ;; esac exit $RETVAL
和相关的nginx conf是这样的:
server { location ~ .php$ { fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; include /etc/nginx/fastcgi.conf; fastcgi_param SCRIPT_FILENAME /var/www/hyperblasted/$fastcgi_script_name; } ... }
而fastcgi.conf包含以下内容
fastcgi_param GATEWAY_INTERFACE CGI/1.1; fastcgi_param SERVER_SOFTWARE nginx; fastcgi_param QUERY_STRING $query_string; fastcgi_param REQUEST_METHOD $request_method; fastcgi_param CONTENT_TYPE $content_type; fastcgi_param CONTENT_LENGTH $content_length; fastcgi_param REQUEST_URI $request_uri; fastcgi_param DOCUMENT_URI $document_uri; fastcgi_param DOCUMENT_ROOT $document_root; fastcgi_param SERVER_PROTOCOL $server_protocol; fastcgi_param REMOTE_ADDR $remote_addr; fastcgi_param REMOTE_PORT $remote_port; fastcgi_param SERVER_ADDR $server_addr; fastcgi_param SERVER_PORT $server_port; fastcgi_param SERVER_NAME $server_name;
希望这可以帮助 :)
PS:有了这个设置,我有一个问题,CGI守护进程会不时死亡。 我通过每5分钟执行一次cronjob来解决这个问题:
if ps aux | grep 'php5-cgi' | grep -v grep > /dev/null ; then echo "PHP-cgi is runnning !" else echo "PHP-cgi is down. Starting over..." /etc/init.d/php-fcgi start fi
我不是这方面的专家。 事实上,我看到你的post,因为我有同样的问题。 HOwever,我似乎已经能够得到它的工作,我所做的是将USERID(www-data)从/etc/init.d/php-fastcgi文件更改为我当前正在运行的用户。 对不起,如果这没有帮助,或者我无法进一步解释,但我想我会张贴它,以防它是相关的。
尝试这个:
vim /etc/php5/fpm/pool.d/www.conf
然后改变
; listen.owner = www-data ; listen.group = www-data
至
listen.owner = www-data listen.group = www-data