検索
ホームページバックエンド開発PHPチュートリアル高同時実行時のnginxのより良い設定方法のご紹介(コード解析編)

この記事では、高同時実行時の nginx のより良い設定方法 (コード解析) を紹介します。一定の参考価値があります。必要な友人は参考にしてください。お役に立てれば幸いです。

1. ここでの最適化とは、主に nginx の構成の最適化を指します。一般的に、nginx 構成ファイル内の次の項目は、最適化により効果的です:

nginx プロセスの数、提案CPU の数に応じて指定されます。通常、CPU コアの数と同じかその倍数になります。

worker_processes 8;

各プロセスにCPUを割り当てる 上記の例では8つのプロセスを8つのCPUに割り当てていますが、もちろん複数書いたり、1つのプロセスを複数のCPUに割り当てることも可能です。

worker_cpu_affinity 00000001 00000010 00000100 00001000 00010000 00100000 01000000 10000000;

次のコマンドは、nginx プロセスによって開かれるファイル記述子の最大数を参照します。理論値は、システム内で開かれるファイルの最大数 (ulimit-n) を nginx プロセスの数で割った値である必要があります。 , ただし、nginx はリクエストを割り当てます。それほど均一ではないため、ulimit -n の値と一致させる方が良いでしょう。

worker_rlimit_nofile 65535;

epoll の I/O モデルを使用し、このモデルを使用して非同期イベントを効率的に処理します

use epoll;

プロセスごとに許可される接続の最大数理論的には、nginx サーバーごとの最大接続数は worker_processes です*worker_connections。

worker_connections 65535;

http 接続タイムアウト、デフォルトは 60 秒です。この機能は、クライアントからサーバーへの接続を設定時間内に有効にし続けることです。サーバーへの後続のリクエストが発生した場合、この機能は回避します。確立または再確立により接続が確立されます。このパラメータはあまり大きく設定できないことに注意してください。そうしないと、多くの無効な http 接続が nginx 接続の数を占有し、最終的に nginx がクラッシュします。

keepalive_timeout 60;

クライアント リクエスト ヘッダーのバッファ サイズは、システムのページング サイズに応じて設定できます。通常、リクエストのヘッダー サイズは 1k を超えませんが、一般的なシステム ページングは​​ 1k より大きいため、ここではページングサイズに設定されています。ページング サイズは、getconf PAGESIZE コマンドで取得できます。

client_header_buffer_size 4k;

次のパラメータは、開いているファイルのキャッシュを指定します。デフォルトでは有効になっていません。最大値はキャッシュの数を指定します。開いているファイルの数と一致させることをお勧めします。非アクティブとは、どれくらいの期間を指しますかキャッシュが削除されるまで、ファイルはリクエストされていません。

open_file_cache max=102400 inactive=20s;

次は、キャッシュされた有効な情報がチェックされる頻度を示します。

open_file_cache_valid 30s;

open_file_cache ディレクティブの inactive パラメータ内のファイルの最小使用数。この数を超えると、ファイル記述子は常にキャッシュ内で開かれます。上の例のように、ファイルが非アクティブ時間内に一度も使用されなかった場合は削除されます。

open_file_cache_min_uses 1;

応答ヘッダー内のオペレーティング システムと Web サーバー (Nginx) のバージョン番号に関する情報を非表示にします。これはセキュリティに役立ちます。

server_tokens off;

は sendfile() を機能させることができます。 sendfile() は、ディスクと TCP ソケットの間でデータ (または任意の 2 つのファイル記述子) をコピーできます。 Pre-sendfile は、データを送信する前にユーザー空間のデータ バッファーを申請することです。次に、read() を使用してファイルからこのバッファにデータをコピーし、write() を使用してバッファ データをネットワークに書き込みます。 sendfile() は、データをディスクから OS キャッシュに即座に読み取ります。このコピーはカーネル内で行われるため、sendfile() は、read() と write() を組み合わせて破棄バッファのオンとオフを切り替えるよりも効率的です (sendfile について詳しく説明します)。

sendfile on;

すべてのヘッダー ファイルを次々に送信するのではなく、1 つのパケットで送信するように nginx に指示します。つまり、データパケットはすぐに送信されるのではなく、データパケットが最大のときに一度に送信されるため、ネットワークの混雑を解消することができます。

tcp_nopush on;

データをキャッシュせずに少しずつ送信するように nginx に指示します。データを時間内に送信する必要がある場合は、この属性をアプリケーションに設定する必要があります。これにより、小さなデータを送信するときに、情報の場合、戻り値をすぐに取得することはできません。

tcp_nodelay on;

例:

