Ошибки nginx an upstream response is buffered to a temporary file

Статус
В этой теме нельзя размещать новые ответы.

Miracle

Проверенные
Сообщения
442
Реакции
193
Баллы
8,145
Переехал на днях с хостинга на VDS, теперь ломаю голову.
Кто может проверить настройки nginx?
И как решить проблему с постоянными предупреждениями:
*17054 an upstream response is buffered to a temporary file /var/cache/nginx/fastcgi_temp/6/34/0000000346 while reading upstream
В основном все параметры панелька ISPmanager сама прописывает, я дописал лишь Friendly URls
Режим работы PHP: FastCGI (Nginx + PHP-FPM)

nginx:
Код:
server {
    server_name domain.ru www.domain.ru;
    ssl_certificate "/var/www/httpd-cert/user/domain.ru.crtca";
    ssl_certificate_key "/var/www/httpd-cert/user/domain.ru.key";
    ssl_ciphers EECDH:+AES256:-2DES:RSA+AES:!NULL:!RC1;
    ssl_prefer_server_ciphers on;
    ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
    add_header Strict-Transport-Security "max-age=31536000;";
    ssl_dhparam /etc/ssl/certs/dhparam4096.pem;
    charset off;
    index index.php index.html;
    disable_symlinks if_not_owner from=$root_path;
    include /etc/nginx/vhosts-includes/*.conf;
    include /etc/nginx/vhosts-resources/domain.ru/*.conf;
    access_log /var/www/httpd-logs/domain.ru.access.log;
    error_log /var/www/httpd-logs/domain.ru.error.log notice;
    ssi on;
    set $root_path /var/www/user/data/www/domain.ru;
    root $root_path;
    listen [ip]:443 ssl;
    listen ip ssl;
    gzip on;
    gzip_comp_level 5;
    gzip_disable "msie6";
    gzip_types text/plain text/css application/json application/x-javascript text/xml application/xml application/xml+rss text/javascript application/javascript;
    location / {
        try_files $uri $uri/ /index.php?$uri&$args;
        index index.php index.html;
        location ~ [^/]\.ph(p\d*|tml)$ {
            try_files /does_not_exists @php;
        }
        location ~* ^.+\.(jpg|jpeg|gif|png|svg|js|css|mp3|ogg|mpe?g|avi|zip|gz|bz2?|rar|swf)$ {
            expires 7d;
        }
    }
    location /install/data/ {
        internal;
    }
    location /install/templates/ {
        internal;
    }
    location /internal_data/ {
        internal;
    }
    location ~ \.php$ {
    try_files $uri =404;
    fastcgi_pass    127.0.0.1:9000;
    fastcgi_param   SCRIPT_FILENAME $document_root$fastcgi_script_name;
    include         fastcgi_params;
    }
    location @php {
        fastcgi_index index.php;
        fastcgi_param PHP_ADMIN_VALUE "sendmail_path = /usr/sbin/sendmail -t -i -f [email protected]";
        fastcgi_pass unix:/var/www/php-fpm/user.sock;
        fastcgi_split_path_info ^((?U).+\.ph(?:p\d*|tml))(/?.+)$;
        try_files $uri =404;
        include fastcgi_params;
    }
}
 
Последнее редактирование:
Мне в настройке nginx помогал Mirovinger , попробуйте обратится к нему. Ну или к Smalesh , если у них есть время.
Вам может помочь proxy_max_temp_file_size 0; или error_log /var/www/httpd-logs/site.error.log crit; , так в инете пишут, но я не знаю правильно ли это.
 
Последнее редактирование:
Меня больше интересует вот это:

Код:
location ~ \.php$ {
    try_files $uri =404;
    fastcgi_pass    127.0.0.1:9000;
    fastcgi_param   SCRIPT_FILENAME $document_root$fastcgi_script_name;
    include         fastcgi_params;
    }
    location @php {
        fastcgi_index index.php;
        fastcgi_param PHP_ADMIN_VALUE "sendmail_path = /usr/sbin/sendmail -t -i -f [email protected]";
        fastcgi_pass unix:/var/www/php-fpm/user.sock;
        fastcgi_split_path_info ^((?U).+\.ph(?:p\d*|tml))(/?.+)$;
        try_files $uri =404;
        include fastcgi_params;
    }
Это не одно и тоже?
 
Miracle, у меня так


Код:
location ~ [^/]\.php(/|$) {
            fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
            if (!-f $document_root$fastcgi_script_name) {
                return  404;
            }

            fastcgi_pass    127.0.0.1:9002;
            fastcgi_index   index.php;
            include         /etc/nginx/fastcgi_params;
        }
 
так в инете пишут
На заборах тоже много чего пишут
Если включена ответов проксируемого сервера, и ответ не вмещается целиком в буферы, заданные директивами и , часть ответа может быть записана во временный файл. Эта директива задаёт максимальный размер временного файла. Размер данных, сбрасываемых во временный файл за один раз, задаётся директивой .

Это не одно и тоже?
Это срань, потому что
location ~ [^/]\.ph(p\d*|tml)$ { try_files /does_not_exists @php; }
лишнее, соответсвенно в локейшн @php ничего не попадет
 
На заборах тоже много чего пишут
Даже нет, не глянул что здесь fast_cgi, там немножко другое крутить надо, если не читать заборы, а нормальные источники, то

с чем связанно:

[warn] 7481#0: *40728 an upstream response is buffered to a temporary
file /var/lib/nginx/tmp/fastcgi/8/14/0000000148 while reading upstream,
client:

Ответ бекэнда не уместился в буферах и был соотвественно положен во
временный файл
Извиняюсь, нашел ошибку в своих конфигах. Настроил следующим образом, количество ворнингов существенно сократилось, потребление памяти не изменилось.
fastcgi_buffers 4 256k;
fastcgi_busy_buffers_size 256k;
fastcgi_temp_file_write_size 256k;
Примерно так.
 
Последнее редактирование:
Чтобы закрыть тему с подобной ошибкой, специально отдельным постом,
On Wed, Dec 12, 2007 at 07:28:13PM +0300, Igor Sysoev :
ЛЕКЦИЯ ПРО ПРОКСИРОВАНИЕ

По умолчанию nginx использует такие настройки:

proxy_buffering on;

proxy_buffer_size 4k;
proxy_buffers 8 4k;

proxy_max_temp_file_size 1g;

В этом режиме nginx может считать в память ответ бэкенда до 4k+8*4k=36k.
Если клиент не успевает прочитать ответ, то ответ начинает записываться
во временный файл. Когда размер файла достигнет 1G, nginx перестанет
принимать данные от бэкенда до тех пор, пока не начнут освобождаться
буфера в памяти. Кроме того, nginx не передают данные клиенту до тех,
пока не заполнится хотя бы один буфер.

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

proxy_buffering off;
proxy_buffer_size 16k;

В этом случае nginx синхронно читает данные бэкенда и сразу же отправляет
их клиенту. Если клиент медленный, то бэкенд будет его ждать. Реальный
размер данных, которые уйдут клиенту без ожидания, складывается из размеров
ядерных TCP-буферов: backend kernel send buffer + nginx kernel receive buffer
+ nginx kernel send buffer. Плюс сюда можно добавить буфер от 0 до
proxy_buffer_size - как повезёт.

Очевидно, что proxy_buffering off имеет весьма специфичное применение,
поэтому если хочется быстрого освобождения бэкенда в большинстве случаев и
ожидания клиента бэкендом в некоторых случаях (без использования временных
файлов), то нужно использовать такие настройки:

proxy_buffering on; # по умолчанию

proxy_buffer_size 4k;
proxy_buffers 32 4k; # до 132K + ядерные буфера

proxy_max_temp_file_size 0;

Конечно, прошло немало времени, немного изменился nginx, но основной посыл и логика осталась прежней. Для понимания причинно-следственных связей.
 
Статус
В этой теме нельзя размещать новые ответы.
Современный облачный хостинг провайдер | Aéza
Назад
Сверху Снизу