nginx は画像表示の遅さとダウンロードの不完全さの問題を解決します

nginx は画像表示の遅さとダウンロードの不完全さの問題を解決します

前面に書かれた

最近、ある読者から、ブラウザからサーバーにアクセスすると、画像の表示が遅く、ブラウザに完全に読み込むことができないという話を聞きました。ファイルをダウンロードするときも、ファイルを完全にダウンロードできないため、さらにイライラしました。そして不思議なことに、このリーダーが接続されているネットワークには問題がありません。そこで私は彼がさまざまな問題を解決するのを手伝い始めました。 。 。

問題の場所

一連の調査(途中の過程は省略して要点だけ直接書きます!)を経て、最終的に問題は Nginx にあることが判明しました。読者のウェブサイトのバックエンド管理システムを開くと、画像の表示が非常に遅く、Nginx フロントエンド プロキシに次のエラー メッセージが表示されていることがわかりました。

[エラー] 28423#0: アップストリームへの接続中に *5 connect() が失敗しました (111: 接続が拒否されました)

バックエンドサーバーの IP アドレスを使用してサービスに直接アクセスしたところ、速度がかなり速かったため、Nginx の設定に問題があるのではないかと疑いました。

注意: 大きな添付ファイルやページ上の大きな画像をダウンロードする場合、ダウンロードが中断されたり、画像が表示できなくなったりします。Nginx のデフォルト設定では、このような問題は一度も発生したことがないと言う人もいるかもしれません。私が言いたいのは、それはあなたのウェブサイトに大きなファイルがなく、少なくとも Nginx のデフォルト設定を使用して読み込むほどの大きさではないからです。

ここでは、以下に示すように、Nginx 構成のセクションを示します。

場所 / ファイル {
	 ルート /home/file;
	 インデックス index.html index.htm;
	 proxy_set_header X-Real-IP $remote_addr;
	 proxy_set_header ホスト $host;
	 プロキシパス http://127.0.0.1:8080 ;
	 クライアントの最大ボディサイズは100mです。
	 クライアントボディバッファサイズ 128k;
	 プロキシ接続タイムアウト 600;
	 プロキシ読み取りタイムアウト 600;
	 プロキシ送信タイムアウト 600;
	 プロキシバッファサイズ 32k;
	 プロキシバッファ 4 64k;
	 proxy_busy_buffers_size 64k;
	 proxy_temp_file_write_size 64k;
}

以下にいくつかの重要なパラメータを示します。

  • proxy_connect_timeout 600; #バックエンド サーバーとの Nginx 接続タイムアウト (プロキシ接続タイムアウト)
  • proxy_read_timeout 600; #接続が成功した後のバックエンドサーバーの応答時間(プロキシ受信タイムアウト)
  • proxy_send_timeout 600; #バックエンドサーバーのデータ返信時間(プロキシ送信タイムアウト)
  • proxy_buffer_size 32k; #ユーザーヘッダー情報を保存するためのプロキシサーバー(nginx)のバッファサイズを設定します
  • proxy_buffers 4 32k; #proxy_buffers バッファ、平均ウェブページサイズが32k以下の場合は、このように設定します
  • proxy_busy_buffers_size 64k; #高負荷時のバッファサイズ (proxy_buffers*2)
  • proxy_temp_file_write_size 16k; #キャッシュフォルダのサイズを設定します。この値より大きい場合、ファイルはアップストリームサーバーから転送されます。

これを見て、問題が分かりました。この読者の Nginx には次の設定行があります。

proxy_temp_file_write_size 16k;

彼のサーバーにある画像は基本的に 100K から 5M の間です。

問題は proxy_temp_file_write_size にあります。サーバー上のファイルがこのパラメータで設定されたサイズを超えると、Nginx はまずファイルを一時ディレクトリ (デフォルトは Nginx インストール ディレクトリの下の /proxy_temp ディレクトリ) に書き込みます。デフォルトでは、Nginx は nobody として起動されます。ls -al コマンドを使用して proxy_temp ディレクトリを表示すると、nobody が proxy_temp ディレクトリの所有者になっています。権限がないのは不思議です。次に、Nginx のインストール ディレクトリである proxy_temp の親ディレクトリを確認します。誰も権限を持っていないことがわかったので、上記の問題が発生したのは不思議ではありません。

問題を解決する

問題が特定されれば、解決しやすくなります。この問題を解決するには、以下に示すように 2 つの方法があります。

  • 誰でも書き込みできるように proxy_temp ディレクトリを設定し、Nginx を再起動すると問題が解決します。
  • proxy_temp_file_write_size の値をイメージとファイルのサイズよりも大きい値に直接変更し、Nginx を再起動します。

最初の方法で問題が解決した場合、たとえば、proxy_temp ディレクトリが /usr/local/nginx/proxy_temp の場合、次のコマンドを使用して、/usr/local/nginx/proxy_temp ディレクトリを誰でも書き込み可能に設定すれば、問題は解決します。

