ホームページ  >  記事  >  バックエンド開発  >  nginx -- 最適化構成の例

nginx -- 最適化構成の例

WBOY
WBOYオリジナル
2016-08-08 09:29:531026ブラウズ
http://www.lvtao.net/tool/nginx-config-10w.html
nginx命令の最適化(設定ファイル)worker_processes 8;

nginxプロセスの数、に従って指定することをお勧めしますCPU の数。通常はその倍数になります。

worker_cpu_affinity 00000001 00000010 00000100 00001000 00010000 00100000 01000000 10000000;

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

worker_rlimit_nofile 102400;

このコマンドは、nginx プロセスによって開かれるファイル記述子の最大数を指します。理論値は、開いているファイルの最大数 (ulimit -n) を nginx プロセスの数で割った値である必要があります。ただし、nginx 割り当てリクエストはそうではありません。値は ulimit -n と一致するように保つのが最善です。

use epoll;

epoll の I/O モデルを使用することは言うまでもありません。

worker_connections 102400;

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

keepalive_timeout 60;

キープアライブ タイムアウト。

client_header_buffer_size 4k;

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

open_file_cache max=102400 inactive=20s;

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

open_file_cache_valid 30s;

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

open_file_cache_min_uses 1;

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

カーネルパラメータの最適化net.ipv4.tcp_max_tw_buckets = 6000

timewaitの数、デフォルトは180000です。

net.ipv4.ip_local_port_range = 1024 65000

システムが開くことを許可されるポートの範囲。

net.ipv4.tcp_tw_recycle = 1

高速リサイクルのために timewait を有効にします。

net.ipv4.tcp_tw_reuse = 1

再利用を有効にします。新しい TCP 接続に TIME-WAIT ソケットを再利用できるようにします。

net.ipv4.tcp_syncookies = 1

SYN Cookie を有効にする SYN 待機キューがオーバーフローした場合に、それを処理できるように Cookie を有効にします。

net.core.somaxconn = 262144

Web アプリケーションの listen 関数のバックログは、カーネル パラメーターの net.core.somaxconn をデフォルトで 128 に制限し、nginx によって定義される NGX_LISTEN_BACKLOG のデフォルトは 511 であるため、この値を調整する必要があります。

net.core.netdev_max_backlog = 262144

各ネットワーク インターフェイスがカーネルの処理よりも速くパケットを受信した場合にキューに入れることができるパケットの最大数。

net.ipv4.tcp_max_orphans = 262144

ユーザー ファイル ハンドルに関連付けられていない、システム内の TCP ソケットの最大数。この数を超えると、孤立接続は直ちにリセットされ、警告メッセージが出力されます。この制限は、単純な DoS 攻撃を防ぐためだけのものです。この値に依存しすぎたり、この値を人為的に減らしたりすることはできません (メモリを追加する場合)。

net.ipv4.tcp_max_syn_backlog = 262144

クライアントからまだ確認を受け取っていない、記録された接続リクエストの最大数。 128M のメモリを備えたシステムの場合、デフォルト値は 1024 で、メモリが小さいシステムの場合、デフォルト値は 128 です。

net.ipv4.tcp_timestamps = 0

タイムスタンプによりシリアル番号のラップを回避できます。 1Gbps リンクでは、以前に使用されたシーケンス番号が必ず発生します。タイムスタンプにより、カーネルはそのような「異常な」パケットを受け入れることができます。ここでオフにする必要があります。

net.ipv4.tcp_synack_retries = 1

ピアへの接続を開くには、カーネルは前の SYN に対する応答として ACK を含む SYN を送信する必要があります。これは、いわゆる 3 ウェイ ハンドシェイクにおける 2 回目のハンドシェイクです。この設定は、接続を放棄する前にカーネルによって送信される SYN+ACK パケットの数を決定します。

net.ipv4.tcp_syn_retries = 1

カーネルが接続の確立を断念する前に送信された SYN パケットの数。

net.ipv4.tcp_fin_timeout = 1

ソケットがローカル エンドによって閉じるように要求された場合、このパラメータはソケットが FIN-WAIT-2 状態に留まる時間を決定します。ピアがエラーを起こして接続を閉じなかったり、予期せずクラッシュしたりする可能性があります。デフォルト値は 60 秒です。 2.2 カーネルの通常の値は 180 秒です。この設定を押すことはできますが、マシンの負荷が軽い場合でも、多数のデッド ソケットによるメモリ オーバーフローの危険性があることに注意してください。 2 は、最大 1.5K のメモリしか消費できないため、FIN-WAIT-1 より危険性は低くなりますが、生存期間は長くなります。

net.ipv4.tcp_keepalive_time = 30

キープアライブが有効な場合、TCP がキープアライブ メッセージを送信する頻度。デフォルトは 2 時間です。

完全なカーネル最適化構成net.ipv4.ip_forward = 0 net.ipv4.conf.default.rp_filter = 1 net.ipv4.conf.default.accept_source_route = 0 kernel.sysrq = 0 kernel.core_uses_pid = 1 net.ipv4.tcp_syncookies = 1 kernel.msgmnb = 65536 kernel.msgmax = 65536 kernel.shmmax = 68719476736 kernel.shmall = 4294967296 net.ipv4.tcp_max_tw_buckets = 6000 net.ipv4.tcp_sack = 1 net.ipv4.tcp_window_scaling = 1 net.ipv4.tcp_rmem = 4096 87380 4194304 net.ipv4.tcp_wmem = 4096 16384 4194304 net.core.wmem_default = 8388608 net.core.rmem_default = 8388608 net.core.rmem_max = 16777216 net.core.wmem_max = 16777216 net.core.netdev_max_backlog = 262144 net.core.somaxconn = 262144 net.ipv4.tcp_max_orphans = 3276800 net.ipv4.tcp_max_syn_backlog = 262144 net.ipv4.tcp_timestamps = 0 net.ipv4.tcp_synack_retries = 1 net.ipv4.tcp_syn_retries = 1 net.ipv4.tcp_tw_recycle = 1 net.ipv4.tcp_tw_reuse = 1 net.ipv4.tcp_mem = 94500000 915000000 927000000 net.ipv4.tcp_fin_timeout = 1 net.ipv4.tcp_keepalive_time = 30 net.ipv4.ip_local_port_range = 1024 65000単純なnginx最適化構成ファイル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 204800; events { use epoll; worker_connections 204800; } 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 ad.test.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; } }关于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_send_timeout 300;

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

fastcgi_read_timeout 300;

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

fastcgi_buffer_size 16k;

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

fastcgi_buffers 16 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_busy_buffers_size 32k;

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

fastcgi_temp_file_write_size 32k;

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

fastcgi_cache TEST

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

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

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

fastcgi_cache_min_uses 1;

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

fastcgi_cache_use_stale error timeout invalid_header http_500;

不知道这个参数的作用,猜想应该是让nginx知道哪些类型的缓存是没用的。 以上为nginx中FastCGI相关参数,另外,FastCGI自身也有一些配置需要进行优化,如果你使用php-fpm来管理FastCGI,可以修改配置文件中的以下值:

60

同时处理的并发请求数,即它将开启最多60个子线程来处理并发连接。

102400

最多打开文件数。

204800

每个进程在重置之前能够执行的最多请求数。

以上就介绍了nginx--优化配置示例,包括了方面的内容,希望对PHP教程有兴趣的朋友有所帮助。

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