Skocz do zawartości
Zaloguj się, aby obserwować  
hosthebest

nginx z fastcgi

Polecane posty

Zainstalowałem nginxa ale występują problemy że po jakimś czasie jak jest więcej połączeń nie wyświetla stron php

server_child mam ustawione na 10 ale nawet po zmianach dalej ten sam problem występuje.

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

Zainstalowałem nginxa ale występują problemy że po jakimś czasie jak jest więcej połączeń nie wyświetla stron php

server_child mam ustawione na 10 ale nawet po zmianach dalej ten sam problem występuje.

 

Wynika to z błędów w php-cgi, nie ważne czym odpalasz procesy fastcgi (np spawn-fcgi z lighttpd) - i tak może pojawić się sławne 502 lub 503. Rozwiązaniem może być php-fpm lub użycie skryptu sprawdzającego czy php-cgi działa i akceptuje połączenia, ja na swoim osobistym serwerze używam czegoś takiego:

 

#!/bin/sh
# (bof)

# Katalog glowny
cd $(dirname $0)
base=$(pwd)

# Plik tmp
tmp="/tmp/phpfix.$$"

# Output do pliku?
[ -n "$1" ] && exec 1>$tmp 2>&1 3>&1

echo ""

# ustawienia
php="/usr/bin/php5-cgi"
email="moj@email"
skrypt="/etc/init.d/init-fcgi start" # skrypt startujacy PHP
fcgihost="127.0.0.1 9000" # ip i port procesu fcgi
# Init

must_start=0
must_email=0

# dziala?
pids=$(ps ax | grep "$php$" | grep -v "grep" | cut -d"?" -f1 | tr -d " ")
if [ "$pids" != "" ]
then
#a=$(echo `telnet $fcgihost` | grep "^Connected to localhost")
echo "PHP dziala i akceptuje polaczenia!"
else
echo "PHP nie dziala!"
must_start=1
fi

# Startowac?
if [ $must_start = 1 ]
then
echo "Startuje PHP..."
$skrypt
must_email=1
fi

echo "Ok!"
echo ""

# Email?
if [ $must_email = 1 -a -n "$1" ]
then
$base/sendEmail -u "PHP restart na $(hostname)" \
-f $email \
-t $email \
-s localhost:25 \
-o message-file=$tmp >/dev/null 2>&1
fi

# wyczysc
rm -rf $tmp

# (eof)

 

i dodajesz to do cron.d co minutę

w moim wypadku skrypt /etc/init.d/init-fcgi wyglada tak:

#!/bin/bash
PHP_SCRIPT=/usr/bin/php5-fastcgi
RETVAL=0
case "$1" in
   start)
     $PHP_SCRIPT
     RETVAL=$?
 ;;
   stop)
     killall -9 php5-cgi
     RETVAL=$?
 ;;
   restart)
     killall -9 php5-cgi
     sleep 1
     $PHP_SCRIPT
     RETVAL=$?
 ;;
   *)
     echo "Usage: php-fastcgi {start|stop|restart}"
     exit 1
 ;;
esac
exit $RETVAL

 

zaś /usr/bin/php5-fastcgi to wrapper dla spawn fcgi:

 

#!/bin/sh
/usr/local/bin/spawn-fcgi -P /var/run/php5-cgi.pid -a 127.0.0.1 -p 9000 -C 2 -F 4 -u www-data -f /usr/bin/php5-cgi

 

Mam nadzieję że pomoże :-)

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

Słyszałem że nginx+php-fpm to idealne rozwiązanie. Czy ktoś z was używa już takiego rozwiązania i jak się sprawuje w praktyce?

Udostępnij ten post


Link to postu
Udostępnij na innych stronach
Słyszałem że nginx+php-fpm to idealne rozwiązanie. Czy ktoś z was używa już takiego rozwiązania i jak się sprawuje w praktyce?
Idealne rozwiązanie to nginx bez php :)

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

Słyszałem że nginx+php-fpm to idealne rozwiązanie. Czy ktoś z was używa już takiego rozwiązania i jak się sprawuje w praktyce?

 

nie, nie jest to idealne rozwiązanie - php to z zasady potwór spaghetti (czego dowodzi chociażby błąd z implementacją cgi), na serwerach dla klientów stosuję głównie Apache2+mod_php i nginx jako reverse proxy, również ze względu na brak odpowiednika .htaccess w nginxie - jego rewrite'y w konfigach serwera nie są rozwiązaniem, zwłaszcza iż konfig z błędem zatrzyma restart/reload nginxa.

Udostępnij ten post


Link to postu
Udostępnij na innych stronach
Gość patrys
Idealne rozwiązanie to nginx bez php

To na pewno, idealny serwer do serwowania statyki, jednak przy php-fpm działa dobrze obsługa php.

Ja mogę polecić Lighty :)

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

(...) ze względu na brak odpowiednika .htaccess w nginxie - jego rewrite'y w konfigach serwera nie są rozwiązaniem

 

