• User Attivo

    [nginx]PHP-fastcgi connection refused

    Ho installato nginx e php su debian e ubuntu solo che quando provo ad aprire un file php mi cmpare una pagina d'errore(tipo 500) e nel log errori compare questo:

    2008/07/21 01:14:45 [error] 8921#0: *19 connect() failed (111: Connection refused) while connecting to upstream, client: ***************, server: _, request: "GET /info.php HTTP/1.1", upstream: "fastcgi://127.0.0.1:8888", host: "**************"

    ho compilato php con il supporto fastcgi poi ho seguito questa guida facendo partire lo script usando questo comando:> /opt/script-cgi -a 127.0.0.1 -p 8888 -u lighttpd -g lighttpd -f /opt/php/bin/php-cgi

    e infine ho aperto la porta 8888 in iptables.
    ho saltato qualche passaggio?
    :ciauz:


  • Moderatore

    beh direi di si, perchè l'utente e il gruppo sono entrambi lighttpd? in questo caso nginx non ha i permessi per interfacciarsi a fastcgi

    dai un'occhiata qui http://blog.codefront.net/2007/06/11/nginx-php-and-a-php-fastcgi-daemon-init-script/


  • User Attivo

    nada ho fatto partire lo script senza niente (./script-cgi) e mi da in uscita questa stringa:

    /bin/su -m -c "/opt/php/bin/php5-cgi -q -b 127.0.0.1:9000" www


  • Moderatore

    allora adesso ti spiego tecnicamente come funziona fastcgi

    in primo luogo devi modificare il file di configurazione di nginx per il dominio dove vuoi usare gli script php

    ad esempio

    
     location ~ \.php$ {
                fastcgi_pass   127.0.0.1:12384;
                fastcgi_index  index.php;
                fastcgi_param  SCRIPT_FILENAME  /home/www/miosito.com/html$fastcgi_script_name;
                include        conf/fastcgi_params;
            }
    

    questa prima parte dice a nginx che deve inviare i file .php al server in ascolto su localhost alla porta 12384

    ovviamente il server è stato precedentemente tramite questo script

    
    #!/bin/sh
    # /opt/etc/init.d/S79php-fcgi
    #
    # NSLU2 spawn-fcgi script for lighttpd
    #
    ## ABSOLUTE path to the spawn-fcgi binary
    SPAWNFCGI="/usr/bin/spawn-fcgi"
    
    ## ABSOLUTE path to the PHP-FCGI binary
    FCGIPROGRAM="/usr/bin/php-cgi"
    
    ## ABSOLUTE path and name of PID-file for spawed process
    FCGIPID="/var/run/php-fcgi.pid"
    
    ## TCP port or socket to bind to
    #FCGISOCKET="/tmp/php-fcgi.sock"
    FCGIPORT="12384"
    FCGIADDRESS="127.0.0.1"
    
    ## number of PHP children to spawn (min 2)
    PHP_FCGI_CHILDREN=2
    
    ## maximum number of requests a single PHP process can serve before it is restarted
    PHP_FCGI_MAX_REQUESTS=200
    
    ## IP addresses from which PHP should access server connections
    FCGI_WEB_SERVER_ADDRS="127.0.0.1"
    
    ## Allowed environment variables, separated by spaces
    ALLOWED_ENV="PATH SHELL USER"
    
    ## user and group to run PHP-FCGI
    USERID=www
    GROUPID=www
    
    ################## no config below this line
    
    if [ -z "$1" ] ; then
      case `echo "$0" | /bin/sed 's:^.*/\(.*\):\1:g'` in
        S??*) rc="start" ;;
        K??*) rc="stop" ;;
        *) rc="usage" ;;
      esac
    else
      rc="$1"
    fi
    
    case "$rc" in
      start)
        echo -n "Starting PHP-FCGI: "
        export PHP_FCGI_MAX_REQUESTS
        export FCGI_WEB_SERVER_ADDRS
        ALLOWED_ENV="$ALLOWED_ENV PHP_FCGI_MAX_REQUESTS FCGI_WEB_SERVER_ADDRS"
        if [ -n "$FCGISOCKET" ]; then
          EX="$SPAWNFCGI -s $FCGISOCKET -f $FCGIPROGRAM -P $FCGIPID -C $PHP_FCGI_CHILDREN -u $USERID"
        elif [ -n "$FCGIPORT" ]; then
          EX="$SPAWNFCGI -a $FCGIADDRESS -p $FCGIPORT -f $FCGIPROGRAM -P $FCGIPID -C $PHP_FCGI_CHILDREN -u $USERID"
        else
          echo "- ERROR - socket or port must be specified!"
          exit 0
        fi
        E=
        for i in $ALLOWED_ENV; do
          eval "x=\$$i"
          E="$E $i=$x"
        done
        env - $E $EX
        echo ok
          ;;
      stop)
        if [ -n "`pidof php-fcgi`" ]; then
          echo -n "Stopping PHP-FCGI: "
          killall php-fcgi 2> /dev/null
          echo ok
        fi
          ;;
      restart)
        "$0" stop
        sleep 3
        "$0" start
          ;;
      *)  
        echo "Usage: $0 (start|stop|restart|usage)"
          ;;
    esac
    
    

    noterai che usa il programma /usr/bin/spawn-fcgi che è specifico per archlinux, sicuramente c'è una cosa simile per la tua distribuzione e credo sia /opt/script-cgi

    a mio avviso dovresti avviare il demone così

    
    /opt/script-cgi -a 127.0.0.1 -p 8888 -u nginx -g nginx -f /opt/php/bin/php-cgi 
    
    

    poi modificare il file nginx.conf come ho scritto sopra, riavviare nginx e dovrebbe andare


  • Moderatore

    p.s. per semplificare la cosa ho trovato una guida specifica che indica come installare nginx e fastcgi su ubuntu feisty

    http://www.howtoforge.com/nginx_php5_fast_cgi_xcache_ubuntu7.04


  • User Attivo

    questa prima parte dice a nginx che deve inviare i file .php al server in ascolto su localhost alla porta 12384
    qui ci siamo....
    ovviamente il server è stato precedentemente tramite questo script
    avevo provato questa versione ma non sono riuscito a farlo partire (sbaglio o gli init.d per essere avviati si deve riavviare la macchina) cmq tramite un altro script mi compare la stringa che ho postato prima ho provato a eseguire quella stringa (l'user di nginx e www) e ora non mi da errore 500 ma mi dice= No input file specified. quando apro un file php

    noterai che usa il programma /usr/bin/spawn-fcgi che è specifico per archlinux, sicuramente c'è una cosa simile per la tua distribuzione e credo sia /opt/script-cgi
    ora riprovo con quest' altro metodo ma con debian dove lo trovo in opt ho installato php e nginx e prima era vuota

    PS:questi errori li ho sia in locale che in remoto sempre debian

    p.s. per semplificare la cosa ho trovato una guida specifica che indica come installare nginx e fastcgi su ubuntu feisty
    avevo provato su debian ma vuole una libreria che non c'e in etch...


  • Moderatore

    @Angelbit88 said:

    avevo provato questa versione ma non sono riuscito a farlo partire (sbaglio o gli init.d per essere avviati si deve riavviare la macchina) cmq tramite un altro script mi compare la stringa che ho postato prima ho provato a eseguire quella stringa (l'user di nginx e www) e ora non mi da errore 500 ma mi dice= No input file specified. quando apro un file php

    dipende, su Ubuntu c'è un apposito programma per stabilire quali servizi verranno avviati

    comunque per avviare un servizio pure benissimo aprire il terminale, loggarti come root e scrivere /etc/init.d/nome-servizio start

    se ti dice No input file specified vuol dire che nginx comunica con php, manca quella roba nel file nginx.conf


  • User Attivo

    se ti dice No input file specified vuol dire che nginx comunica con php, manca quella roba nel file nginx.conf
    si l' avevo messo quelle righe ma quando usavo l' aggiornamento del file di confing tramite kill -HUP 1234 non mi sono accorto che usavo un pid sbagliato...

    Ti ringrazio Paolino cmq non dovrebbero esserci problemi a far partire php con la tecnica che ho usato io ho quella con init.d descritta da te e piu' sicura?


  • Moderatore

    @Angelbit88 said:

    Ti ringrazio Paolino cmq non dovrebbero esserci problemi a far partire php con la tecnica che ho usato io ho quella con init.d descritta da te e piu' sicura?

    no quella che ho detto io è manuale, il sistema automatico fa la stessa cosa

    gli script per avviare i demoni sono quelli in /etc/init.d