LINUX.ORG.RU
ФорумAdmin

Как подружить nginx и php?


0

1

Здравствуйте, В общем ситуация следующая. На Ubuntu 10.4 программисты поставили nginx 1.0.8 и php 5.3.2-1 fastCGI, до этого был апач. Так вот сейчас очень часто(буквально несколько раз в час :)) php вылетает, причем нагрузки нет - всего несколько человек тестируют. приходится его включать, чтоб сайт работал. где смотреть логи понятия не имею, админа у нас нет, и мы в линуксе не разбираемся. может кто-то знает в чем дело?

вот заголовки ответов от сервера

-----------------------------------------------

HTTP/1.1 302 Moved Temporarily Server: nginx/1.0.8 Date: Thu, 10 Nov 2011 23:50:37 GMT Content-Type: text/html; charset=utf-8 Transfer-Encoding: chunked Connection: keep-alive X-Powered-By: PHP/5.3.2-1ubuntu4.10 Set-Cookie: PHPSESSID=93kbkol6bpmr9a00ru3fks5r71; path=/ Expires: Thu, 19 Nov 1981 08:52:00 GMT Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0 Pragma: no-cache location: ?layout=empty&content=beta Заголовки ответа от сервера при переадресации на

HTTP/1.1 200 OK Server: nginx/1.0.8 Date: Thu, 10 Nov 2011 23:50:37 GMT Content-Type: text/html; charset=utf-8 Transfer-Encoding: chunked Connection: keep-alive X-Powered-By: PHP/5.3.2-1ubuntu4.10 Set-Cookie: PHPSESSID=gapafe54f3cuf1qibkd5ig7hm3; path=/ Expires: Thu, 19 Nov 1981 08:52:00 GMT Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0 Pragma: no-cache

если нужна еще информация спрашивайте.

спасибо

программисты поставили

программисты поставили

VictimOfLoveToLinux выделил(а) ключевые слова.

В качестве fastCGI что используется? Я использую php-fpm, работает как часики.

Bragin ()
Ответ на: комментарий от Bragin

nginx.conf

#user nobody;
worker_processes 5;

#error_log logs/error.log;
#error_log logs/error.log notice;
#error_log logs/error.log info;

#pid logs/nginx.pid;


events {
worker_connections 1024;
}


http {
include mime.types;
default_type application/octet-stream;

#log_format main '$remote_addr - $remote_user [$time_local] «$request» '
# '$status $body_bytes_sent «$http_referer» '
# '«$http_user_agent» «$http_x_forwarded_for»';

#access_log logs/access.log main;

sendfile on;
#tcp_nopush on;

#keepalive_timeout 0;
keepalive_timeout 2;

#gzip on;

server {
listen 80;
server_name localhost;

#charset koi8-r;

#access_log logs/host.access.log main;

root /var/www;
index index.php index.html index.htm;

location / {

}

#error_page 404 /404.html;

# redirect server error pages to the static page /50x.html
#
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}

# proxy the PHP scripts to Apache listening on 127.0.0.1:80
#
#location ~ \.php$ {
# proxy_pass http://127.0.0.1;
#}

# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
#
location ~ \.php$ {
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME /var/www$fastcgi_script_name;
include fastcgi_params;
}

# deny access to .htaccess files, if Apache's document root
# concurs with nginx's one
#
#location ~ /\.ht {
# deny all;
#}

location /publish {

set $push_channel_id $arg_cid;
push_publisher;
push_store_messages off;
}

location /listen {
push_subscriber;

push_subscriber_concurrency first;

set $push_channel_id $arg_cid;

default_type text/plain;
}
}


# another virtual host using mix of IP-, name-, and port-based configuration
#
#server {
# listen 8000;
# listen somename:8080;
# server_name somename alias another.alias;

# location / {
# root html;
# index index.html index.htm;
# }
#}


# HTTPS server
#
#server {
# listen 443;
# server_name localhost;

# ssl on;
# ssl_certificate cert.pem;
# ssl_certificate_key cert.key;

# ssl_session_timeout 5m;

# ssl_protocols SSLv2 SSLv3 TLSv1;
# ssl_ciphers HIGH:!aNULL:!MD5;
# ssl_prefer_server_ciphers on;

# location / {
# root html;
# index index.html index.htm;
# }
#}

}

vitalii82 ()
Ответ на: комментарий от VictimOfLoveToLinux

