ホームページ 運用・保守 Nginx Nginx 静的ファイル サービスを構成および最適化する方法

Nginx 静的ファイル サービスを構成および最適化する方法

May 13, 2023 am 09:04 AM
nginx

ルート ディレクトリとインデックス ファイル

ルート ディレクティブは、ファイルの検索に使用されるルート ディレクトリを指定します。要求されたファイルへのパスを取得するために、nginx は root ディレクティブで指定されたパスに要求 URI を追加します。このディレクティブは、 http {} 、server {} または location {} コンテキスト内の任意のレベルに配置できます。次の例では、仮想サーバーに対して root ディレクティブが定義されています。これは、ルート ディレクティブを含まないすべての location {} ブロックで動作し、ルートを明示的に再定義します。 / ディレクトリ内の対応するファイル。 URI が .mp3 または .mp4 拡張子で終わる場合、そのファイルは一致するロケーション ブロックで定義されているため、nginx は /www/media/ ディレクトリでファイルを検索します。

リクエストが / で終わる場合、nginx はそれをディレクトリへのリクエストとして扱い、ディレクトリ内のインデックス ファイルを検索しようとします。 Index ディレクティブは、インデックス ファイルの名前を定義します (デフォルトは、index.html)。例を続けると、リクエスト URI が /images/some/path/ の場合、nginx はファイル /www/data/images/some/path/index.html (存在する場合) を返します。そうでない場合、nginx はデフォルトで http 404 エラー (見つからない) を返します。自動的に生成されたディレクトリ リストを返すように nginx を設定するには、autoindex ディレクティブに on パラメータを含めます。

server {
  root /www/data;

  location / {
  }

  location /images/ {
  }

  location ~ \.(mp3|mp4) {
    root /www/media;
  }
}
ログイン後にコピー

index ディレクティブには複数のファイル名をリストできます。 nginx は指定された順序でファイルを検索し、最初に見つかったファイルを返します。

location /images/ {
  autoindex on;
}
ログイン後にコピー

ここで使用される $geo 変数は、geo ディレクティブを通じて設定されたカスタム変数です。変数の値はクライアントの IP アドレスによって異なります。

インデックス ファイルを返すために、nginx はそのファイルが存在するかどうかを確認し、ベース URI にインデックス ファイルの名前を追加することによって取得された新しい URI への内部リダイレクトを実行します。次の例に示すように、内部リダイレクトによって場所が新たに検索され、別の場所に到達する可能性があります。

location / {
  index index.$geo.html index.htm index.html;
}
ログイン後にコピー

ここでは、リクエストの URI が /path/ および /data/path/index の場合です。 .html は存在しないが、/data/path/index.php は存在する場合、/path/index.php への内部リダイレクトは 2 番目の場所にマップされます。その結果、リクエストはプロキシ処理されます。

いくつかのオプションを試してください


try_files ディレクティブを使用して、指定されたファイルまたはディレクトリが存在するかどうかを確認できます。nginx は内部でリダイレクトし、存在しない場合は戻ります。指定されたステータスコード。たとえば、リクエスト URI に対応するファイルが存在するかどうかを確認するには、次のように try_files ディレクティブと $uri 変数を使用します。

location / {
  root /data;
  index index.html index.php;
}

location ~ \.php {
  fastcgi_pass localhost:8000;
  #...

}
ログイン後にコピー

ファイルは、現在の場所のコンテキストを使用して URI として指定されます。仮想サーバーに設定されたルートまたはエイリアス ディレクティブが処理されます。この場合、元の URI に対応するファイルが存在しない場合、nginx は最後のパラメータで指定された URI に内部的にリダイレクトし、 /www/data/images/default.gif を返します。

最後のパラメータは、ステータス コード (直接等号で始まる) または場所名にすることもできます。次の例では、try_files ディレクティブの引数がいずれも既存のファイルまたはディレクトリに解決されない場合、404 エラーが返されます。

server {
  root /www/data;

  location /images/ {
    try_files $uri /images/default.gif;
  }
}
ログイン後にコピー

次の例では、元の URI も末尾にスラッシュが追加された URI も既存のファイルまたはディレクトリに解決されない場合、リクエストは指定された場所にリダイレクトされ、プロキシ サーバーに渡されます。

location / {
  try_files $uri $uri/ $uri.html =404;
}
ログイン後にコピー

提供されるコンテンツのパフォーマンスを最適化する


読み込み速度は、コンテンツを提供する際の重要な要素です。 nginx 構成を少し最適化すると、生産性が向上し、最適なパフォーマンスを達成できるようになります。

