web-dev-qa-db-ja.com

nginxのERR_CONTENT_LENGTH_MISMATCHおよび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/;
}

何か案は?

ありがとう

編集:エラーログに詳細情報が見つかりました:

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/"
29
amit

プレッシャーの下で、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

35
amit

上記のすべてを試してみましたが、それでも動作させることができませんでした。 chmod 777に頼った後でも。 解決済み唯一のことは、キャッシュを完全に無効にすることでした:

proxy_max_temp_file_size 0;

私はローカル開発セットアップの一部としてnginxのみを使用しているので、修正ではなく、本番使用​​には適していませんが、これは私にとっては問題ありませんでした。

24
djskinner

net::ERR_CONTENT_LENGTH_MISMATCHエラーを修正したのは、nginx構成に次の行を追加することだけです。

proxy_buffering off;
15
Miguel Mota

私にとっての救済策は次の2つの設定でした。

ファイル内:/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;
10
algenib
**ps aux | grep "nginx: worker process"**

上記のコマンドを実行すると、nginxが実行されているユーザーが表示されます

例えば。

www-data 25356  0.0  0.0  68576  4800 ?        S    12:45   0:00 nginx: worker process

www-data 25357  0.0  0.0  68912  5060 ?        S    12:45   0:00 nginx: worker process

今、あなたは許可を与えるために以下のコマンドを実行する必要があります

**chown -R www-data:www-data /var/lib/nginx/**

うまくいくことを願って

4
Niyaz Ahamad

私たちにとって、サーバーのかなり小さなルート(つまり、/)がいっぱいだったことが判明しました。

/ homeのユーザーからのログとファイルの山がありました。そのすべてを他のマウントされたドライブに移動することで問題は解決しました。

これは問題の別の原因になる可能性があるため、共有したいだけです。

1
AndrewWhalan

私のために働いたのは、proxy_temp_pathを読み取り/書き込み権限を持つフォルダーに変更することでした(777)

location / {
    proxy_temp_path /data/tmp;
}
1
Chanrith

前述の解決策を試しても、問題は解決しませんでした。その場所に書き込む許可も変更しましたが、うまくいきませんでした。それから私はそこで何か間違ったことをしたことに気づきました。ファイルを保存する場所には、次のようなものがありました

"/ storage" + fileName + ".csv"

。私はWindows環境でテストを行っていましたが、うまく機能していました。しかし、後でアプリケーションをLinux環境に移動すると、機能しなくなりました。それで後で変更しなければなりませんでした

"./storage" + fileName + ".csv"

そして正常に動作し始めました。

0
Sandip Subedi

私にとっての解決策は:

Sudo chown -R nginx:nginx /var/cache/nginx/fastcgi_temp/
0
Bert