http { 
server_tokens off; 
sendfile on; 
tcp_nopush on; 
tcp_nodelay on; 
......
}

クライアント要求ヘッダーのバッファ サイズ。これはシステム ページング サイズに従って設定できます。通常、要求ヘッダーのサイズは 1k を超えません。ただし、一般的なシステムにより、ページングは​​ 1k より大きくなければならないため、ページング サイズはここで設定されます。

client_header_buffer_size 4k;

クライアント リクエスト ヘッダーのバッファ サイズ。これはシステム ページング サイズに応じて設定できます。通常、リクエスト ヘッダーのサイズは 1k を超えません。ただし、システム ページングは​​通常 1k より大きいため、 1k、ここで設定されます、ページング サイズです。ページング サイズは、getconf PAGESIZE コマンドで取得できます。

[root@test-huanqiu ~]# getconf PAGESIZE 
4096

ただし、client_header_buffer_size が 4k を超える場合もありますが、client_header_buffer_size の値は「システム ページング サイズ」の整数倍に設定する必要があります。

開いているファイルのキャッシュを指定します。これはデフォルトでは有効になっていません。最大値はキャッシュの数を指定します。開いているファイルの数と一致させることをお勧めします。非アクティブとは、ファイルが以前に要求されていない期間を指します。キャッシュが削除されます。

open_file_cache max=65535 inactive=60s;

open_file_cache ディレクティブの非アクティブなパラメータ時間内のファイルの最小使用回数。この数を超えると、ファイル記述子は常にキャッシュ内で開かれます。上の例のように、ファイルが非アクティブ時間内に一度も使用されなかった場合、削除されます。

open_file_cache_min_uses 1;

キャッシュされた有効な情報を確認する頻度を指定します。

open_file_cache_valid 80s;

以下は、使用される単純な nginx 設定ファイルです:

[root@dev-huanqiu ~]# cat /usr/local/nginx/conf/nginx.conf
user   www www;
worker_processes 8;
worker_cpu_affinity 00000001 00000010 00000100 00001000 00010000 00100000 01000000;
error_log   /www/log/nginx_error.log   crit;
pid         /usr/local/nginx/nginx.pid;
worker_rlimit_nofile 65535;
 
events
{
   use epoll;
   worker_connections 65535;
}
 
http
{
   include       mime.types;
   default_type   application/octet-stream;
 
   charset   utf-8;
 
   server_names_hash_bucket_size 128;
   client_header_buffer_size 2k;
   large_client_header_buffers 4 4k;
   client_max_body_size 8m;
 
   sendfile on;
   tcp_nopush     on;
 
   keepalive_timeout 60;
 
   fastcgi_cache_path /usr/local/nginx/fastcgi_cache levels=1:2
                 keys_zone=TEST:10m
                 inactive=5m;
   fastcgi_connect_timeout 300;
   fastcgi_send_timeout 300;
   fastcgi_read_timeout 300;
   fastcgi_buffer_size 16k;
   fastcgi_buffers 16 16k;
   fastcgi_busy_buffers_size 16k;
   fastcgi_temp_file_write_size 16k;
   fastcgi_cache TEST;
   fastcgi_cache_valid 200 302 1h;
   fastcgi_cache_valid 301 1d;
   fastcgi_cache_valid any 1m;
   fastcgi_cache_min_uses 1;
   fastcgi_cache_use_stale error timeout invalid_header http_500; 
   open_file_cache max=204800 inactive=20s;
   open_file_cache_min_uses 1;
   open_file_cache_valid 30s; 
 
   tcp_nodelay on;
   
   gzip on;
   gzip_min_length   1k;
   gzip_buffers     4 16k;
   gzip_http_version 1.0;
   gzip_comp_level 2;
   gzip_types       text/plain application/x-javascript text/css application/xml;
   gzip_vary on;
 
   server
   {
     listen       8080;
     server_name   huan.wangshibo.com;
     index index.php index.htm;
     root   /www/html/;
 
     location /status
     {
         stub_status on;
     }
 
     location ~ .*\.(php|php5)?$
     {
         fastcgi_pass 127.0.0.1:9000;
         fastcgi_index index.php;
         include fcgi.conf;
     }
 
     location ~ .*\.(gif|jpg|jpeg|png|bmp|swf|js|css)$
     {
       expires       30d;
     }
 
     log_format   access   '$remote_addr - $remote_user [$time_local] "$request" '
               '$status $body_bytes_sent "$http_referer" '
               '"$http_user_agent" $http_x_forwarded_for';
     access_log   /www/log/access.log   access;
       }
}

2. FastCGI に関するいくつかの手順