sendfile を有効にする

デフォルトでは、nginx はファイル転送自体を処理し、送信前にファイルをバッファにコピーします。 sendfile ディレクティブを有効にすると、データをバッファにコピーする手順が不要になり、あるファイル記述子から別のファイル記述子にデータを直接コピーできるようになります。あるいは、高速接続がワーカー プロセスを完全に占有することを防ぐために、sendfile_max_chunk ディレクティブを使用して、1 回の sendfile() 呼び出しで転送されるデータ量 (この場合は 1 MB) を制限できます。 ##enable tcp_nopush

tcp_nopush ディレクティブを sendfile on; ディレクティブと一緒に使用します。これにより、nginx は、sendfile() がデータのチャンクを取得した直後にパケットで http 応答ヘッダーを送信できるようになります。

location / {
  try_files $uri $uri/ @backend;
}

location @backend {
  proxy_pass http://backend.example.com;
}
ログイン後にコピー
tcp_nolay を有効にする

tcp_nolay ディレクティブを使用すると、元々低速ネットワークにおける小さなパケットの問題を解決するために設計された nagle のアルゴリズムをオーバーライドできます。このアルゴリズムは、多数の小さなパケットを 1 つの大きなパケットに結合し、200 ミリ秒の遅延でパケットを送信します。現在、大きな静的ファイルを提供する場合、パケット サイズに関係なく、データを即座に送信できます。遅延はオンライン アプリケーション (SSH、オンライン ゲーム、オンライン トランザクションなど) にも影響します。デフォルトでは、tcp_nolay ディレクティブは on に設定されています。これは、nagle のアルゴリズムが無効になっていることを意味します。このディレクティブはキープアライブ接続にのみ使用されます:

location /mp3 {
  sendfile      on;
  sendfile_max_chunk 1m;
  #...

}
ログイン後にコピー
バックログ キューの最適化

其中一个重要因素是 nginx 可以多快地处理传入连接。一般规则是在建立连接时,将其放入侦听套接字的 "listen" (监听)队列中。在正常负载下,队列很小或根本没有队列。但是在高负载下,队列会急剧增长,导致性能不均匀,连接中断,延迟增加。

显示积压队列使用命令 netstat -lan 来显示当前监听队列。输出可能如下所示,它显示在端口 80上的监听队列中,有 10 个未接受的连接,这些连接针对配置的最多 128 个排队连接。这种情况很正常。

current listen queue sizes (qlen/incqlen/maxqlen)
listen     local address     
0/0/128    *.12345      
10/0/128    *.80    
0/0/128    *.8080
ログイン後にコピー

相反,在以下命令中,未接受的连接数(192)超过了 128 的限制。当网站流量很大时,这种情况很常见。要获得最佳性能,需要在操作系统和 nginx 配置中增加可以排队等待 nginx 接受的最大连接数。

current listen queue sizes (qlen/incqlen/maxqlen)
listen     local address     
0/0/128    *.12345      
192/0/128    *.80    
0/0/128    *.8080
ログイン後にコピー

调整操作系统

将 net.core.somaxconn 内核参数的值从其默认值(128)增加到足以容纳大量流量的值。在这个例子中,它增加到 4096。

  • freebsd 的命令为 sudo sysctl kern.ipc.somaxconn=4096

  • linux 的命令为 1. sudo sysctl -w net.core.somaxconn=4096 2. 将 net.core.somaxconn = 4096 加入到 /etc/sysctl.conf 文件中。

调整 nginx

如果将 somaxconn 内核参数设置为大于 512 的值,请将 backlog 参数增加在 nginx listen 指令以匹配修改:

server {
  listen 80 backlog=4096;
  # ...

}
ログイン後にコピー

以上がNginx 静的ファイル サービスを構成および最適化する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

Tomcat サーバーへの外部ネットワーク アクセスを許可する方法 Tomcat サーバーへの外部ネットワーク アクセスを許可する方法 Apr 21, 2024 am 07:22 AM

Tomcat サーバーが外部ネットワークにアクセスできるようにするには、以下を行う必要があります。 外部接続を許可するように Tomcat 構成ファイルを変更します。 Tomcat サーバー ポートへのアクセスを許可するファイアウォール ルールを追加します。 Tomcat サーバーのパブリック IP を指すドメイン名を指す DNS レコードを作成します。オプション: リバース プロキシを使用して、セキュリティとパフォーマンスを向上させます。オプション: セキュリティを強化するために HTTPS を設定します。