было еще хуже - был апач. нам нужен nginx для comet. кроме того, после установки nginx сайт стал заметно быстрее работать.

vitalii82 ()
Ответ на: комментарий от Shtsh

>Нанимайте админа, чтобы разбирался. с удовольствием бы нанял нормального, но я уже нанимал вначале чтоб установил линукс. он поставил CentOS к которой документации мало+GUI почемуто не работал. потом попросил настроить мыло. рассылка от нас стала попадать в спам. как установить git и настроить СКВ на нашем серваке он тоже не знал, в итоге в админах мы разрочаровались, потеряли денги, а над проектом итак работаем на собственном энтузиазме и экономим каждую копейку. короче, своими силами снесли CentOS, установили Ubuntu, настроили мыло, настроили СКВ, установили nginx. Но вот возникла такая проблема. И еще я заметил, что после того как заходишь на сайт через оперу, то он падает уже через минуту. Если через другие браузеры, то можно и час работать. Херня какаято :о)

vitalii82 ()
Ответ на: комментарий от vitalii82

К CentOS мало документации? Я поражён. Выбор нормальный для продакшена.

Гуй на сервере? Что? Зачем?

Вот то, что не знал, как поставить git - фэйл.

Что такое СКВ?

То, что рассылка попадает в спам - скорее всего, сами виноваты, это решается только содержанием заголовка и тела письма. Есть, конечно, возможные причины с серверной стороны, но это маловероятно.

Я, конечно, не знаю, что у вас за проект, но что-то у вас в проектировании не так.

Shtsh ★★★★ ()
Ответ на: комментарий от Shtsh

>Что такое СКВ? Система контроля версий. На подобии github.com, только мы у себя сделали, чтоб экономить :--)

Я, конечно, не знаю, что у вас за проект, но что-то у вас в проектировании не так.

У меня на локалке апач, и при нем php работает и не выключается сам по себе. Да и на серваке когда апач стоял, такой проблемы небыло.

vitalii82 ()
Ответ на: комментарий от vitalii82

Смотрите логи. В частности, error.log

Возможно, у вас в приложении какая-то ошибка. Стоило бы знать, какие приложения используются для проекта.

Shtsh ★★★★ ()
Ответ на: nginx.conf от vitalii82

Гуй на сервере? Не смешная шутка.

Логи по идее тут /var/log/nginx/error.log . И я так и не получил ответа, что у вас в роли FastCGI? И конфиг у вас в дурном тоне. Настройки хостов принято хранить тут /etc/nginx/sites-available/

Bragin ()
Ответ на: комментарий от Bragin

>что у вас в роли FastCGI?
spawn-fcgi

И конфиг у вас в дурном тоне. Настройки хостов принято хранить тут /etc/nginx/sites-available/

А у нас где?

vitalii82 ()

worker_processes надо поставить в 1 (5 нужно на многопроцессорной машине, у nginx другая модель).

найти вам надо конфиг php-fpm.conf и попробовать увеличить значения pm.max_children и pm.max_spare_servers

amgorb ()
Ответ на: комментарий от vitalii82

>кроме того, после установки nginx сайт стал заметно быстрее работать.

LOL. Вы хоть знаете для чего на самом деле нужен nginx?

снесли CentOS, установили Ubuntu


В линуксе проблемы не решаются переустановкой ОСи! Для сервера CentOS неплохой выбор. Но пусть будет теперь Ubuntu, будут проблемы - решайте их а не занимаетесь переустановкой.

И еще я заметил, что после того как заходишь на сайт через оперу, то он падает уже через минуту.


Могу предположить, что где-то в php коде у вас неправильно обрабатывается user_agent. Кто писал код? У вас вообще есть программисты или используете готовый движок?

Вообще я не понимаю, зачем вам нужен админ. Все что вам нужно, может настроить среднестатический php-кодер



beka ()
Ответ на: nginx.conf от vitalii82

>worker_processes 5;

1. Какое у вас железо?
2. Размер аудитории
3. Уверены что у вас нет ошибок в php-коде?

beka ()
Ответ на: комментарий от beka