この手順では、FastCGI キャッシュ ディレクトリのパスを指定します。構造レベル、キーワード領域の保存時間、および非アクティブな削除時間。

fastcgi_cache_path /usr/local/nginx/fastcgi_cache levels=1:2 keys_zone=TEST:10m inactive=5m;

バックエンド FastCGI への接続のタイムアウトを指定します。

fastcgi_connect_timeout 300;

向FastCGI传送请求的超时时间,这个值是指已经完成两次握手后向FastCGI传送请求的超时时间。

fastcgi_send_timeout 300;

接收FastCGI应答的超时时间,这个值是指已经完成两次握手后接收FastCGI应答的超时时间。

fastcgi_read_timeout 300;

指定读取FastCGI应答第一部分 需要用多大的缓冲区,这里可以设置为fastcgi_buffers指令指定的缓冲区大小,上面的指令指定它将使用1个 16k的缓冲区去读取应答的第一部分,即应答头,其实这个应答头一般情况下都很小(不会超过1k),但是你如果在fastcgi_buffers指令中指 定了缓冲区的大小,那么它也会分配一个fastcgi_buffers指定的缓冲区大小去缓存。

fastcgi_buffer_size 16k;

指定本地需要用多少和多大的缓冲区来 缓冲FastCGI的应答,如上所示,如果一个php脚本所产生的页面大小为256k,则会为其分配16个16k的缓冲区来缓存,如果大于256k,增大 于256k的部分会缓存到fastcgi_temp指定的路径中, 当然这对服务器负载来说是不明智的方案,因为内存中处理数据速度要快于硬盘,通常这个值 的设置应该选择一个你的站点中的php脚本所产生的页面大小的中间值,比如你的站点大部分脚本所产生的页面大小为 256k就可以把这个值设置为16 16k,或者4 64k 或者64 4k,但很显然,后两种并不是好的设置方法,因为如果产生的页面只有32k,如果用4 64k它会分配1个64k的缓冲区去缓存,而如果使用64 4k它会分配8个4k的缓冲区去缓存,而如果使用16 16k则它会分配2个16k去缓存页面,这样看起来似乎更加合理。

fastcgi_buffers 16 16k;

这个指令我也不知道是做什么用,只知道默认值是fastcgi_buffers的两倍。

fastcgi_busy_buffers_size 32k;

在写入fastcgi_temp_path时将用多大的数据块,默认值是fastcgi_buffers的两倍。

fastcgi_temp_file_write_size 32k;

开启FastCGI缓存并且为其制定一个名称。个人感觉开启缓存非常有用,可以有效降低CPU负载,并且防止502错误。但是这个缓存会引起很多问题,因为它缓存的是动态页面。具体使用还需根据自己的需求。

fastcgi_cache TEST

为指定的应答代码指定缓存时间,如上例中将200,302应答缓存一小时,301应答缓存1天,其他为1分钟。

fastcgi_cache_valid 200 302 1h;
fastcgi_cache_valid 301 1d;
fastcgi_cache_valid any 1m;

缓存在fastcgi_cache_path指令inactive参数值时间内的最少使用次数,如上例,如果在5分钟内某文件1次也没有被使用,那么这个文件将被移除。

fastcgi_cache_min_uses 1;

不知道这个参数的作用,猜想应该是让nginx知道哪些类型的缓存是没用的。

fastcgi_cache_use_stale error timeout invalid_header http_500;

相关推荐:

nginx+keepalived配置高可用HTTP群集

高流量站点NGINX与PHP-fpm配置优化(译)

以上が高同時実行時のnginxのより良い設定方法のご紹介(コード解析編)の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
PHPセッションの概念を簡単に説明してください。PHPセッションの概念を簡単に説明してください。Apr 26, 2025 am 12:09 AM

phpssionsStrackuserdataacrossmultiplepagerequestsusingauniqueidstoredinacookie.here'showtomanageetheemefectively:1)Startassession withsession_start()andstoredatain $ _ session.2)RegeneratesseSsessidafterloginwithsession_id(the topreventes_id)

PHPセッションに保存されているすべての値をどのようにループしますか?PHPセッションに保存されているすべての値をどのようにループしますか?Apr 26, 2025 am 12:06 AM

PHPでは、次の手順を通じてセッションデータを繰り返すことができます。1。session_start()を使用してセッションを開始します。 2。$ _Sessionアレイのすべてのキー価値ペアを介してforeachループを反復します。 3.複雑なデータ構造を処理する場合、is_array()またはis_object()関数を使用し、print_r()を使用して詳細情報を出力します。 4.トラバーサルを最適化する場合、ページングを使用して、一度に大量のデータの処理を避けることができます。これにより、実際のプロジェクトでPHPセッションデータをより効率的に管理および使用するのに役立ちます。