thinkphpの実行方法 thinkphpの実行方法 Apr 09, 2024 pm 05:39 PM

ThinkPHP フレームワークをローカルで実行する手順: ThinkPHP フレームワークをローカル ディレクトリにダウンロードして解凍します。 ThinkPHP ルート ディレクトリを指す仮想ホスト (オプション) を作成します。データベース接続パラメータを構成します。 Webサーバーを起動します。 ThinkPHP アプリケーションを初期化します。 ThinkPHP アプリケーションの URL にアクセスして実行します。

nginx へようこそ!それを解決するにはどうすればよいですか? nginx へようこそ!それを解決するにはどうすればよいですか? Apr 17, 2024 am 05:12 AM

「nginx へようこそ!」エラーを解決するには、仮想ホスト構成を確認し、仮想ホストを有効にし、Nginx をリロードする必要があります。仮想ホスト構成ファイルが見つからない場合は、デフォルト ページを作成して Nginx をリロードすると、エラー メッセージが表示されます。が消え、ウェブサイトは通常のショーになります。

HTMLファイルからURLを生成する方法 HTMLファイルからURLを生成する方法 Apr 21, 2024 pm 12:57 PM

HTML ファイルを URL に変換するには Web サーバーが必要です。これには次の手順が含まれます。 Web サーバーを取得します。 Webサーバーをセットアップします。 HTMLファイルをアップロードします。ドメイン名を作成します。リクエストをルーティングします。

Nodejsプロジェクトをサーバーにデプロイする方法 Nodejsプロジェクトをサーバーにデプロイする方法 Apr 21, 2024 am 04:40 AM

Node.js プロジェクトのサーバー デプロイメント手順: デプロイメント環境を準備します。サーバー アクセスの取得、Node.js のインストール、Git リポジトリのセットアップ。アプリケーションをビルドする: npm run build を使用して、デプロイ可能なコードと依存関係を生成します。コードをサーバーにアップロードします: Git またはファイル転送プロトコル経由。依存関係をインストールする: サーバーに SSH で接続し、npm install を使用してアプリケーションの依存関係をインストールします。アプリケーションを開始します。node Index.js などのコマンドを使用してアプリケーションを開始するか、pm2 などのプロセス マネージャーを使用します。リバース プロキシの構成 (オプション): Nginx や Apache などのリバース プロキシを使用して、トラフィックをアプリケーションにルーティングします。

外部からnodejsにアクセスできますか? 外部からnodejsにアクセスできますか? Apr 21, 2024 am 04:43 AM

はい、Node.js には外部からアクセスできます。次の方法を使用できます。 Cloud Functions を使用して関数をデプロイし、一般にアクセスできるようにします。 Express フレームワークを使用してルートを作成し、エンドポイントを定義します。 Nginx を使用して、Node.js アプリケーションへのリバース プロキシ リクエストを実行します。 Docker コンテナを使用して Node.js アプリケーションを実行し、ポート マッピングを通じて公開します。

PHP を使用して Web サイトを展開および維持する方法 PHP を使用して Web サイトを展開および維持する方法 May 03, 2024 am 08:54 AM

PHP Web サイトを正常に展開して維持するには、次の手順を実行する必要があります。 Web サーバー (Apache や Nginx など) を選択する PHP をインストールする データベースを作成して PHP に接続する コードをサーバーにアップロードする ドメイン名と DNS を設定する Web サイトのメンテナンスを監視する手順には、PHP および Web サーバーの更新、Web サイトのバックアップ、エラー ログの監視、コンテンツの更新が含まれます。

Fail2Ban を使用してサーバーをブルート フォース攻撃から保護する方法 Fail2Ban を使用してサーバーをブルート フォース攻撃から保護する方法 Apr 27, 2024 am 08:34 AM

Linux 管理者にとっての重要なタスクは、サーバーを違法な攻撃やアクセスから保護することです。デフォルトでは、Linux システムには、iptables、Uncomplicated Firewall (UFW)、ConfigServerSecurityFirewall (CSF) などの適切に構成されたファイアウォールが付属しており、さまざまな攻撃を防ぐことができます。インターネットに接続されているマシンはすべて、悪意のある攻撃のターゲットになる可能性があります。サーバーへの不正アクセスを軽減するために使用できる Fail2Ban と呼ばれるツールがあります。 Fail2Ban とは何ですか? Fail2Ban[1] は、ブルート フォース攻撃からサーバーを保護する侵入防止ソフトウェアです。 Python プログラミング言語で書かれています

See all articles