チューニングnginxの(a)に指定されたnginxのコンパイル済みのLinuxシステムのチューニングパラメータインストール - ディスクI / O(III)を

(1)nginxのバージョン番号を隠します

  効果的な攻撃に対応する脆弱性を調べ、nginxのバージョン情報に基づいて、ハッカーを防ぐことができますバージョン番号を非表示にします。

  nginxのソースパッケージをダウンロード(http://nginx.org/en/download.html)およびアップロード、ソースコードをコンパイルする前に、適切な設定ファイルを変更します。

タール-1.16.0.tar.gz -C nginxのは/ usr / local / srcに/ zxf [youxi1ルート@〜]#
/usr/local/src/nginx-1.16.0/ [ルートyouxi1 @〜]#のCD 
[ルート@ youxi1 nginxの-1.16.0]#1のvimのsrc /コア/ nginx.h // ソフトウェアのバージョン番号の変更
の#define NGINX_VERSION "7.0.0" // 13行目
の#define NGINX_VER "IIS /" NGINX_VERSION //行14 
/ /エコー特定のバージョン番号を防ぐために、HTTPヘッダ情報に接続フィールドを変更
[youxi1 nginxの-1.16.0 @ルート]#のVIM SRC / HTTP / ngx_http_header_filter_module.c 
[] = ngx_http_server_string静的u_char型"サーバー:IIS" CRLFを; //ライン49は、
あなたがnginxのは、バージョン番号をエコー、404エラーを報告し、変更する場合、このステップは、カスタム404ページの代わりに使用することができます//。
[youxi1 nginxの@ルート-1.16.0]#VimのSRC / HTTP / ngx_http_special_response.c 
"<HR> <センター> IIS </センター>" CRLF //行36

  この後、それは正しくインストールをコンパイルすることができます。

//安装依赖包
[youxi1のnginx-1.16.0 @ルート]#yumを-yのgccはgcc-C ++のautoconf automakeをするのzlibはzlib-develののopensslのopensslの-のdevel PCREのPCRE-develのをインストール
[youxi1のnginx-1.16.0 @ルート]#useraddの-s / sbinに/ NOLOGIN -M nginxの//创建一个nginxの专属用户 [youxi1 nginxの-1.16.0 @ルート]#は./configure --prefix =は/ usr / local / nginxの--user = nginxの--group = nginxの--with-http_ssl_module --with-http_realip_module --with-http_gzip_static_module --with-PCRE 作る&& make installを#[youxi1のnginx-1.16.0 @ルート] #エコー$ [youxi1のnginx-1.16.0 @ルート]を? 0

  依存パッケージ:

    gccがCコンパイラは、gccの-C ++ C ++言語のエディタです。autoconfのとautomakeには、設定およびコンパイルするために使用するツールです。ZLIBとZLIB-develのは、nginxのGZIPモジュールが必要なサポートを提供しています。opensslのとOpenSSL SSL機能は、必要なサポートを提供nginxのです。PCREのPCRE-develのサポートやアドレス書き換え(リライト)機能。

  取り付けアセンブリ命令:

    --user = nginxの--group = nginxのユーザーとグループ

    --with-http_ssl_moduleサポートHTTPS(HTTPS)

    http_realip_module---with実際のクライアントのIPアドレスを取得

    --with-http_gzip_static_module代わりに通常のファイルで、ファイル名拡張子の.gzで予め圧縮されたファイルを送信することを許さ。(チューニングのためのページ圧縮)

    ソースの場所を指定--with-PCRE PCREライブラリ(ソース搭載PCREライブラリアドレスを詳細に指定する必要があります)

  :その他の取り付けアセンブリ命令を参照することができ、指定nginxのコンパイラのインストールパラメータ

  バージョン番号を非表示にするかどうかを確認するために、nginxの起動します。

[ルートyouxi1のnginx-1.16.0 @]#は/ usr / local / nginxの/ sbinに/ nginxの
[ルートyouxi1のnginx-1.16.0 @]#psのの補助| grepのnginxの
ルート10639 0.0 0.1 45960 1120?SS 15時03分午前0時nginxのマスタープロセスは/ usr / local / nginxの/ sbinに/ nginxの
nginxの10640 0.0 0.1 46416 1884?S 15:03 0時nginxの:ワーカープロセス
ルート10642の0.0 0.0 112724 992 PTS / 0 R + 15:03 0時のgrep --color =オートnginxの
#ファイアウォール-CMD [youxi1 nginxの-1.16.0 @ルート] -永久--zone =公共--add-ポート= 80 / tcpの&&ファイアウォール-CMD --reload 
成功
成功
[ルートyouxi1のnginx-1.16.0 @]#カール-I 192.168.5.101 
HTTP / 1.1 200 OK 
サーバー:IIS / 7.0.0 //版本号
日付:日、2019年8月11日午前七時04分31秒GMTの
コンテンツタイプ:text / htmlの 
コンテンツの長さ:612
最終更新:日、2019年8月11日午前6時30分28秒GMTの
接続:キープアライブ
のETag: "5d4fb604-264" 
にAccept-範囲:バイト

  Windowsのバージョン番号を表示する際に再使用が変更されたかどうかは、エラーを返します

(2)のnginxを実行するユーザーを変更します。

  --userコンパイルするときに使用した場合= [ユーザー名] --group = [グループ名]、あなたが実際に指定することはできません。あなたはコンパイル時に両方のパラメータを指定しない場合は、nginxの年代を実行するためにnginxのユーザーを変更するには、設定ファイルを変更することができます。

[youxi1 nginxの-1.16.0 @ルート]#のvimの/usr/local/nginx/conf/nginx.confの
ユーザーnginxの。//第2行
[youxi1のnginx-1.16.0 @ルート]#は/ usr / local / nginxの/ sbinに/ nginxの-sリロード

(3)のnginxを実行している子プロセスの数を設定します。

  通常、nginxのか、自動設定を実行している子プロセスの数は二倍のCPUコア数、コアの数(自動取得)が、また、(-1コア)に設定します。8つの以上のCPUコアならば、同じ被写体にnginxの番号8の設定プロセスは、子供の数が8以上のギャップを処理し、もちろん、非常に大きなではありません、プログラムを自動的に設定自動取得が必要とされてみましょう。

  CPUコアの数、topコマンドを表示して、CPUコアの数を持ち出すために1を押して、そして私がここに午前4時

  子プロセスの数は、nginxのを修正実行します

[ルート@のyouxi1〜]#件のvim /usr/local/nginx/conf/nginx.confは
自動worker_processes。//第3行
[ルート@ youxi1〜]#は/ usr / local / nginxの/ sbinに/ nginxの-sリロード
[ルート@ youxi1〜]#psのの補助| グレップのnginxのの
ルート0.0 0.0 46092 1948 1138?SS 15:21夜12時nginxの:マスター・プロセスは/ usr / local / nginxの/ sbinに/ nginxの
nginxの1490 0.0 0.0 46532 2004?S 15:30午後12時nginxの:ワーカープロセス
nginxの0.0 0.0 46532 2004 1491?S 15:30午後12時nginxの:ワーカープロセス
nginxの0.0 0.0 46532 2004 1492?S 15:30午後12時nginxの:ワーカープロセス
nginxの0.0 0.0 46532 2004 1493?S 15:30午後12時nginxの:ワーカー・プロセス
/ 0 S + 15時30午前0時00分のgrep --color =オートnginxのルート1497 0.0 0.0 112724 992のPTS

  pstreeコマンドビューまたはnginxの親と子の関係を使用します

[ルート@ youxi1〜]#yumを-y psmiscのをインストールし
ます。[root @のyouxi1〜]#pstreeは-p | グレップのnginxの
           | -nginx(1138) - + - nginxの(1490)
           | | -nginx(1491)
           | | -nginx(1492)
           | `-nginx(1493)

(4)CPUアフィニティnginxのを設定します

  CPUアフィニティが各子プロセスが固定CPUに結合されているnginxのことであり、それによってオーバーヘッドコンテキストスイッチを低減CPUが引き起こされます。

  例えば、2にnginxのセットを実行するサブプロセス、CPUバウンド及び0~2の数。

[youxi1ルート@〜]#Vimの/usr/local/nginx/conf/nginx.conf 
worker_processes 2; 
worker_cpu_affinity 0001 0100; 8 //それは8つのコアCPU 0を持っているかどう。0001は、ここにCPU0,0100 CPU2である
[ルート@ youxi1〜]#は/ usr / local / nginxの/ sbinに/ nginxの-sリロード
はgrepのnginxの| [ルート@のyouxi1〜]#のPS AUX 
ルート1138 0.0 0.0 1968 46000 Ssの15は? :21 0:00 nginxの:マスター・プロセスは/ usr / local / nginxの/ sbinに/ nginxの
nginxの1566 0.0 0.0 1920 46436 S 16時27分0:00 nginxの:?プロセスワーカー
nginxの1567 0.0 0.0 1920 46436 S 16時27分0:? nginxの00:プロセスワーカー
ルート1569 0.0 0.0 112 724 988 PTS / S + 16時27 0時00分0 =オートはgrep --color nginxの
[youxi1ルート@〜]#1566タスクセット-cpの
PID 1566 APOSアフィニティリスト現在:0
1567 -cp [ルート@のyouxi1〜]#個のタスクセット
のpid 1567の現在のアフィニティリスト:2

  本番環境ではなく、極端な要件一般的に値しないCPUアフィニティ値場合、またはautoに設定することができます。それは資源の偏在を引き起こす可能性があるため。

(5)各子供にnginxのオープン・ファイルの最大数を設定します。

  理論的には、nginxの子プロセスが子プロセス/ nginxの数が、nginxの割り振り要求は均一ではないので、ulimitのが一貫した-nと子供はファイルの数の値まで開くことができるファイル(のulimit -n)の数に開放する必要があります。

#ulimitの-n [youxi1〜@ルート] 
1024 
[ルート@ youxi1〜]#のVimの/usr/local/nginx/conf/nginx.confの
worker_rlimit_nofile 1024; //子プロセスの数の下に追加し
ます。[root @のyouxi1〜]#/ USR /ローカル/ nginxの/ sbinに/ nginxの-sリロード

  ファイルを開くための恒久的な変更の最大数については、以下を参照してください。Linuxシステムのチューニング-ディスクI / O(C)

(6).nginxイベント処理モデル

 1)のepollイベント処理モデル

  選択し、世論調査の下でI / Oの多重化メカニズム、epollをnginxのです。I / Oの多重化を機構を介して、複数の記述子を監視することができ、記述子一度レディ(準備一般読み取りまたは書き込みレディ)、プログラムは、読み取りおよび書き込み操作に応じて通知することができます。epollを正式Linux2.6カーネルを導入し、選択して同様のポーリング、実際には、I / Oの多重化されています。

  ファイルディスクリプタの利点:1、ファイルディスクリプタの最大同時接続数の制限はありませんが、上限を開くことができるファイルの最大数があるが、この数は、一般的に、このある大きな数とシステムメモリの関係、特定の数のことができます猫の/ proc / sysの2048年一般よりもはるかに大きいです/ FS /ファイル-maxのビュー。2は、効率を高めるために、最大の利点は、それだけであなたのepoll「アクティブ」な接続が、接続の合計数とは何の関係は、その実際のネットワーク環境では、ファイルディスクリプタ効率が選択し、世論調査よりもはるかに高いだろうということです。図3は、ファイルディスクリプタは「共有メモリ」、安価なメモリとより効率のこの時点で使用します。

 2)モデルを扱うnginxのイベントを変更する方法

[ルート@ youxi1〜]#のVimの/usr/local/nginx/conf/nginx.confの
イベント{//内部イベント処理モデルを追加し、ファイルの先頭のイベントがある
    のepollを使用; // nginxのは、デフォルトのファイルディスクリプタのある
    1024 worker_connections。 //これは、同時単一サブプロセスの数である
} 
[youxi1ルート@〜]#は/ usr / local / nginxの/ sbinに/ -sリロードnginxの

(7)同時のnginxの最大量を設定します

  nginxのと同じように同時プロセスのworker_connections数の単一子であるモデル位置を、イベント処理を設定します。nginxのは、数と子プロセスの数によって複雑に単一の子プロセスを設定することによって達成される並行処理の最大量を設定します。最大同時実行数=単一のサブプロセスの同時実行*子プロセスの数。

[ルート@ youxi1〜]#Vimの/usr/local/nginx/conf/nginx.conf 
イベント{ 
    ファイルディスクリプタを使用; 
    worker_connections 1024; //このパラメータの値を変更し
} 
#は/ usr / local / nginxの/ sbinに[ルート@〜youxi1] / nginxの-sリロード

  worker_connectionsは、外部接続の数を確立同時に許可することができ、単一のワーカープロセスを指します。この接続を確立するためのイニシアチブは、外部、または内部であるかどうかを確立しました。接続を確立するためのワーカープロセスの後、プロセスは、ファイルのコピーを開きますしたがって、この数は限られており、-nのnginxのworker_rlimit_nofileセットのオペレーティングシステムのulimit値。通常の状況のulimit -nシステム、worker_rlimit_nofileの下で、最大量は、同時3(3一貫していない場合は、アプリケーションの最小値にそれを使用するプロセス)と同じです。

(8).server_nameマッチ

  サーバー名は、識別された仮想サーバのためのパスを提供するために、パラメータでHTTP {}サーバに{}です。例えば、サーバは、二つの仮想サーバー、サーバー名を介して特定のサーバに、または対応するディレクトリ後にアプリケーションサーバへのマッチングブロックで構成されています。

  SERVER_NAMEマッチング方法:

    図1に示すように、正確なマッチ:www.baidu.com

    2、ワイルドカード一致:. * Baidu.comまたはwww.baidu *。

    3、正規表現のマッチング:〜^ * \ Baiduの\ .COM $(〜通常の大文字と小文字を区別した一致を表し、〜*通常の大文字と小文字を区別しないマッチングを表します)。

    4、デフォルト或DEFAULT_SERVER

    5、IPアドレス

  優先度:完全一致>左ワイルドカードマッチング(* .baidu.com)>右ワイルドカード一致>正規表現のマッチング>デフォルトまたはDEFAULT_SERVER(www.baidu *。)。優先度が同じである場合には、標準のトップダウンの試合に従ってください。

   サーバー名localhostがデフォルトを変更します

[ルート@のyouxi1〜]#のVimの/usr/local/nginx/conf/nginx.confの
    サーバー{ 
        80を聞きます。
        サーバー名のデフォルト。
        位置/ { 
            ルートHTML。
            インデックスのindex.html index.htmを。
        } 
[ルート@ youxi1〜]#は/ usr / local / nginxの/ sbinに/ nginxの-t //检测nginxの配置文件是否正确
nginxの:構文/usr/local/nginx/conf/nginx.conf設定ファイルはokです
nginxの:設定ファイル/usr/local/nginx/conf/nginx.confテストは成功です

(9).location {}マッチ

  文法規則:場所[= |〜|〜* | ^〜] / URL / {...}

  構文:=完全一致(絶対一致);〜は、大文字と小文字を区別正規マッチングを表し;〜*大文字小文字を区別しない正規マッチング表し^〜部分一致前半URLは、検出されないが正規(例:起因nginxのないURLリクエストが20%/ AA / /静的であるので、コーディングを行う、(スペースに注意)と一致するように、定期的に^〜/静的/ / AAでもよい)と、!!〜〜* *〜と〜は反対の意味で、不一致を表し、 ;また、唯一の/は、ワイルドカードである場合には、いずれかの要求が一致している、最も特にあり。

  例ショー

[ルート@ youxi1〜]#のVimの/usr/local/nginx/conf/nginx.confの
        #場所〜\ .phpの$ {//これは、試合終了が.PHPすることを言います。\。エスケープです。
        ルートHTML#; 
        #fastcgi_pass 127.0.0.1:9000; は、index.phpのをfastcgi_index; 
        #fastcgi_paramのSCRIPT_FILENAME /スクリプト$ fastcgi_script_name; インクルードはfastcgi_paramsが含まれ; 
        #}

(10)。効率的な伝送モードがオンになっています

  効率的な転送モードは、一般的に最初に、HTTP {}の下にあります。

/usr/local/nginx/conf/nginx.conf [youxi1ルート@〜]#Vimの
    のmime.typesを含める; //メディアタイプ、mime.typesファイルconfディレクトリ
    default_type application / octet-streamと; //デフォルトのメディアタイプ
    sendfileオン; //開いて効率的な伝送モード
    にTCP_NOPUSH; //のsendfileは、ネットワークセグメントのアクティブ数を減らすこと、ネットワークの輻輳を防止するために、オンモードで有効でなければなりません

  nginxのsendfileのパラメータは、I / Oの重い負担がなど、ダウンロードするために使用されるアプリケーションをオフに設定することができた場合、ディスク、オンに設定されている一般的なアプリケーションのための出力ファイルへのsendfile関数を呼び出す使用するかどうかを指定します。

(11)接続タイムアウト

  主な目的は、接続が確立されているため、また、我々は、一般的にそれらのものを壊れたが、から、つまり、接続を確立していない、などのリソース、TCP 3ウェイハンドシェイク第四の波を消費する必要があり、接続の数を制御し、サーバリソース、CPU、メモリを保護することですリンクの確立を開始しますが、何のフォローアップハンドシェイクが、その後、待機状態にある私たちのリンクは、すべて壊れていません。また、PHPの短い接続が推奨されます。

  HTTP {}に設けられた接続タイムアウトは、最初に一般的。

[ルート@のyouxi1〜]#件のvim /usr/local/nginx/conf/nginx.confは
    65 keepalive_timeout。//紧跟该行
    TCP_NODELAYに。
    15 client_header_timeout; 
    15 client_body_timeout; 
    15 send_timeout;

  パラメータ:

    セッションタイムアウトを維持するために、クライアント接続keepalived_timeout、この時間をかけて、サーバーは、リンクを切断します。

    TCP_NODELAYはまた、ネットワークの輻輳を防ぐが、keepalivedのパラメータでのみ有効を負担します。

    時間は、任意のデータ伝送なしセットを超えた場合、クライアント要求ヘッダ読み取りタイムアウト期間client_header_timeout、nginxの戻りは、タイムアウトエラーを要求します。

    クライアントのリクエストボディのタイムアウトclient_body_timeout、この時間以上は、エラー上記と同じように任意のデータを送信しませんでした。

    クライアントの応答タイムアウト時間send_timeout、タイムアウト時間は、二つの事象間の時間に限られており、この時間を超過した場合、クライアントはすべての活動を持っていない、nginxのは、接続を閉じます。

(12)ファイルサイズのアップロード制限

  {}頭のhttpを追加します。

[ルート@ youxi1〜]#のvimの/usr/local/nginx/conf/nginx.conf 
HTTP { 
...... 
    client_max_body_sizeの10メートル。//上限10M 
... 
}

  

おすすめ

転載: www.cnblogs.com/diantong/p/11333299.html