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

Nginx + PHP - problem z ładowaniem strony

Polecane posty

Witam.

 

Na wstępie chciałbym podkreślić, że nie jestem żadnym specjalistą i prosiłbym o wyrozumiałość. Jeśli temat zamieściłem w złym dziale prosiłbym o przeniesienie.

 

Zakupiłem serwer dedykowany (system operacyjny to Debian) na którym początkowo był zainstalowany serwer HTTP Apache 2 , MySQL 5.0.67 oraz PHP 5.2.0 +etch-13.

 

Ze względu na to że nie mogłem tego odinstalować ponieważ w dpkg nie występowały te elementy na liście zainstalowanych to tylko je odłączyłem w procesach uruchamianych przy starcie systemu. Następnie skonfigurowałem to wedle własnego zamysłu czyli:

- Nginx 0.7.30

- MySQL 5.0.32 (tylko ten był w repozytoriach najnowszy)

- PHP 5.2.8 z FastCGI z nakładką PHP-fpm 5.10

 

Wszystko udało mi się zainstalować i skonfigurować poprawnie (tak mi się przynajmniej wydaje) oraz sukcesywnie przenieść całe swoje forum na nowy serwer.

 

Zaistniał tylko jeden problem, którego nie mogę rozgryźć. Mianowicie strona czy to główna, czy lista tematów, czy post, czy strona profilu nie ma różnicy - czasami się nie ładuje do końca. To wygląda tak jakby w trakcie wyświetlania w połowie albo nawet i prędzej skrypt się zatrzymał i uznał że całość już jest załadowana. Dodatkowo nie występuje to regularnie, czasami jest cały czas dobrze i wyświetla się prawidłowo bez problemów, a czasem notorycznie przy każdej próbie wejścia gdziekolwiek urywa stronę.

 

Dlatego proszę o pomoc. Czy mógłby mnie ktoś mniej więcej naprowadzić czym to może być spowodowane i jak to naprawić ? Moim zdaniem jest problem z PHP , ponieważ MySQL i Nginx sądze, że jest optymalnie i poprawnie skonfigurowany.

 

Jeśli będą jakieś dodatkowe pliki, configi czy informację to je zamieszcze tylko proszę powiedzieć co konkretnie.

 

Łączę wyrazy szacunku,

Tai

Udostępnij ten post


Link to postu
Udostępnij na innych stronach
Gość patrys

Jakiś cacher w php? Błąd występował na poprzedniej platformie ?

Podaj adres strony i konfiguracje, a będzie prościej coś powiedzieć.

Udostępnij ten post


Link to postu
Udostępnij na innych stronach
Jakiś cacher w php? Błąd występował na poprzedniej platformie ?

Podaj adres strony i konfiguracje, a będzie prościej coś powiedzieć.

 

Na poprzedniej platformie problem nie występował.

 

Konfiguracja PHP:

http://ephe.fe.pl/

 

Adres forum:

http://ephe.pl

 

Plik my.cnf:

[client]
port		= 3306
socket		= /var/lib/mysqld.sock

[mysqld_safe]
socket		= /var/lib/mysqld.sock
nice		= -10
open_files_limit = 8192

[mysqld]
user		= mysql
pid-file	= /var/run/mysqld/mysqld.pid
socket		= /var/lib/mysqld.sock
port		= 3306
basedir		= /usr
datadir		= /var/lib/mysql
tmpdir		= /tmp
language	= /usr/share/mysql/english
#skip-external-locking
safe-show-database
#old_passwords
back_log = 50
myisam_sort_buffer_size = 64M
key_buffer_size		= 16M
join_buffer_size = 1M
read_buffer_size = 1M
sort_buffer_size = 2M
wait_timeout = 40
connect_timeout = 10
max_allowed_packet	= 64M
thread_stack		= 128K
thread_cache_size	= 384
#max_connections		= 100
table_cache			= 4000
thread_concurrency	 = 8
query_cache_limit	   = 4M
query_cache_size		= 80M
tmp_table_size = 64M
max_heap_table_size = 64M
net_buffer_length = 16384
concurrent_insert = 2
table_lock_wait_timeout = 30
read_rnd_buffer_size = 786432
bulk_insert_buffer_size = 8M
query_cache_type = 1
query_prealloc_size = 262144
query_alloc_block_size = 65536
transaction_alloc_block_size = 8192
transaction_prealloc_size = 4096
default-storage-engine = MyISAM
max_write_lock_count = 8
#skip-innodb