>Вы хоть знаете для чего на самом деле нужен nginx?
я не знаю для чего он на самом деле нужен, но выше я написал для чего мы его используем.
CentOS снесли потому что была проблема с установкой PHP fastCGI - не могли установить, а тратить время на разбор причины ни у кого нет, на Ubuntu все встало сразу. это и есть решение проблемы исходя из существующих возможностей и ресурсов.
среднестатистический кодер не может настроить.
если знаешь в чем дело, лучше скажи из какого файла тебе логи вытащить :--)
движки не используем, все свое. еще раз повторю, сервер работает, а php выключается, и связанно это с Comet-om (http_push_module). Приходится его вот так включать: /usr/bin/spawn-fcgi -a 127.0.0.1 -p 9000 -u www-data -g www-data -f /usr/bin/php5-cgi -P /var/run/fastcgi-php.pid

Какое у вас железо?

Memory: 2.0 GiB
Processor 0: AMD Athlon(tm) 64 X2 Dual Core Processor 4800+
Processor 1: AMD Athlon(tm) 64 X2 Dual Core Processor 4800+

Размер аудитории

Размеров аудитории еще нет, только тестим сайт, запускать будем на этом же компе, чтоб посмотреть сколько человек он сможет обеспечить. контент - текст, фото, чат, различные уведомления.

Уверены что у вас нет ошибок в php-коде?

во всяком случае не отображаются при error_reporting(E_ALL | E_STRICT);

vitalii82 ()
Ответ на: комментарий от vitalii82

Я не понял из топика, читали ли error.log

Включается так.

 error_log  /var/log/nginx/error.log;

Если там нету ничего, то ломается до обработки php. Смотри на используемые в проекте компоненты, например, memcached.

Да и вообще, добавь

 -e > /var/log/php.log 2>&1
В строку запуска скрипта php-cgi

Shtsh ★★★★ ()
Ответ на: комментарий от Shtsh

Вот 4 строки из error.log сразу после того как заглох. Дальше еще раз тридцать повторяется 4-я строка и все.

2011/11/11 13:16:44 [error] 1144#0: *4433 FastCGI sent in stderr: «PHP Notice: session_start(): ps_files_cleanup_dir: opendir(/var/lib/php5) failed: Permission denied (13) in /var/www/index.php on line 10» while reading response header from upstream, client: 79.165.19.149, server: localhost, request:
«POST /?ajax=eochat_handler&act=get_new_messages HTTP/1.1», upstream: «fastcgi://127.0.0.1:9000», host: «mysite.com», referrer: "http://mysite.com/?content=people"
2011/11/11 13:17:37 [error] 1144#0: *4580 FastCGI sent in stderr: «PHP Notice: Undefined index: uid in /var/www/design/ajax/eo_send_message.php on line 10
PHP Notice: Undefined index: uid in /var/www/design/ajax/eo_send_message.php on line 27» while reading response header from upstream, client: 79.165.19.149, server: localhost, request: «POST /index.php?ajax=eo_send_message&condition=send_message HTTP/1.1», upstream: «fastcgi://127.0.0.1:9000», host: «mysite.com», referrer: "http://mysite.com/index.php?content=contacts"
2011/11/11 13:20:35 [error] 1141#0: *5073 connect() failed (111: Connection refused) while connecting to upstream, client: 79.165.19.149, server: localhost, request: «POST /index.php?ajax=eochat_handler&act=get_new_messages HTTP/1.1», upstream: «fastcgi://127.0.0.1:9000», host: «mysite.com», referrer: "http://mysite.com/index.php?content=invitations"

vitalii82 ()
Ответ на: комментарий от Shtsh

>Да и вообще, добавь
-e > /var/log/php.log 2>&1
В строку запуска скрипта php-cgi

как именно добавить? я дописал в конце, а после этого в пустом php.log появилось следующее: -e: command not found

vitalii82 ()
Ответ на: комментарий от vitalii82

там где функция start, где идёт запуск самой программы (/usr/bin/php-cgi). Вот хз, как там в убунте. Под руками убунты нет и не будет в обозримом будущем.

По идее, скрипт должен лежать в /etc/init.d/

А там смотри и разбирайся. В скрипте должны быть функции запуска, останова и рестарта программы.

Shtsh ★★★★ ()
Ответ на: комментарий от Shtsh

>Выбор нормальный для продакшена.

CentOS? На продакшн? Я последний год только глюки с ним вижу :) То что-то криво собрано, то что-то вручную не собирается, то что-то глючит…

KRoN73 ★★★★★ ()
Ответ на: комментарий от vitalii82

>Вот 4 строки из error.log сразу после того как заглох.