ユーザー認証にセッションを使用する方法を説明します。ユーザー認証にセッションを使用する方法を説明します。Apr 26, 2025 am 12:04 AM

このセッションは、サーバー側の状態管理メカニズムを介してユーザー認証を実現します。 1)セッションの作成と一意のIDの生成、2)IDはCookieを介して渡されます。3)サーバーストアとIDを介してセッションデータにアクセスします。

PHPセッションにユーザーの名前を保存する方法の例を挙げてください。PHPセッションにユーザーの名前を保存する方法の例を挙げてください。Apr 26, 2025 am 12:03 AM

tostoreauser'snameInappession、starthessession withsession_start()、thensignthenameto $ _session ['username']。1)ousession_start()toinitializethessession.2)assighttheuser'snameto $ _ session ['username']

PHPセッションを失敗させる可能性のあるいくつかの一般的な問題は何ですか?PHPセッションを失敗させる可能性のあるいくつかの一般的な問題は何ですか?Apr 25, 2025 am 12:16 AM

PHPSESSIONの障害の理由には、構成エラー、Cookieの問題、セッションの有効期限が含まれます。 1。構成エラー:正しいセッションをチェックして設定します。save_path。 2.Cookieの問題:Cookieが正しく設定されていることを確認してください。 3.セッションの有効期限:セッションを調整してください。GC_MAXLIFETIME値はセッション時間を延長します。

PHPでセッション関連の問題をどのようにデバッグしますか?PHPでセッション関連の問題をどのようにデバッグしますか?Apr 25, 2025 am 12:12 AM

PHPでセッションの問題をデバッグする方法は次のとおりです。1。セッションが正しく開始されるかどうかを確認します。 2.セッションIDの配信を確認します。 3.セッションデータのストレージと読み取りを確認します。 4.サーバーの構成を確認します。セッションIDとデータを出力し、セッションファイルのコンテンツを表示するなど、セッション関連の問題を効果的に診断して解決できます。

session_start()が複数回呼び出されるとどうなりますか?session_start()が複数回呼び出されるとどうなりますか?Apr 25, 2025 am 12:06 AM

session_start()への複数の呼び出しにより、警告メッセージと可能なデータ上書きが行われます。 1)PHPは警告を発し、セッションが開始されたことを促します。 2)セッションデータの予期しない上書きを引き起こす可能性があります。 3)session_status()を使用してセッションステータスを確認して、繰り返しの呼び出しを避けます。

PHPでセッションのライフタイムをどのように構成しますか?PHPでセッションのライフタイムをどのように構成しますか?Apr 25, 2025 am 12:05 AM

PHPでのセッションライフサイクルの構成は、session.gc_maxlifetimeとsession.cookie_lifetimeを設定することで達成できます。 1)session.gc_maxlifetimeサーバー側のセッションデータのサバイバル時間を制御します。 0に設定すると、ブラウザが閉じているとCookieが期限切れになります。

See all articles

ホット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衣類リムーバー

Video Face Swap

Video Face Swap

完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

DVWA

DVWA

Damn Vulnerable Web App (DVWA) は、非常に脆弱な PHP/MySQL Web アプリケーションです。その主な目的は、セキュリティ専門家が法的環境でスキルとツールをテストするのに役立ち、Web 開発者が Web アプリケーションを保護するプロセスをより深く理解できるようにし、教師/生徒が教室環境で Web アプリケーションを教え/学習できるようにすることです。安全。 DVWA の目標は、シンプルでわかりやすいインターフェイスを通じて、さまざまな難易度で最も一般的な Web 脆弱性のいくつかを実践することです。このソフトウェアは、

WebStorm Mac版

WebStorm Mac版

便利なJavaScript開発ツール

AtomエディタMac版ダウンロード

AtomエディタMac版ダウンロード

最も人気のあるオープンソースエディター

EditPlus 中国語クラック版

EditPlus 中国語クラック版

サイズが小さく、構文の強調表示、コード プロンプト機能はサポートされていません

MinGW - Minimalist GNU for Windows

MinGW - Minimalist GNU for Windows

このプロジェクトは osdn.net/projects/mingw に移行中です。引き続きそこでフォローしていただけます。 MinGW: GNU Compiler Collection (GCC) のネイティブ Windows ポートであり、ネイティブ Windows アプリケーションを構築するための自由に配布可能なインポート ライブラリとヘッダー ファイルであり、C99 機能をサポートする MSVC ランタイムの拡張機能が含まれています。すべての MinGW ソフトウェアは 64 ビット Windows プラットフォームで実行できます。