レンタルサーバー・自宅サーバー設定・構築のヒント
レンタルサーバー・自宅サーバー設定・構築のヒント - レンタルサーバー・自宅サーバーの設定・構築情報を公開しています。

nginx でKeepAliveを設定してみる

2013年4月12日 2015年11月17日
nginx keepalive

以前に
ApacheのKeepAliveを考える で Apache による KeepAlive について記事を書きました。

今回は、そのNginx版です。

KeepAliveとは、
HTTP の持続的な接続を有効にする機能のことで、

簡単にいうと1つのページ表示要求があった場合、クライアント(ウェブブラウザ)は、HTMLのテキスト情報を受信し、その情報を解析してそのHTMLに貼り付いている画像やCSSファイル、Javaスクリプトファイルなどを HTMLのテキスト情報に指定されたサーバーへ要求を出すことになります。
その要求先は、ほとんどの場合、同じサーバーになることが多いと思います。(一般的に画像ファイルやCSSファイル,Javaスクリプトファイルを別々のサーバーに置いていることは、少ないと思います。)

となると、同じクライアントから再度要求が来ることが多いということですね。つまり、クライアントから最初にページ要求があったら、何度か、再度、要求がくることが考えられるわけで、 その度に、クライアントとサーバーでネットワークの接続を繰り返していると無駄ですね。遅くなりますね。

・・ということで、クライアントから最初にページ要求があったら、しばらく同じクライアントからの要求をサーバー側で待ちましょう・・・というのがKeepAlive機能です。

KeepAliveを使ってみましょう

nginx でKeepAlive関連ディレクティブは、以下のとおりです。下記のディレクティブを設定することでKeepAlive機能を制御します。

  • keepalive_timeout

    HTTP の持続的な接続で次のリクエストが来るまでサーバが待つ時間(秒)を設定します。 keepalive_timeout = 0 の時は、KeepAlive無効となります。(デフォルト : 75 秒)
    (Apache のKeepAliveTimeout に相当します。)


  • keepalive_requests

    keepalive_timeout > 0 の時に有効で、持続的な接続上で許可されるリクエストの数を設定します。(デフォルト : 100)
    (Apache のMaxKeepAliveRequests に相当します。)


Apacheでは、KeepAlive ディレクティブにて On/Off を切り替えていましたが、 nginxでは、KeepAliveのOn/Offは、keepalive_timeout = 0 でOffへ設定するようになっています。

デフォルトの設定は、以下のようになっています。

keepalive_requests 100;
keepalive_timeout 75;

上記の設定を簡単に解説すると

クライアントから要求がきたら、同じクライアントからの再要求を75秒待ちます。また、同じクライアントからの要求が100件を超えたら、待つのを止めます。(KeepAlive中の同じ接続で、100件までの要求を処理するということになります。)

一般的な設定で、1ページの必要なリンク先(画像やCSSなど)が、概ね100個を超えないということと、遅くとも75秒以内には、再要求がくるだろう・・・という前提条件のもとの設定です。
Apacheのデフォルト値では、15秒の設定だったので、nginx側のデフォルト値は ちょっと長い気もしますね。

KeepAlive機能を使うときの注意点
もちろん、良いことばかりではありません。特にページビューが激しいサイトや使えるリソースが少ないレンタルサーバーには、気をつけなければなりません。

上記の設定でいうと、最長で75秒間は、待ってしまうわけです。(このデフォルト値は、ちょっと長いかなと思います。)

これは、その待ち時間の間は他の処理をしないプロセス(スレッド)がある・・・ということでもあります。

潤沢なリソースがあれば別ですが、一般的には、来るかどうかわからない要求を待つことが、本当にメリットがあるか検討する必要があります。
結局、この待ちの間は、使えるプロセス(あるいはスレッド)が1つ減ることに違いがないわけですから、待っている間に、他の要求が来れば、プロセス(あるいはスレッド)が不足することもあり得ます。

KeepAliveは、諸刃の剣で、
待っている時間が短くて再要求が来る場合には、それなりに有効です。
逆に、待っている時間が長く再要求が来ない場合には、それなりにリソースが無駄に使用されるということです。

そこで、個人的には、KeepAliveをOffにしてしまうか、以下のようなギリギリの設定しています。

keepalive_requests 100;
keepalive_timeout 5;

keepalive_timeoutは、国内のみをターゲットにした場合、せいぜい連続的に要求が来るなら 5秒から10秒で十分だと思います。
keepalive_requests は、サイト1ページを表示するために必要なファイル数に相当しますから、各サイトに依存します。 HTMLのページ1に対して、画像が40個、CSSが3個、Javaが3個 程度なら、概ね 50 個の要求で事足りることになります。ある程度余裕をもって、ここでは100を設定しています。
参考までに、このサイトでも、100ぐらいの要求数になります。見た目的には、それほど使っていないように見えますが、結構、小さな画像が多く、要求数も普通のサイト並になっています。


KeepAliveを使った時のヘッダ情報(おまけ)