Смотрите:
1) Ваше php-приложение пытается сохранить сессию, но у него нет разрешения изменять файлы в директории /var/lib/php5
2) Далее ваше php-приложение пытается загрузить сохраненную сессию, но так как его нет(п. 1), то вылетает(?)

Для начала в php.ini измените текущее значение session.save_path на

session.save_path = /tmp

и удостоверьтесь, что скрипт может писать/читать в /tmp

beka ()
Ответ на: комментарий от beka

save_path изменил теперь первых двух ошибок нет. php снова слетел, а nginx показывает только ошибки
2011/11/11 13:20:35 [error] 1141#0: *5073 connect() failed (111: Connection refused) while connecting to upstream, client: 79.165.19.149, server: localhost, request: «POST /index.php?ajax=eochat_handler&act=get_new_messages HTTP/1.1», upstream: «fastcgi://127.0.0.1:9000», host: «mysite.com», referrer: "http://mysite.com/index.php?content=invitations"
штук 10.

vitalii82 ()
Ответ на: комментарий от Shtsh

>По идее, скрипт должен лежать в /etc/init.d/
у нас запускается из rc.local. В нем единственная команда
/usr/bin/spawn-fcgi -a 127.0.0.1 -p 9000 -u www-data -g www-data -f /usr/bin/php5-cgi -P /var/run/fastcgi-php.pid
до этого он был пуст.

vitalii82 ()
Ответ на: комментарий от vitalii82

>save_path изменил теперь первых двух ошибок нет. php снова слетел, а nginx показывает только ошибки

Ок.

Connection refused значит никто порт не слушает. Все пролемы с бекэндом, т.е. с fastcgi.

давай сюда его настройки и логи.

beka ()

PHP? Comet?.. ССЗБ... Если есть JS-программисты, переписывайте на Node.JS.

ei-grad ★★★★★ ()
Ответ на: комментарий от vitalii82

>/usr/bin/spawn-fcgi -a 127.0.0.1 -p 9000 -u www-data -g www-data -f /usr/bin/php5-cgi -P /var/run/fastcgi-php.pid

Кстати, попробуйте запускать так:

/usr/bin/spawn-fcgi -a 127.0.0.1 -p 9000 -u www-data -g www-data -f /usr/bin/php5-cgi -P /var/run/fastcgi-php.pid -C 5
beka ()
Ответ на: комментарий от beka

>Кстати, попробуйте запускать так: вот уже минут 10 интенсивной переписки в чате между 4 пользователями и вроде не выбивает. раньше минуты хватало для двоиз. но теперь заметно как страницы загружаются. до этого все происходило мгновенно

vitalii82 ()
Ответ на: комментарий от vitalii82

правда не всегда, вот после перезагрузки опять нормально обновляются

vitalii82 ()
Ответ на: комментарий от vitalii82

>только объясни что ты сделал?

Увеличил число запущенных процессов spawn-a. Было 1, стало 5. (поэтому -С 5)

Смотрите, у вас почему-то(причину мы так и не установили) падает spawn-fcgi. Причины этого могут быть такими:
* в php-коде ошибки
* php-код выполняется слишком долго и возникает очередь к одному единственному процессу spawn-fcgi
* баги в spawn-fcgi

Если -С 5 будет недостаточно, то попробуйте заменить spawn-fcgi на PHP-FPM.

beka ()
Ответ на: комментарий от maloi

не может вообще ничего настроить, как показывает практика.

3.14.здёшь чистой воды. Аргументы в студию.

ggrn ★★★★★ ()
Ответ на: комментарий от vitalii82

>а как установить оптимальное количество процессов которые надо запустить?

экспериментальным путем.
кол-во ядер * 2, 3 или даже 4.

Если интерпретатор php проводит много времени, дожидаясь ответа от БД, то можно умножать на 4. В противном случае на 2.

beka ()
Ответ на: комментарий от KRoN73

плюсую. да и махровые ынтерпрайзные ядра в которые очень нехотя бэкпортируют нужные мне фичи немного достали, если честно...

Pinkbyte ★★★★★ ()
Ответ на: комментарий от Pinkbyte

>дыра, через которую похакают к чертям собачьим :-)
спасибо, очень приятно узнавать о таких сюрпризах . А что нибудь подробнее знаешь об этой дыре? :о)

vitalii82 ()
Ответ на: комментарий от vitalii82

всегда пожалуйста!
почта: [мой_ник_на_ЛОРе]in@gmail.com

только учти, что я не админ и не программирую на php ;)

beka ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.