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/"
プレッシャーの下で、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のみを使用しているので、修正ではなく、本番使用には適していませんが、これは私にとっては問題ありませんでした。
net::ERR_CONTENT_LENGTH_MISMATCH
エラーを修正したのは、nginx構成に次の行を追加することだけです。
proxy_buffering off;
私にとっての救済策は次の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;
**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/**
うまくいくことを願って
私たちにとって、サーバーのかなり小さなルート(つまり、/)がいっぱいだったことが判明しました。
/ homeのユーザーからのログとファイルの山がありました。そのすべてを他のマウントされたドライブに移動することで問題は解決しました。
これは問題の別の原因になる可能性があるため、共有したいだけです。
私のために働いたのは、proxy_temp_pathを読み取り/書き込み権限を持つフォルダーに変更することでした(777)
location / {
proxy_temp_path /data/tmp;
}
前述の解決策を試しても、問題は解決しませんでした。その場所に書き込む許可も変更しましたが、うまくいきませんでした。それから私はそこで何か間違ったことをしたことに気づきました。ファイルを保存する場所には、次のようなものがありました
"/ storage" + fileName + ".csv"
。私はWindows環境でテストを行っていましたが、うまく機能していました。しかし、後でアプリケーションをLinux環境に移動すると、機能しなくなりました。それで後で変更しなければなりませんでした
"./storage" + fileName + ".csv"
そして正常に動作し始めました。
私にとっての解決策は:
Sudo chown -R nginx:nginx /var/cache/nginx/fastcgi_temp/