Nginx   发布时间:2022-05-11  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了php – nginx 502坏网关 – fastcgi不听? (Debian 5)大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

我有使用Nginx的经验,但它总是为我预先安装(通过VPs.net预先配置的图像).我真的很喜欢它为我做的,现在我正在尝试使用apt-get在我自己的服务器上安装它.这是一个相当新鲜的Debian 5安装.我没有安装额外的软件包,但它们都是.deb的,没有手动编译或任何疯狂的事情.

Apache已经安装但我禁用了它.我做了apt-get install Nginx并且运行正常.根据我的需要稍微改变了配置,尽管即使使用默认配置也会出现同样的问题.

我花了一段时间才发现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错误的网关错误.

经过一段时间的虑,我尝试telnet到127.0.0.1 9000(fastcgi正在侦听端口9000,并且Nginx配置为与该端口通信),但它只是立即关闭连接.

这让我觉得问题在于fastcgi,但我不确定我能做些什么来测试它.它可能只是关闭连接,因为它没有得到任何数据进行处理,但它立即关闭,所以这让我思.

那么……有什么建议吗?我无法弄明白.凌晨1点就没有用,但我在这里疯了!

最佳答案
在我的服务器上我也使用Nginx fcgi.

我的解决方案并非万无一失,但至少可行.我有这个脚本在/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

大佬总结

以上是大佬教程为你收集整理的php – nginx 502坏网关 – fastcgi不听? (Debian 5)全部内容,希望文章能够帮你解决php – nginx 502坏网关 – fastcgi不听? (Debian 5)所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。
标签: