nginx-1.4.1サーバーがあります。
デスクトップとサーバー間の帯域幅をテストしたいです。
サーバーから10Mファイルをダウンロードして、受信速度をテストし、どのくらいの時間がかかるかを計算できます。
また、アップロード速度もテストする必要がありますが、nginxはデフォルトでファイルをアップロードできません。
この構成を使用しようとしています。
location /upload {
client_max_body_size 100M;
return 200 ok;
}
ただし、一部のファイルをサーバーにアップロードしようとすると、要求curl "http://server_name/upload" --data @downloads/smric-6_0_3.tar.gz -i -v -H 'Content-Length: 20490365'
本文を受信する前にnginxの回答が表示されます。
nginxとcurlのみを使用してアップロード速度テストを実装できますか?または、いくつかのプログラミング言語を使用する必要がありますか?
答え1
Perlを使用してこの問題の解決策を見つけました。
http {
....
perl_modules perl;
perl_require upload.pm;
server {
...
location /http {
root /usr/share/nginx/html;
autoindex on;
}
location /ping {
return 200 Ok;
}
location /download {
alias /usr/share/nginx/html/test_file.bin;
}
location /upload {
perl upload::handler;
client_max_body_size 100m;
}
}
}
そしてPerlスクリプト:
package upload;
use nginx;
sub handler {
my $r = shift;
if ($r->request_method ne "POST") {
return DECLINED;
}
if ($r->has_request_body(\&post)) {
return OK;
}
return HTTP_BAD_REQUEST;
}
sub post {
my $r = shift;
$r->send_http_header;
$r->print("Ok\n");
return OK;
}
1;
__END__