LINUX.ORG.RU

Тормоза на POST запросах nginx+php-fpm

 , ,


0

2

Есть 2 сайта. Практически копии друг друга. На одном все нормально, на втором почти во всех формах при отправке данных через POST получаю 504 Gateway Time-out. И без разницы, какой таймаут ставить.

В логах только это:

[error] 11687#0: *329 upstream timed out (110: Connection timed out) while reading response header from upstream, client: 31.44.10.3, server: mysite.ru, request: "POST /basket/order/ HTTP/1.1", upstream: "fastcgi://unix:/var/run/php5-fpm.sock", host: "mysite.ru", referrer: "http://mysite.ru/basket/"

nginx.conf:

user www-data;
worker_processes 1;
pid /run/nginx.pid;
timer_resolution 100ms;
worker_rlimit_nofile 8192;
worker_priority -5;

events {
	worker_connections 1024;
}

http {
	client_max_body_size 100m;
	sendfile on;
	tcp_nopush on;
	tcp_nodelay on;
	keepalive_timeout 65;
	types_hash_max_size 2048;
	include /etc/nginx/mime.types;
	default_type application/octet-stream;
	ssl_protocols TLSv1 TLSv1.1 TLSv1.2; # Dropping SSLv3, ref: POODLE
	ssl_prefer_server_ciphers on;
	access_log /var/log/nginx/access.log;
	error_log /var/log/nginx/error.log;
	gzip on;
	gzip_disable "msie6";
	gzip_vary on;
	gzip_proxied any;
	gzip_comp_level 6;
	gzip_buffers 16 8k;
	gzip_http_version 1.1;
	gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript;
	include /etc/nginx/conf.d/*.conf;
	include /etc/nginx/sites-enabled/*;
}

конфиг сайта:

server {
	listen   80;
	root /var/www/mysite.ru;
	access_log /var/www/logs/nginx.mysite.ru.log;
	server_name mysite.ru www.mysite.ru;
	location / {
		index index.php;
		try_files $uri $uri/ /index.php;
	}
	location /forum/ {
		index index.php;
		try_files $uri $uri/ @punbb;
	}
	location @punbb {
		rewrite ^/forum/(.*)$ /forum/rewrite.php;
	}
	location ~* ^.+.(xml|ogg|ogv|svg|svgz|eot|otf|woff|mp4|ttf|css|rss|atom|js|jpg|jpeg|gif|png|ico|zip|tgz|gz|rar|bz2|doc|xls|exe|ppt|tar|mid|midi|wav|bmp|rtf)$ {
		access_log off; log_not_found off; expires max;
	}
	location ~ \.php$ {
		fastcgi_pass unix:/var/run/php5-fpm.sock;
		fastcgi_index index.php;
		fastcgi_param SCRIPT_FILENAME  $document_root$fastcgi_script_name;
		include        fastcgi_params;
	}

в php.ini из существенных изменений только:

cgi.fix_pathinfo = 0

а в /etc/php5/fpm/pool.d/www.conf только вот эти изменения:

listen = /var/run/php5-fpm.sock
    listen.mode = 0660
    security.limit_extensions = .php .php3 .php4 .php5

Куда копать?

P.S. если убрать все передаваемые параметры, то ничего не виснет.

★★★

Есть 2 сайта. Практически копии друг друга.
Практически

Телепаты в отпуске. Наверное дело в коде, ибо:

upstream timed out

Что значит, что запрос приходит в php-скрипт, а ответа всё нет и нет.

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

Точно дело в коде. Нашел виновника. Есть файлик для проверки и редиректа мобильников на мобильную версию. На сайте, где все работало в кукисах была запись, чтобы не подключать этот файлик. Вот кусок файла, из-за которого post-запросы не работали:

$headers = '';
foreach ($_SERVER as $key => $value) {
   if (strpos($key, 'HTTP_') === 0 && $key != 'HTTP_HOST' && $key != 'HTTP_CONNECTION') {
       $key = strtolower(strtr(substr($key, 5), '_', '-'));
       $headers .= $key . ': ' . $value . "\r\n";
   }
}
$opts = array(
 'http'=>array(
   'method'=>"GET",
   'header'=> $headers,
 )
);
$otv = file_get_contents('http://phd.yandex.net/detect', false, stream_context_create($opts));
$convert = explode("\n", $otv);
for ($i=0;$i<count($convert);$i++) 
{
   if (strlen($convert[$i]) > 3) 
   {
   $pos = strpos($convert[$i], 'screenx');
	if ($pos > 0) {
	$sx = strip_tags($convert[$i]) + 0;
	}
	$pos = strpos($convert[$i], 'screeny');
	if ($pos > 0) {
	$sy = strip_tags($convert[$i]) + 0;
	}
	}
}
if ($sx < 700) {
$ismobile=true;
}
if ($sy < 500) {
$ismobile=true;
}

Сильно не вникал, что тут мешает, просто закомментил этот кусок. У меня там еще 2 варианта проверки.

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

О, спасибо. Буду знать. У меня второй вариант тоже через их API.

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