📢 Webサイト閉鎖と移転のお知らせ
このWebサイトは2026年9月に閉鎖いたします。
新しい記事は移転先で追加しております。(旧サイトでは記事を追加しておりません)

676行目: 676行目:


== NginXのその他の設定 ==
== NginXのその他の設定 ==
* tcp_nodelay
==== tcp_nodelay ====
*: 値 : on / off
値 : on / off<br>
*: 使用環境 : http, server.location
初期値 : on<br>
*: 小さなパケットを大きなパケットに合成して、帯域幅の利用率を向上させる。(nagleアルゴリズム)
使用環境 : http, server.location<br>
*: TCPプロトコルでは、<u>アプリケーション層のデータが非常に少なく(1バイト程度)、かつ、トランスポート層のオーバーヘッドが40バイト(IPヘッダ20バイト + TCPヘッダ20バイト)にもなる現象</u>がある。
<br>
*: この場合、送信データの多くは制御パケットであるため、帯域消費量が増加して、帯域利用率が悪くなる。(ネットワークに輻輳が発生しやすくなる)
小さなパケットを大きなパケットに合成して、帯域幅の利用率を向上させる。(nagleアルゴリズム)<br>
*: <br>
TCPプロトコルでは、<u>アプリケーション層のデータが非常に少なく(1バイト程度)、かつ、トランスポート層のオーバーヘッドが40バイト(IPヘッダ20バイト + TCPヘッダ20バイト)にもなる現象</u>がある。<br>
*: この問題を解決するため、新規に生成されたパケットは送信データが確認されるまで、あるいは、相手側からの確認応答があるまで、
この場合、送信データの多くは制御パケットであるため、帯域消費量が増加して、帯域利用率が悪くなる。(ネットワークに輻輳が発生しやすくなる)<br>
*: 1MSSに切り上げる、または、確認応答があるまで待った後にタイムアウトまで送信する。
<br>
*: ネットワークの輻輳を避けるため、TCPスタックは0.2秒(Unixの実装の値)までデータを待つメカニズムを実装しており、小さすぎるパケットを送信することはない。
この問題を解決するため、新規に生成されたパケットは送信データが確認されるまで、あるいは、相手側からの確認応答があるまで、<br>
*: <br>
1MSSに切り上げる、または、確認応答があるまで待った後にタイムアウトまで送信する。<br>
*: <code>例えば、あるソフトウェアが小さなデータの送信を要求してきたとする。</code>
ネットワークの輻輳を避けるため、TCPスタックは0.2秒(Unixの実装の値)までデータを待つメカニズムを実装しており、小さすぎるパケットを送信することはない。<br>
*: <code>すぐに送信する、または、データが生成されるのを待って再度送信するかを選択することができるとする。</code>
<br>
*: <code>もし、データをすぐに送ることができれば、インタラクティブでクライアントサーバタイプのソフトウェアは大きなメリットを得ることができる。</code>
例えば、あるソフトウェアが小さなデータの送信を要求してきたとする。
*: <code>また、リクエストを即座に送信すれば、レスポンスも速くなる。</code>
すぐに送信する、または、データが生成されるのを待って再度送信するかを選択することができるとする。
*: <br>
もし、データをすぐに送ることができれば、インタラクティブでクライアントサーバタイプのソフトウェアは大きなメリットを得ることができる。
*: ただし、ネットワーク上でデータをストリーミングする必要がある場合、逆効果になる可能性がある。
また、リクエストを即座に送信すれば、レスポンスも速くなる。
*: ファイル転送を行う場合、転送するごとにクライアント側で0.2秒の遅延を発生させるからである。
<br>
*: <br>
ただし、ネットワーク上でデータをストリーミングする必要がある場合、逆効果になる可能性がある。<br>
*: <u>tcp_nopushはデフォルトで有効になっている。</u>
ファイル転送を行う場合、転送するごとにクライアント側で0.2秒の遅延を発生させるからである。<br>
*: <br>
<br>
* tcp_nopush
==== tcp_nopush ====
*: 値 : on / off
値 : on / off<br>
*: 使用環境 : http, server.location
初期値 : off<br>
*: TCP/IPにおける転送の標準であるtcp_corkの設定である。(tcp_nodelayとは逆の働きをする)
使用環境 : http, server.location<br>
*: 遅延を最適化する代わりに、1度に送信するデータ量を最適化する。
<br>
*: <br>
TCP/IPにおける転送の標準であるtcp_corkの設定である。(tcp_nodelayとは逆の働きをする)<br>
*: tcp_nopushを有効にする場合、tcp_corkメソッドが呼ばれるようになるため、パケットはすぐに送信されず、パケットが最大になった時に一気に送信される。(ネットワークの輻輳や混雑を解決する)
遅延を最適化する代わりに、1度に送信するデータ量を最適化する。<br>
*: (一般的な意味は、TCP通信において、ソフトウェアがパケットを受信した時、すぐに転送することである)
<br>
*: <br>
tcp_nopushを有効にする場合、tcp_corkメソッドが呼ばれるようになるため、パケットはすぐに送信されず、パケットが最大になった時に一気に送信される。(ネットワークの輻輳や混雑を解決する)<br>
*: <u>tcp_nopushはデフォルトで有効になっている。</u>
(一般的な意味は、TCP通信において、ソフトウェアがパケットを受信した時、すぐに転送することである)<br>
<br>
==== sendfile ====
: on / off<br>
初期値 : off<br>
使用環境 : http, server.location, server.locationのif文<br>
<br>
sendfileが有効になっている場合、NginXはデータ転送を行う時に<code>sendfile</code>関数(システムコール)を呼び出す。<br>
<code>sendfile</code>関数は、Linuxカーネル 2.0以降で導入されたシステムコールである。<br>
<br>
通常のネットワークでのデータ転送に比べて、スイッチの数が少なく、転送するデータのコピー数も少ない。<br>
<br>
<code>sendfile</code>関数は、2つのファイルディスクリプタ間で直接データを渡すため(カーネル内での動作)、カーネルバッファとユーザバッファ間のデータのコピーを回避して、<br>
ゼロコピーと呼ばれるほど効率的な処理を行うことが可能である。<br>
<br><br>
<br><br>