chmod -R 777 /usr/local/nginx/proxy_temp/

2 番目の方法を使用して問題を解決する場合は、次に示すように nginx.conf ファイルを直接変更できます。

場所 / ファイル {
	 ルート /home/file;
	 インデックス index.html index.htm;
	 proxy_set_header X-Real-IP $remote_addr;
	 proxy_set_header ホスト $host;
	 プロキシパス http://127.0.0.1:8080 ;
	 クライアントの最大ボディサイズは100mです。
	 クライアントボディバッファサイズ 256k;
	 プロキシ接続タイムアウト 1200;
	 プロキシ読み取りタイムアウト 1200;
	 プロキシ送信タイムアウト 6000;
	 プロキシバッファサイズ 32k;
	 プロキシバッファ 4 64k;
	 proxy_busy_buffers_size 128k;
	 proxy_temp_file_write_size 10m;
}

もちろん、私はこの読者が他のいくつかの構成項目を最適化するのにも協力しました。

さて、今日はここまでにしましょう!より多くの人が見て、一緒に学び、向上できるように、「いいね!」、フォロー、転送することを忘れないでください。 !

上記は、nginx が画像表示の遅さとダウンロードの不完全さの問題を解決する方法の詳細です。nginx が画像表示の遅さとダウンロードの不完全さの問題を解決する方法の詳細については、123WORDPRESS.COM の他の関連記事に注目してください。

以下もご興味があるかもしれません:
  • Nginx+FastDFSでイメージサーバーを構築
  • Docker で Nginx イメージ サーバーを構築する方法
  • Nginx プロキシを使用して拡大縮小された画像を出力する方法
  • CentOS サーバーで nginx イメージ ホットリンク保護を設定する方法
  • 画像パスにアクセスして HTML 静的ページを取得するように nginx を構成する方法
  • Linux環境でnginxを使ってシンプルな画像サーバーを構築する
  • Nginx イメージホットリンク保護設定例

<<:  シンプルなショッピングカートの最も完全なコード分析を実装する JavaScript (ES6 オブジェクト指向)

>>:  MySQLがウィンドウ関数で合計関数を実行するときに発生する可能性のあるバグ

推薦する

Nginx を使用して IP アドレスが悪意を持って解決されるのを防ぐ方法

Nginxを使用する目的Alibaba Cloud ECS クラウド サーバーを使用して、まずは著者...

JavaScript配列の重複排除のいくつかの方法についての詳細な説明

目次1.重複排除を設定する2. 重複を削除するには、2 回の for ループを使用します。 3. i...

Windows Server 2019 で NAS を構成する方法

序文このチュートリアルでは最新バージョンをインストールします。 NAS は非常に安定して動作するので...

qt.qpa.plugin の問題を解決: Ubuntu 18.04 の Qt で Qt プラットフォーム プラグイン「xcb」をロードできませんでした

問題の説明Qt5.15.0 をインストールした後、テスト ケースを実行するとエラーが表示されます。 ...

HTML_PowerNode 入門 Java アカデミー

HTMLとは何ですか? HTML は Web ページを記述するために使用される言語です。 HTML ...

この記事ではCSSの組み合わせセレクターの使い方を説明します

CSS 組み合わせセレクターには、単純なセレクターのさまざまな組み合わせが含まれます。 CSS3 に...

MySQL コマンドを使用してインデックスを作成、削除、およびクエリする方法の紹介

MySQL データベース テーブルでは、インデックスを作成、表示、再構築、削除できるため、クエリ速度...

CentOS 7.4 64 ビット版に MySQL 8.0 をインストールして設定するための詳細な手順

ステップ1: MySQL YUMソースを取得するMySQLの公式サイトにアクセスして、RPMパッケー...

Mybatis mysqlの削除操作では、最初のデータメソッドのみを削除できます。

バグ図のように、削除文とパラメータをデータベースにコピーして実行し、2つのデータを削除しようとしたの...

HTMLコードテキストボックスの制限入力テキストボックスが灰色になり、制限テキストボックスの入力

方法 1: readonly 属性を true に設定します。入力値=読み取り専用 readOnly...

JavaScript の for ループと二重 for ループの詳細な説明

forループfor ループは配列の要素をループします。文法: for (初期化変数; 条件式; 繰り...

vue-video-player でのブレークポイント再開の実装

最近のプロジェクトでは、ブレークポイントからビデオの再生を再開する機能を実装する必要がありました。こ...

MySQL データベースの文字化け問題の原因と解決策

序文データベースのデータを表示すると、文字化けした文字が表示されることがあります。実際、どのようなデ...

VirtualBox を使用して Mac 上にローカル仮想マシン環境を構築する方法

1. ビッグデータとHadoopビッグデータについて研究し学ぶには、当然 Hadoop から始める必...

Vueの監視プロパティの詳細な説明

目次Vue モニターのプロパティリスナープロパティとは何ですか?リスニングプロパティと計算プロパティ...