Do praktycznie każdego skryptu są gotowe rewrity dla nginx. Dodatkowe silnik apache'a wypada marnie przy tym, z nginx jeśli chodzi o możliwości.

 

(...) zwłaszcza iż konfig z błędem zatrzyma restart/reload nginxa.

 

Napisanie skryptu, który sprawdza i usuwa wadliwe vhosty - 5 minut.

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

Do praktycznie każdego skryptu są gotowe rewrity dla nginx. Dodatkowe silnik apache'a wypada marnie przy tym, z nginx jeśli chodzi o możliwości.

 

owszeem zastosowanie PCRE w nginxie jest zdecydowanie mocniejsze od rozwiązań zapodanych w apache2.

 

Napisanie skryptu, który sprawdza i usuwa wadliwe vhosty - 5 minut.

 

i jak rozumiem ten skrypt, jakieś załóżmy spaghetti z awk, odpalać co minutę dla kilkuset domen? średnie rozwiązanie. wolałbym, jeśli już bym musiał, napisać albo zlecić komuś napisanie odpowiedniego modułu do samego nginxa, w tej chwili jednak oferuję managed hosting dla aplikacji klientów więc temat pozostaje do medytacji.

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

Do praktycznie każdego skryptu są gotowe rewrity dla nginx. Dodatkowe silnik apache'a wypada marnie przy tym, z nginx jeśli chodzi o możliwości.

Tak, z tym, że musi je dodać do głównych plików konfiguracyjnych administrator serwera, co przy shared-hostingu jest dosyć męczące... zarówno dla administratora, jak i użytkownika.

Poza tym - prowadzi to do odwiecznych wojen programista<=>admin, gdzie admin mówi, że wpisał regułkę i nie działa - wysypuje serwer; a programista mówi, że tak było w dokumentacji i musi działać... i tak w koło :D

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

i jak rozumiem ten skrypt, jakieś załóżmy spaghetti z awk, odpalać co minutę dla kilkuset domen?

 

 

Żadne spaghetti, bardzo prosta regułka sprawdzająca to, co wypluje nginx (w trybie testowym) + mały hack na configa.

 

Tak, z tym, że musi je dodać do głównych plików konfiguracyjnych administrator serwera, co przy shared-hostingu jest dosyć męczące... zarówno dla administratora, jak i użytkownika.

 

Nieprawda. Rewrity dodaje się w configach vhostów. U mnie userzy sami sobie piszą rewrity (i inne pierdoły) a skrypt, o którym wspominałem sprawdza, czy nie ma tam żadnych błędów. Jeśli jakiś jest to wyłącza vhosta i tworzy plik z komunikatem błędu. Całość działa bardzo sprawnie.

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

Nieprawda. Rewrity dodaje się w configach vhostów.

Co wcale nie wyklucza tego, że pliki konfiguracji vhostów należą do grupy głównych plików konfiguracyjnych serwera, które nie powinny być raczej dostępne do bezpośredniego zapisu dla ZU :D

 

U mnie userzy sami sobie piszą rewrity (i inne pierdoły) a skrypt, o którym wspominałem sprawdza, czy nie ma tam żadnych błędów. Jeśli jakiś jest to wyłącza vhosta i tworzy plik z komunikatem błędu. Całość działa bardzo sprawnie.

Dajesz użytkownikom możliwość bezpośredniej edycji plików konfiguracyjnych vhostów?

Udostępnij ten post


Link to postu
Udostępnij na innych stronach
Dajesz użytkownikom możliwość bezpośredniej edycji plików konfiguracyjnych vhostów?
Jeżeli to jest sensownie zrobione, to czemu nie?

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

o wcale nie wyklucza tego, że pliki konfiguracji vhostów należą do grupy głównych plików konfiguracyjnych serwera, które nie powinny być raczej dostępne do bezpośredniego zapisu dla ZU :)

Wyklucza. Bo w głównych plikach konfiguracyjnych konfiguruję się co innego a w vhostach co innego. Wyprzedzę tęż wątpliwości: user nie może nadpisać głównego configu dyrektywami w pliku konfiguracyjnym vhosta.

 

Dajesz użytkownikom możliwość bezpośredniej edycji plików konfiguracyjnych vhostów?

A co w tym dziwnego? Vhosty są dla userów a nie dla mnie. Jak coś szkodnik sobie zepsuje to vhost automatycznie jest wyłączany i pojawia się plik z komunikatem błędu. Także user nie jest wstanie unieruchomić serwera itp.

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

Bądź aktywny! Zaloguj się lub utwórz konto

Tylko zarejestrowani użytkownicy mogą komentować zawartość tej strony

Utwórz konto

Zarejestruj nowe konto, to proste!

Zarejestruj nowe konto

Zaloguj się

Posiadasz własne konto? Użyj go!

Zaloguj się

Zaloguj się, aby obserwować  

×