Nginx の最適化 - バージョン番号と Web ページのキャッシュ時間を非表示にする バージョン番号を非表示にするようにNginxを設定する 実稼働環境では、セキュリティ上の問題を回避するために、Nginx のバージョン番号を非表示にする必要があります。 脆弱性開示 表示方法 ● Windows クライアントで Nginx のバージョン番号を確認するには、fiddler ツールを使用します。 CentOSシステムで表示するには、「curl -I URL」コマンドを使用します。 Nginx でバージョン番号を隠す方法 ● 設定ファイルメソッドの変更 ●ソースコードの修正 設定ファイルメソッドを変更する 1. Nginx設定ファイルのserver_tokensオプションの値をoffに設定する [root@www conf]# vim nginx.conf ..... server_tokens オフ; ..... [root@www conf]# nginx -t 2. サービスを再起動し、curl -Iコマンドを使用してウェブサイトにアクセスしてテストします。 [root@www conf]# サービス nginx を再起動します [root@www conf]# curl -1 http://192.1 68.9.209/ HTTP/1.1200 正常 サーバー: nginx 3. PHP 設定ファイルで fastcgi param SERVER SOFTWARE オプションが設定されている場合。次にphp-fpm設定ファイルを編集し、fastcgiパラメータSERVER SOFTWAREの値を次のように変更します。 fastcgi_ パラメータ SERVER_ SOFTWARE nginx; ソースコードの変更 Nginx ソースコード ファイル /usr/src/nginx-1.12.0/src/core/nginx.h にはバージョン情報が含まれています。任意に再コンパイルしてインストールし、バージョン情報を非表示にするように設定できます。 例: #define NGINX_ _VERSION "1.1.1" 、バージョン番号を 1.1.1 に変更します #define NGINX_ VER "IIS/" 、ソフトウェアタイプをIISに変更します サービスを再起動し、curl -Iコマンドを使用してウェブサイトにアクセスしてテストします。 Nginx ユーザーとグループを変更する Nginxランタイムプロセスは、ウェブサイトのファイルを読み取る際にアクセス制御を実装するために、ユーザーとグループのサポートが必要です。 Nginxはデフォルトでnobodyユーザーアカウントとグループアカウントを使用しますが、通常は変更する必要があります。 修正方法 ●コンパイルおよびインストール時にユーザーとグループを指定する●設定ファイルを修正してユーザーとグループを指定する 設定ファイルを変更して指定する 1. nginxなどの新しいユーザーアカウントを作成します。 2. メイン設定ファイルのユーザーオプションを変更し、ユーザーアカウントを指定します。 3. 設定を有効にするためにnginxサービスを再起動します。 4. ps auxコマンドを使用してnginxのプロセス情報を表示し、実行中のユーザーを確認します。 アカウント変更の影響 [root@www conf]# vi nginx.conf ユーザー nginx nginx; [root@www conf]# サービス nginx を再起動します [root@www conf]# ps aux lgrep nginx ルート 1300340.0 0.0 20220 620? Ss 19:41 0:00 nginx: マスタープロセス ローカル nginx 1300350.0 0.0 20664 1512 ?S 19:41 0:00 nginx: ワーカープロセス Nginx ウェブページキャッシュ時間を設定する Nginx が Web ページ データをクライアントに返すときに、キャッシュ時間を設定すると、将来同じコンテンツが要求されたときに直接返されるようになり、繰り返しの要求を回避してアクセスを高速化できます。これは通常、静的 Web ページに対して設定され、動的 Web ページにはキャッシュ時間は設定されません。Windows クライアントで fiddler を使用して、Web ページのキャッシュ時間を表示できます。 設定方法 構成ファイルを変更し、http セクション、サーバー セクション、または場所セクションの特定のコンテンツの有効期限パラメータを追加できます。 例 Nginx設定ファイルを変更し、locationセクションにexpiresパラメータを追加します。 場所 ~ \.(gifjpgliepglpnglbmplico)$ { ルートhtml; 有効期限は1日です。 バージョン番号を非表示にする例のデモ 1. Nginxサービスをコンパイルしてインストールする ステップ1: Windowsでソースパッケージをリモートで取得し、Linuxにマウントする [root@localhost ~]# smbclient -L //192.168.235.1 SAMBA\rootのパスワードを入力してください: シェア名 タイプ コメント --------- ---- ------- LNMP ディスク [root@localhost ~]# mkdir /abc [root@localhost ~]# mount.cifs //192.168.235.1/LNMP /abc root@//192.168.235.1/LNMP のパスワード: [root@localhost ~]# ls /abc Discuz_X3.4_SC_UTF8.zip nginx-1.12.2.tar.gz ゲーム.jpg php-7.1.10.tar.bz2 mysql-boost-5.7.20.tar.gz php-7.1.20.tar.gz nginx-1.12.0.tar.gz ステップ2: ソースパッケージを解凍する [root@localhost ~]# cd /abc [root@localhost abc]# tar zxvf nginx-1.12.0.tar.gz -C /opt [root@localhost abc]# ls /opt nginx-1.12.0 RH ステップ3: コンパイルコンポーネントパッケージをダウンロードしてインストールする [root@localhost abc]# cd /opt [root@localhost opt]# yum install -y \ > gcc \ //C 言語> gcc-c++ \ //c++ 言語> pcre-devel \ //pcre 言語ツール> zlib-devel //圧縮関数ライブラリ ステップ4: プログラムユーザーを作成し、Nginxサービス関連コンポーネントを構成する [root@localhost opt]# useradd -M -s /sbin/nologin nginx //プログラムユーザー nginx を作成し、ターミナルへのログインを制限します [root@localhost opt]# cd nginx-1.12.0/ [root@localhost nginx-1.12.0]# ./configure \ //nginx を設定する > --prefix=/usr/local/nginx \ //インストールパスを指定> --user=nginx \ //ユーザー名を指定> --group=nginx \ //ユーザーが所属するグループを指定します> --with-http_stub_status_module //ステータス統計モジュールをインストール ステップ5: Nginxをコンパイルしてインストールする [root@localhost nginx-1.12.0]# make && make install ステップ6: Nginxサービスの起動スクリプトを最適化し、コマンドソフトリンクを確立する [root@localhost nginx-1.12.0]# ln -s /usr/local/nginx/sbin/nginx /usr/local/sbin/ //システムコマンドへの nginx サービスコマンドへのソフトリンクを作成します [root@localhost nginx-1.12.0]# systemctl stop firewalld.service //ファイアウォールをオフにする [root@localhost nginx-1.12.0]# setenforce 0 //強化されたセキュリティ機能をオフにする [root@localhost nginx-1.12.0]# nginx //サービスを開始するには nginx と入力します [root@localhost nginx-1.12.0]# netstat -ntap | grep 80 //サービス ポート 80 を表示し、tcp が有効になっていることを確認します 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 7520/nginx: master ステップ7: systemctlはnginxスクリプトを管理する [root@localhost ~]# vim /lib/systemd/system/nginx.service ##設定ファイルを作成する [Unit] 説明=nginx ##説明 After=network.target ##サービスタイプの説明 [Service] Type=forking ## バックグラウンドで実行形式PIDFile=/usr/local/nginx/logs/nginx.pid ## PID ファイルの場所ExecStart=/usr/local/nginx/sbin/nginx ## サービスを開始ExecReload=/usr/bin/kill -s HUP $MAINPID ## PID に従ってリロードを構成するExecStop=/usr/bin/kill -s QUIT $MAINPID ## PIDPrivateTmp=true に従ってプロセスを終了 [インストール] WantedBy=マルチユーザー.ターゲット [root@localhost ~]# chmod 754 /lib/systemd/system/nginx.service ##実行権限を設定する [root@localhost ~]# systemctl stop nginx.service ##nginxをシャットダウンする [root@localhost ~]# systemctl start nginx.service ##nginxを起動します 2. 設定ファイルを変更してバージョン番号を隠す ステップ1: デフォルトでNginxのバージョン番号を確認する [root@localhost ~]# curl -I http://192.168.235.158 ##バージョン番号を確認する HTTP/1.1 200 OK サーバー: nginx/1.12.0 ## 表示されるバージョン番号は 1.12.0 です 日付: 2019年11月13日水曜日 08:32:59 GMT コンテンツタイプ: text/html コンテンツの長さ: 612 最終更新日: 2019年11月6日水曜日 01:53:19 GMT 接続: キープアライブ ETag: "5dc2278f-264" 受け入れ範囲: バイト ステップ2: nginx.conf設定ファイルを変更する [root@localhost ~]# vim /usr/local/nginx/conf/nginx.conf http { mime.types を含めます。 デフォルトタイプ アプリケーション/オクテットストリーム; server_tokens オフ; ##httpプロトコルセクションにserver_tokensオプションを追加し、値をoffに設定します jpg ステップ3: Nginxのバージョン番号が非表示になっていることを確認する [root@localhost ~]# systemctl stop nginx.service [root@localhost ~]# systemctl nginx.service を起動します [root@localhost ~]# curl -I http://192.168.235.158 HTTP/1.1 200 OK サーバー: nginx ## 表示されているバージョン番号は非表示になっています 日付: 2019 年 11 月 13 日水曜日 09:18:00 GMT コンテンツタイプ: text/html コンテンツの長さ: 612 最終更新日: 2019年11月6日水曜日 01:53:19 GMT 接続: キープアライブ ETag: "5dc2278f-264" 受け入れ範囲: バイト 3. 構成ソースコードを変更してバージョン番号を非表示にする ステップ1: nginx.conf設定ファイルを変更する [root@localhost ~]# vim /usr/local/nginx/conf/nginx.conf ... server_tokens オン; ##off を on に置き換える ステップ2: ソースコードファイルnginx.hのバージョン情報を変更する [root@localhost ~]# vim /opt/nginx-1.12.0/src/core/nginx.h #NGINX_VERSIONを「1.1.1」と定義します ##バージョン情報を1.1.1に変更 ステップ3: Nginxを再コンパイルする [root@localhost ~]# cd /opt/nginx-1.12.0/ [root@localhost nginx-1.12.0]# ./configure \ > --prefix=/usr/local/nginx \ > --user=nginx \ > --group=nginx \ > --http_stub_status_module を追加 [root@localhost nginx-1.12.0]# make && make install ステップ4: Nginxのバージョン番号が非表示になっていることを確認する [root@localhost nginx-1.12.0]# curl -I http://192.168.235.158 HTTP/1.1 200 OK サーバー: nginx/1.1.1 ##バージョン番号が 1.1.1 に変更されました 日付: 2019年11月13日水曜日 10:20:23 GMT コンテンツタイプ: text/html コンテンツの長さ: 612 最終更新日: 2019年11月6日水曜日 01:53:19 GMT 接続: キープアライブ ETag: "5dc2278f-264" 受け入れ範囲: バイト Web ページ キャッシュ時間の例のデモンストレーション ステップ1: 画像をサイトディレクトリにコピーする [root@localhost nginx-1.12.0]# ls /abc Discuz_X3.4_SC_UTF8.zip nginx-1.12.2.tar.gz ゲーム.jpg php-7.1.10.tar.bz2 mysql-boost-5.7.20.tar.gz php-7.1.20.tar.gz nginx-1.12.0.tar.gz [root@localhost nginx-1.12.0]# cp /abc/game.jpg /usr/local/nginx/html/ [root@localhost nginx-1.12.0]# cd /usr/local/nginx/html/ [root@localhost html]# ls 50x.html ゲーム.jpg インデックス.html ステップ2: Nginxのindex.htmlページを変更する [root@localhost html]# vim index.html <h1>nginx へようこそ!</h1> <img src="game.jpg"/> ##h1タグの下に画像パスを追加します ステップ3: Nginx .confファイルを変更する [root@localhost html]# vim /usr/local/nginx/conf/nginx.conf ユーザー nginx nginx; ##この行エントリを個別に入力し、ユーザー nginx を指定し、グループ nginx を指定します 場所 ~\.(gif|jepg|jpg|ico|bmp|png)$ { ルートhtml; 有効期限は1日です。 ##上記の画像タイプは1日間キャッシュされます} [root@localhost html]# systemctl stop nginx.service [root@localhost html]# systemctl start nginx.service ステップ4: Win10仮想マシンを開いて確認する クライアントにfiddler.exeパケットキャプチャソフトウェアをインストールし、ブラウザを開いて192.168.235.158のWebページにアクセスします。 要約する 以上が、Nginx の非表示バージョン番号と Web ページのキャッシュ時間についてご紹介した内容です。お役に立てれば幸いです。ご質問がある場合は、メッセージを残していただければ、すぐに返信いたします。また、123WORDPRESS.COM ウェブサイトをサポートしてくださっている皆様にも感謝申し上げます。 以下もご興味があるかもしれません:
|
<<: Mysql クラシック高レベル/コマンドライン操作 (クイック) (推奨)
少し前に、docker ディスク容量が小さすぎてデータを書き込めないという問題が発生しました。理由は...
AOP の紹介AOP (アスペクト指向プログラミング) の主な機能は、コアビジネスロジックモジュール...
問題の説明1. 収集ステーションのデータベース2. データが無い状態での移動は問題ありませんが、デー...
目次1. 範囲1. グローバルな範囲2. ローカルスコープ2. 変数のスコープ1. グローバル変数2...
Like は中国語で「好き」を意味しますが、MySQL データベースに適用される場合、Like は、...
序文Reduce() メソッドは関数を累積器として受け取り、配列内の各値 (左から右へ) が単一の値...
目次背景MySQLが完全に起動したかどうかを確認する方法事故最初の変更2回目の改訂要約するMySQL...
このキーワードどのオブジェクトが関数を呼び出しますか? また、関数内の this はどのオブジェクト...
目次問題の原因:解決:解決:私は Centos7 を使用しています (理論的にはこの方法は Cent...
1. 概要information_schema データベースは performance_schema...
MySQL ROLE はどのような問題を解決しますか?プロフェッショナルな資質を持ち、権限管理に細心...
目次質問: 1. 最初の試み2. 合理的な分析3. 問題解決(1) pthread_join()の使...
この記事では、適切なスライドアウトレイヤーアニメーションを実装するためのVueの具体的なコードを例と...
1. スクロールの実装原理better-scroll のスクロール原理は、ブラウザのネイティブスクロ...
目次基本タイプあらゆるタイプ配列タプルインタフェース関数自己推論を入力する結合タイプ(1つ以上選択)...