KeepAliveを使った時は、HTTPのヘッダ情報に変化があります。
以下は、Wordpressのページと読み込んだ時の それぞれのnginxから送られてきたHTTPのヘッダ情報、リクエスト毎の経過時間です。

  • KeepAlive あり

    nginxから送られてきたHTTPのヘッダ情報

    HTTP/1.1 200 OK
    Server	nginx/1.8.0
    Date	Tue, 17 Nov 2015 06:35:29 GMT
    Content-Type	text/html
    Last-Modified	Fri, 21 Jun 2013 11:02:08 GMT
    Transfer-Encoding	chunked
    Connection	keep-alive
    Vary	Accept-Encoding
    Etag	W/"51c432b0-b33"
    Content-Encoding	gzip

    1ページを表示するために要求(リクエスト)したURLとその経過時間

    時間         経過   送信 受信 メソッド ステータス タイプ          URL 
    ------------+-------+---+---+---------+---+----------------------+-----------------------------------------
    00:02:49.775 0.071   306 223       GET 200 text/html              http://www.example.com.com/index.html
    00:02:49.957 0.110   302 223       GET 200 text/css               http://www.example.com.com/style.css
    00:02:49.989 0.087   297 223       GET 200 application/javascript http://www.example.com.com/jquery-1.4.3.min.js
    00:02:50.021 0.103   288 223       GET 200 application/javascript http://www.example.com.com/get_url.js
    00:02:50.219 *       319 365       GET 200 image/png              http://www.example.com.com/external.png

  • KeepAlive なし

    nginxから送られてきたHTTPのヘッダ情報

    HTTP/1.1 200 OK
    Server	nginx/1.8.0
    Date	Tue, 17 Nov 2015 06:46:58 GMT
    Content-Type	text/html
    Last-Modified	Fri, 21 Jun 2013 11:02:08 GMT
    Transfer-Encoding	chunked
    Connection	close
    Vary	Accept-Encoding
    Etag	W/"51c432b0-b33"
    Content-Encoding	gzip

    1ページを表示するために要求(リクエスト)したURLとその経過時間

    時間         経過   送信 受信 メソッド ステータス タイプ          URL 
    ------------+-------+---+---+---------+---+----------------------+-----------------------------------------
    00:14:19.030 0.115   306 223       GET 200 text/html              http://www.example.com.com/index.html
    00:14:19.271 0.160   302 223       GET 200 text/css               http://www.example.com.com/style.css
    00:14:19.308 0.129   297 223       GET 200 application/javascript http://www.example.com.com/jquery-1.4.3.min.js
    00:14:19.341 0.093   288 223       GET 200 application/javascript http://www.example.com.com/get_url.js
    00:14:19.548 *       319 365       GET 200 image/png              http://www.example.com.com/external.png

上記は、無負荷状態でテスト環境でもあったので、それほどの差異がなかったようです。
経過時間の和は、
KeepAlive あり = 0.371
KeepAlive なし = 0.497
で多少の差があります。負荷が高ければ、もっと差が出たと思いますし、 上記はサンプルページで javaスクリプト x 2, css x 1, png x 1 とHTML以外に 4 ファイルだけでしたので、差も微妙な差となっています。 一般的なページであれば1ページあたり画像ファイル5、CSSファイル1、Javaスクリプトファイル2程度はありますから、もっと差は出てくるかなぁと思います。
ここから、自分のページがどれくらいか、ある程度、想像できるかもしれませんね。
また、最近では、事細かに要求をロギングしてくれるものがブラウザの機能、あるいはプラグイン(上記は、 FireFox + HttpFox で情報採取しました)で提供されていますので、それを使って正確な要求数を確認されると良いでしょう。


先にも記述しましたが、KeepAlive は、諸刃の刃で、しかも、それほど劇的な表示速度の改善が望めるというものでもありません。
KeepAlive をOffにしておいても、再接続でページの表示はできます。再接続にかかる時間は、せいぜい 100 – 200 ms 程度です。
ただ、負荷が高い時は、再接続できない可能性もあり、それなりの表示速度が期待できるという面も無きにしも非ずです。(必ず期待できるということではありませんが、期待はできます)

特に、nginxのデフォルト値(75秒)は、ちょっと長すぎるので、動画サイトなどの特別なサイトを除き、再設定することをおすすめします。
ご利用のブラウザは、広告ブロック(AdBlockなど) が適用となっていませんか?
このサイトでは、コンテンツの一部が非表示、あるいは、コメント、お問い合わせの投稿ができない検索ができないことがあります。


関連記事 :

Nginx でgzipを使うには

ここまでで、以下のようにapache からnginx への移行するための環境設定について解説してきました。 Nginx でリダイレクト ...

Nginxのproxyでキャッシュを削除する方法

前回「Nginx をリバースプロキシ(キャッシュ) として使ってみた」では、 nginxをリバースプロキシサーバーとして使ってみま ...

Nginx + php-fpm をさくらのVPSで使ってみた

