Nginx serwer www z obsługą php@FastCGI part II

  • Data: 2011

Jest to kontynuacja artykułu: Nginx z obsługą php@FastCGI part I

Przed rozpoczęciem konfiguracji nginx-a musimy zaopatrzyć sie w następujące pakiety: php5, php5-cgi, spawn-cgi, jeśli będziemy chcieli wykorzystywać bazę np. mysql to dodatkowo:php5-mysql, php5-mcrypt. Aplikację spawn-cgi, zapożyczymy z pakiety lighttpd.

  • na wstępie konfigurujemy php5-cgi, edytując plik /etc/php5/cgi/php.ini
  • a w nim ustawiamy: cgi.fix_pathinfo=1
  • pobieramy pakiet lighttpd: wget http://download.lighttpd.net/lighttpd/releases-1.4.x/lighttpd-1.4.26.tar.gz
  • rozpakowujemy go: tar -xvjf lighttpd-1.4.26.tar.gz , wchodzimy do katalogu
  • ./configure
  • kompilujemy make
  • i bierzemy co nas interesuje: cp src/spawn-fcgi /usr/bin/spawn-fcgi
  • nano /usr/bin/php-fastcgi i wklejamy:
    
    #!/bin/sh
    /usr/bin/spawn-fcgi -a 127.0.0.1 -p 9000 -C 3 -u www-data -f /usr/bin/php5-cgi
    

    gdzie:
    -a - interfejs na którym nasłuchuje
    -p - port na którym nasłuchuje
    -C - ilość uruchomionych procesów
    -u - z jakimi prawami uruchamiamy proces
  • następnie tworzymy skrypt startowy do fastcgi, tworzymy plik /etc/init.d/fastcgi
  • 
    #!/bin/bash
    PHP_SCRIPT=/usr/bin/php-fastcgi
    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
    
  • nadajemy mu odpowiednie prawa: chmod 755 /etc/init.d/fastcgi
  • update-rc.d fastcgi defaults 20 (debian,ubuntu itp)
  • To na tyle jeśli chodzi o php via fastcgi.

  • Teraz przechodzimy do konfiguracji samego nginx-a
  • W wielkim uproszczeniu różnica między konfiguracją serwującą statyczny kontent a do serowania dynamicznych stron znajduje się w dyrektywie location:
    
           location ~ \.php$ {
    
                    fastcgi_pass   127.0.0.1:9000;
                    fastcgi_index  index.php;
                    fastcgi_param  SCRIPT_FILENAME katalog_naszej_strony$fastcgi_script_name;
                    include fastcgi_params;
            }
    }
    

    Warto zoptymalizować konfigurację tak, aby do interpretera PHP trafiały wyłącznie żądania wymagające serwowanie "dynamicznych stron". PHP potrafi też serwować statyczne pliki czy obrazki ale nginx zrobi to szybciej i mniejszym kosztem.
    Na przykład:

    
            location = /images {
            auth_basic off;
            root /var/www/strona/images;
    
      }
    
            location  / {
                   root   /var/www/strona;
                   index  index.php;
    
            }
          
    
            location = /50x.html {
                    root   /var/www/nginx-default;
            }
    
    
            location ~ \.php$ {
    
                    fastcgi_pass   127.0.0.1:9000;
                    fastcgi_index  index.php;
                    fastcgi_param  SCRIPT_FILENAME /var/www/strona$fastcgi_script_name;
                    include fastcgi_params;
            }
    }
    

    Powrót »