[mysqldump]
quick
max_allowed_packet	= 16M

[mysql]
#no-auto-rehash	# faster start of mysql but no tab completition

[isamchk]
key_buffer		= 64M
sort_buffer = 64M
read_buffer = 16M
write_buffer = 16M

 

Konfiguracja Nginxa:

 server {
	listen		80;
server_name	ephe.pl www.ephe.pl;
location / {
	index	index.php index.htm index.html;
	root	/var/www/html/forum;
	rewrite ^/((urllist|sitemap_).*\.(xml|txt)(\.gz)?)$ /vbseo_sitemap/vbseo_getsitemap.php?sitemap=$1 break;

	if ($request_filename ~ "\.php$" ) {
	rewrite ^/(.*)$ /vbseo.php break;
	}

	if (!-e $request_filename) {
	rewrite ^/(.*)$ /vbseo.php break;
	}
	}
location ~\.php$ {
root	/var/www/html/forum;
fastcgi_pass	127.0.0.1:9000;
fastcgi_index	index.php;
fastcgi_param	SCRIPT_FILENAME /var/www/html/forum$fastcgi_script_name;
include		fastcgi_params;
}
}

 

Cacher próbowałem zainstalować Xcache 1.2.2 bynajmniej po zainstalowaniu paczki (wszystko przebiegło pomyślnie) nie widzę go w konfiguracji PHP.

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

Czy php5-cgi nasluchuje na porcie 9000? Jesli nie, php5-cgi -b 127.0.0.1:9000 &

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

Przy odpaleniu komendy którą zaproponowałeś:

php5-cgi -b 127.0.0.1:9000 &

Wyskoczył błąd:

PHP Warning: Module 'json' already loaded in Unknown on line 0

Cannot bind/listen socket - [98] Address already in use.

Couldn't create FastCGI listen socket on port 127.0.0.1:9000

 

[1]+ Exit 255 php5-cgi -b 127.0.0.1:9000

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

Gdyby PHP-fcgi nie był odpalony, to by się chyba nic nie wyświetlało...

 

@tai16 - pokaż plik fastcgi_params.

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

Plik fastcgi_params:

 

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 SCRIPT_NAME $fastcgi_script_name;

fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;

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 GATEWAY_INTERFACE CGI/1.1;

fastcgi_param SERVER_SOFTWARE nginx/$nginx_version;

 

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;

 

# PHP only, required if PHP was built with --enable-force-cgi-redirect

fastcgi_param REDIRECT_STATUS 200;

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

