ERR несоответствие длины содержимого в nginx и прокси в Chrome при загрузке больших файлов



Я получаю следующую ошибку на моей консоли chrome:



GET http://localhost/grunt/vendor/angular/angular.js net::ERR_CONTENT_LENGTH_MISMATCH 


Это происходит только тогда, когда одновременные запросы выстреливаются в сторону nginx, например, когда кэш браузеров пуст и загружается все приложение. Загрузка ресурса выше в виде одного запроса завершается успешно.



Вот заголовки к этим запросам, скопированные из Chrome:



Remote Address:127.0.0.1:80
Request URL:http://localhost/grunt/vendor/angular/angular.js
Request Method:GET
Status Code:200 OK
Request Headersview source
Accept:*/*
Accept-Encoding:gzip,deflate,sdch
Accept-Language:en-US,en;q=0.8,de;q=0.6,pl;q=0.4,es;q=0.2,he;q=0.2,gl;q=0.2
Cache-Control:no-cache
Connection:keep-alive
Cookie:gs_u_GSN-265185-D=1783247335:2567:5000:1377697930719
Host:localhost
Pragma:no-cache
Referer:http://localhost/grunt/
User-Agent:Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/37.0.2062.122 Safari/537.36
Response Headersview source
Accept-Ranges:bytes
Cache-Control:public, max-age=0
Connection:keep-alive
Content-Length:873444
Content-Type:application/javascript
Date:Tue, 23 Sep 2014 11:08:19 GMT
ETag:"873444-1411465226000"
Last-Modified:Tue, 23 Sep 2014 09:40:26 GMT
Server:nginx/1.6.0


Реальный размер файла:



$ ll vendor/angular/angular.js
-rw-rw-r-- 1 xxxx staff 873444 Aug 30 07:21 vendor/angular/angular.js


Как вы можете видеть Content-Length и реальный размер файла одинаковы, так что это странно



И конфигурация nginx для этого прокси:



location /grunt/ {
proxy_pass http://localhost:9000/;
}


Есть идеи?



Спасибо



EDIT: нашел дополнительную информацию в журнале ошибок:



2014/09/23 13:08:19 [crit] 15435#0: *8 open() "/usr/local/var/run/nginx/proxy_temp/1/00/0000000001" failed (13: Permission denied) while reading upstream, client: 127.0.0.1, server: localhost, request: "GET /grunt/vendor/angular/angular.js HTTP/1.1", upstream: "http://127.0.0.1:9000/vendor/angular/angular.js", host: "localhost", referrer: "http://localhost/grunt/"
1507   8  

8 ответов:

Похоже, что под давлением nginx попытался вытащить angular.js из своего кэша и не смог из-за проблем с разрешением. Вот что решило эту проблему:

root@amac-2:/usr/local/var/run/nginx $ chown -R _www:admin proxy_temp

_www:admin в вашем случае может быть по-разному, в зависимости от того, какой пользователь владеет процессом nginx. Смотрите дополнительную информацию о ServerFault:

Https://serverfault.com/questions/534497/why-do-nginx-process-run-with-user-nobody

Я попробовал все вышеперечисленное и все еще не мог заставить его работать. Даже после обращения к chmod 777. Единственное, что решило для меня, это полностью отключить кэширование:

proxy_max_temp_file_size 0;

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

Добавление следующей строки в конфигурацию nginx было единственным, что исправило ошибку net::ERR_CONTENT_LENGTH_MISMATCH для меня:

proxy_buffering off;

Что мне удалось, так это изменить proxy_temp_path на папку с правами на чтение / запись (777)

location / {
    proxy_temp_path /data/tmp;
}

Для нас оказалось, что у нашего сервера довольно маленький корень (т. е. /) наполненный.

В нем были горы журналов и файлов от пользователей в /home. Перемещение всего этого Крафта на другой установленный привод решило все проблемы.

Просто хотел поделиться, так как это может быть еще одной причиной проблемы.

Для меня средством были эти две установки:

В файле: /etc/nginx/nginx.conf

Добавить:

proxy_max_temp_file_size 0;
proxy_buffering off;

Между строками client_max_body_size 128M; и server_names_hash_bucket_size 256;:

http {

client_max_body_size 128M;
proxy_max_temp_file_size 0;
proxy_buffering off;
server_names_hash_bucket_size 256;

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

" / storage " + fileName +".csv "

. Я тестировал среду Windows, и она отлично работала. Но позже, когда мы перенесли приложение в среду Linux, оно перестало работать. Так что позже мне пришлось переодеться. это к

"./ хранение" + fileName +".csv "

И он начал работать нормально.

Для меня решение было следующим:

sudo chown -R nginx:nginx /var/cache/nginx/fastcgi_temp/

Comments

    Ничего не найдено.