2014-09-23 2 views
23

Я получаю следующее сообщение об ошибке на моей хромированной консоли:ERR_CONTENT_LENGTH_MISMATCH на Nginx и прокси на 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/" 

ответ

32

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

[email protected]:/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

+2

Спасибо за подсказку, я столкнулся с этим с моим HomeBrew nginx после обновления до El Capitan –

+0

Я рад, что это все еще полезно! – amit

+2

В случае, если кто-либо все еще сталкивается с этой проблемой - вам может потребоваться дважды проверить пользователя, под которым запущен 'nginx'. В моем случае папка имела правильные разрешения и права собственности, но просто nginx запускался под 'nobody.nobody'. – tftd

19

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

proxy_max_temp_file_size 0;

Хотя не исправление и не годится для использования в производстве это было хорошо для меня, так как я только с помощью Nginx в качестве части локальная разработка.

0

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

"/ хранение" + имя_файла + ".csv"

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

"./storage" + fileName + ".CSV»

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

1

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

location/{ 
    proxy_temp_path /data/tmp; 
} 
+0

Изменение разрешений на 777 небезопасно, и вы не должны делать это на любом сервере, который открыт для Интернета! – amit

1

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

proxy_buffering off; 
0

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

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

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

Смежные вопросы