Sprawdź logi nginxa, ustaw dla php.ini error log. Przewaznie jest to spowodowane przez cacher`a, pokaz jeszcze php5-cgi -v.

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

Nginx nie ma ustawionych logów :/

 

php5-cgi -v daje:

PHP Warning: Module 'json' already loaded in Unknown on line 0

PHP 5.2.0-8+etch13 (cgi-fcgi) (built: Oct 2 2008 08:21:17)

Copyright ? 1997-2006 The PHP Group

Zend Engine v2.2.0, Copyright ? 1998-2006 Zend Technologies

 

 

EDIT:

Error log w php.ini ustawiony , zapisywanie logów w nginx ustawione a demony zresetowane.

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

Logi php puste jak na razie.

 

Logi nginxa:

2008/12/31 04:36:36 [alert] 2632#0: accept() failed (24: Too many open files) while accepting new connection on 0.0.0.0:80

Błąd ten występuje cały czas kilkadziesiąt razy na sekundę.

 

Dopisałem więc do configu:

worker_rlimit_nofile 10240;

 

Teraz z kolei występuje w logach:

http://wklej.org/hash/4f667e8650/

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

Widzisz, trzeba bylo tak odrazu... zarzuc ulimit -a | grep -n i zmien wartosc -n na wieksza... tak plus tysiac na poczatek.

Udostępnij ten post


Link to postu
Udostępnij na innych stronach
Błąd ten występuje cały czas kilkadziesiąt razy na sekundę.
Zwiększ limit otwartych plików dla użytkownika, z którego prawami chodzi nginx.

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

Dopisałem więc do configu:

worker_rlimit_nofile 10240;

 

Teraz z kolei występuje w logach:

 

http://wklej.org/hash/4f667e8650/

 

Zarzuciłem:

ulimit -a | grep 10240

 

Logi z tej chwili:

http://wklej.org/hash/c4281f1c2f/

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

Daj mu tmp na /tmp... Albo jak ci nie wyjdzie, to mkdir /usr/local/nginx/fastcgi_temp ; chmod 777 /usr/local/nginx/fastcgi_temp

Jeśli nadal bedziesz miec problem, podeslij PW, akurat mam dzis nocke wiec chetnie ci pomoge.

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

Katalogu nie tworzyłem ponieważ już istnieje z całą strukturą podkatalogów

 

Dałem więc :

chmod 777 /usr/local/nginx/fastcgi_temp

chmod 777 /usr/local/nginx/fastcgi_temp/*

 

Tylko sądzę, że chmod dotyczy tylko katalogu fastcgi_temp a jego podkatalogów już nie i dlatego problem nadal występuje.

 

Dobra teraz dałem:

chmod -R 777 /usr/local/nginx/fastcgi_temp

czekam aż logi dojdą i zobacze czy to poprawiło sytuacje

Udostępnij ten post


Link to postu
Udostępnij na innych stronach
chmod 777 /usr/local/nginx/fastcgi_temp/*

 

A cóż to za konstrukcja ;)

 

chmod -R 777 /usr/local/nginx/fastcgi_temp

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

Dziękuję bardzo wszystkim za odpowiedzi a zwłaszcza ze strony merloy. Problem z ładowaniem strony został rozwiązany.

 

Łącze wyrazy szacunku,

Tai

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

Witam ponownie ... uznałem, że bez sensu zakładać nowy temat więc posłużę się tym co by nie robić zbyt dużego bajzlu.

 

Uruchomiłem w nginxie logi na poziomie notice by zbadać dlaczego otrzymuje cały czas:

 

2009/01/19 13:31:11 [alert] 19347#0: worker process 19351 exited on signal 9

2009/01/19 13:37:11 [alert] 19451#0: worker process 19455 exited on signal 9

2009/01/19 13:38:11 [alert] 19467#0: worker process 19471 exited on signal 9

2009/01/19 13:46:11 [alert] 19637#0: worker process 19641 exited on signal 9

2009/01/19 13:52:11 [alert] 19733#0: worker process 19737 exited on signal 9

 

Wynik logów nginxa (fragment) z poziomu notice:

http://wklej.org/hash/7fd1faf510/

 

Niestety, ale nie potrafię nic z tego wywnioskować i znaleźć na ten problem rozwiązania. Jeśli ktoś wie w czym leży problem lub jak na niego zaradzić byłbym wdzięczny za wskazówki.

 

Pozdrawiam

Udostępnij ten post


Link to postu
Udostępnij na innych stronach
Uruchomiłem w nginxie logi na poziomie notice by zbadać dlaczego otrzymuje cały czas:
Jak można się łatwo domyślić, poziom notice nie służy do debugowania, a z tych logów nic nie wynika.

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ć  

×