ここまで、細かいnginx , php-fpmの関するセッティングについて、簡単に解説してきました。 Nginxの最新版ソ ...

ApacheのKeepAliveを考える

以前に「Apacheの同時アクセスを制限(mod_limitipconn)する」という記事を書きました。 Apacheでは、KeepA ...

HTMLからXHTML1.0 or XHTML1.1への移行するためのポイント(相違点)

最近、Amazonや楽天の動向が注目されるように電子ブックの普及へ向かっていくことは必然の流れですね。 この流れから、HTMLからXHTMLへ ...


2 件 コメントがあります。 コメントを投稿する
  1. 鉄ちゃん
    2015年10月12日, 7:26 PM

    KeepAliveを使った時のヘッダ情報の KeepAlive の有り無しが逆では?

  2. 管理人
    2015年11月17日, 4:14 PM

    鉄ちゃん さん

    コメントありがとうございます、管理人です。
    おっしゃるとおり間違っていましたので、経過時間も含めて、再確認し記事の更新をしました。
    ありがとうございました。


コメントを投稿 :

お名前 *

メールアドレス *
( メールアドレスが公開されることはありません。)

サイトアドレス

コメント *

* 印の項目は、入力が必要な項目です。




最近投稿の記事

[ 画像提供元 : Amazon ] 先日、1TBのディスクの入れ替え時にバックアップをとろうとディスクコピーを行いました。 その際 ...

Windows で Linux ファイルシステム Ext4 のディスクをマウントするには? Ext3Fsd が、おそらく、最も簡単なツール ...

今回は、Windows で Compass を使ってみました。 Compass とは、 Sass(サス、Syntactica ...

今回は、Anti Adblock を使ってみました。 Anti Adblock とは、 そもそも Adblock という ウェブ ...

デスクトップ環境でない サーバーで、Webページのキャプチャー画像をコマンドで撮る には、wkhtmltoimage, CutyCapt ...


さくらのVPS 全プラン リニューアルです。(石狩(北海道)も選択可)


root権限ありで ¥685 / 月 ~ と非常にリーズナブルな CPU 1(core)の 512 プランから、 最高 CPU 10(core), メモリ 32(GB), SSD容量 800(GB) までとプランが充実。
ディスクは、SSDとHDDの選択が可能になった他、データセンターは人気の東京、石狩(北海道)となりました。

また、どのプランでも好きなOSが選べます
( CentOS, Fedora, Scientific Linux, FreeBSD, Ubutu, Debian )

管理人もおすすめのVPSです。
試用期間がありますから、一度、お試しを!!

詳しくは、http://vps.sakura.ad.jp/さくらのVPSのサイトへ へどうぞ!!

カテゴリ


Serverman@VPS 完全1ヶ月無料 キャンペーン実施中です。


Serverman@VPS 完全1ヶ月無料 キャンペーン実施中です。
最近、スワップにも対応した Serverman@VPS は、かなりリーズナブルかもです。

  • メモリ1GB~2GBのEntryプラン :月額:490円
  • メモリ2MB~4GBのStandardプラン :月額:980円
  • メモリ4GB~8GBのProプラン :月額:1,980円

新規申し込みで1ヶ月間完全無料となるキャンペーンを実施中です。
Serverman@VPSの特徴は、安さとIPv6対応です。また、初期設定費0円もポイントです。

IPv6でちょっと遊んでみたい方には、おすすめかもしれませんね。最低利用期間もありませんから、気に入らないときは即解約もできます。

Serverman@VPSの詳細については、 http://dream.jp/vps/ Serverman@VPSのサイトへへどうぞ。



KVM採用 ConoHa VPSは、時間単位で借りれる便利なVPSです。


ConoHa VPS は、初期設定費0円最低利用期間無し時間単位で清算可能、 さらに、Web APIを使って自動化を図ることもできる便利なVPSです。

海外サーバー設置も可能で、ローカル接続にも対応と、かなり、機能豊富なサーバーです。

新規ユーザ登録で、クーポンもらえますから、まずは、お試しですね。

ConoHa VPSの詳細については、
http://www.conoha.jp/ へどうぞ。

KVM採用 お名前.com VPS(KVM) 2G プラン 初期設定費無料 キャンペーン 実施です。


メモリ2GBプラン CPU:3core、Disk:200GB
月額:1,153円から (初期設定:1,680円0円)

さくらのVPSがリニューアルされてもなんのその。
1GBメモリ / 2Core を ¥834 – の格安価格で提供中です!
間違いなくスペックからすると割安感ありです。
年間割引時の途中解約で返金がないのは、 ちょっと残念ですが、それでもこの割安感は魅力です。

まずは、お試しですね。

お名前.com VPS(KVM)の詳細については、
http://www.onamae-server.com/vps/ へどうぞ。(お試し期間が15日あります。)



  • ソーシャルブックマーク

  • はてなブックマークへ追加するはてな登録数
ページトップへ
Time : 0.2822 [s]