nginx 504 timeout при проксировании запросса на большой post

12
T
На сайте с 28.04.2012
Offline
1
4215

Настроил прокисрование бэкэнда через upstream, и появилась странная проблема при отправке "большого" поста из формы (в основном много стрингов) или при аплоаде файлов больших 200кб, происходит большая задержка с последующим вываливанием 504 ошибки, в базе появляеться апдейт но с битой кодировкой и текстом(не полный), при меньших размерах текста или файлов проблем не наблюдаеться, если upstream исключить и вместо проксирование поставить просто fastcgi то проблема пропадает

upstream backend {

server site.com:8080;

}

server {

listen 80;

server_name site.com *.site.com;

access_log /logs/nginx/access.log;

error_log /logs/nginx/error.log;

proxy_set_header Host $host;

proxy_set_header X-Real-IP $remote_addr;

proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

charset windows-1251;

client_max_body_size 100m;

root /home/develop/www/site.com;

location = / {

proxy_pass http://backend;

break;

}

location / {

if (!-e $request_filename) {

proxy_pass http://backend;

break;

}

}

location ~* \.(php)$ {

proxy_pass http://backend;

break;

}

}

server {

listen site.com:8080;

server_name site.com;

set $charset "windows-1251";

index index.php;

access_log /logs/nginx/access_backend.log;

error_log /logs/nginx/error_backend.log;

root /home/develop/www/site.com;

error_page 404 /index.php;

client_max_body_size 100m;

location / {

if (!-e $request_filename) {

rewrite ^/(.*)$ /index.php last;

}

}

location ~* \.(php)$ {

fastcgi_pass unix:/tmp/php5-fpm.sock;

fastcgi_index index.php;

fastcgi_param SCRIPT_FILENAME /home/develop/www/site.com$fastcgi_script_name;

include fastcgi_params;

fastcgi_read_timeout 60s;

}

}

пример тестовой конфигурации, искал решения на форуме (гугл), что то похожее обсуждали в топике /ru/forum/553071, но мне не помогло

M
На сайте с 01.12.2009
Offline
235
#1

лог ошибок нужен, в момент ошибки.

Администратор Linux,Freebsd. построения крупных проектов.
T
На сайте с 28.04.2012
Offline
1
#2
madoff:
лог ошибок нужен, в момент ошибки.

Ошибка в логе бэкэнда

[error] 73414#0: *83 upstream timed out (60: Operation timed out) while sending request to upstream, client: 46.4.99.252, server: site.com, request: "POST /main/pages/submit/3828 HTTP/1.0", upstream: "fastcgi://unix:/tmp/php5-fpm.sock:"

retexica
На сайте с 28.07.2011
Offline
9
#3

Измените time out для ожидания ответа от скрипта - fastcgi_read_timeout 60s хотя бы на

fastcgi_read_timeout 120s;

T
На сайте с 28.04.2012
Offline
1
#4
retexica:
Измените time out для ожидания ответа от скрипта - fastcgi_read_timeout 60s хотя бы на

fastcgi_read_timeout 120s;

Это тестовые значения, я пробовал и такие, если настроить не через проксирование, а через fastcgi напрямую то выполняеться все очень быстро за секунду-две

---------- Добавлено 28.04.2012 в 14:57 ----------

пробовал более детальные настройки прокси

proxy_redirect off;

proxy_buffering off;

client_body_buffer_size 128k;

proxy_connect_timeout 90;

proxy_send_timeout 200;

proxy_read_timeout 200;

proxy_buffer_size 4k;

proxy_buffers 4 32k;

proxy_busy_buffers_size 64k;

proxy_temp_file_write_size 64k;

не как не повлияло

D3
На сайте с 31.05.2009
Offline
39
DJ3
#5

nginx -v
и
nginx -V
в студию.
T
На сайте с 28.04.2012
Offline
1
#6

nginx version: nginx/1.2.0

configure arguments: --prefix=/usr/local/etc/nginx --with-cc-opt='-I /usr/local/include' --with-ld-opt='-L /usr/local/lib' --conf-path=/usr/local/etc/nginx/nginx.conf --sbin-path=/usr/local/sbin/nginx --pid-path=/var/run/nginx.pid --error-log-path=/var/log/nginx-error.log --user=www --group=www --http-client-body-temp-path=/var/tmp/nginx/client_body_temp --http-fastcgi-temp-path=/var/tmp/nginx/fastcgi_temp --http-proxy-temp-path=/var/tmp/nginx/proxy_temp --http-scgi-temp-path=/var/tmp/nginx/scgi_temp --http-uwsgi-temp-path=/var/tmp/nginx/uwsgi_temp --http-log-path=/var/log/nginx-access.log --with-http_stub_status_module --with-pcre

D3
На сайте с 31.05.2009
Offline
39
DJ3
#7

На вскидку proxy_connect_timeout не может быть больше 75 секунд

И proxy_read_timeout на максимально любое время, которое устроит.

Для аплоада больших файлов используйте модуль nginx-upload-module

T
На сайте с 28.04.2012
Offline
1
#8
DJ3:
Для аплоада больших файлов используйте модуль nginx-upload-module

Изображения до 1 мегабайта можно считать большими файлами

D3
На сайте с 31.05.2009
Offline
39
DJ3
#9
temafey:
Изображения до 1 мегабайта можно считать большими файлами

По мне так нет, но суть в том, что модуль не использует php процесс. И еще посмотрите php.ini

на время выполнения php max_execution_time, может быть сам скрипт по тамауту убивается, до того, как все переварится сервером.

T
На сайте с 28.04.2012
Offline
1
#10
DJ3:
И еще посмотрите php.ini
на время выполнения php max_execution_time, может быть сам скрипт по тамауту убивается, до того, как все переварится сервером.

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

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

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

12

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий