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 クラシック高レベル/コマンドライン操作 (クイック) (推奨)
序文この記事では、mysqld プロセスをシャットダウンするプロセスと、MySQL インスタンスを安...
目次機能コンポーネント子コンポーネントの分割ローカル変数v-show によるDOMの再利用キープアラ...
簡単に言えば、ウェブサイト構築とは、「この人はどんな外見をしているのか」と「この人はどんな内面を持っ...
Docker SwarmについてDocker Swarm は次の 2 つの部分で構成されます。 D...
以前、MySQLがローカルでは接続できるのにリモートでは接続できないという問題に遭遇したことがありま...
SQL では、GROUP BY は SELECT の結果のデータをグループ化するために使用されます。...
今日、非常に奇妙な問題に遭遇しました。次のコードを見てください。 SimpleDateFormat ...
Tomcat のデフォルトのログは java.util.logging を使用しますが、これにはい...
ハードディスクのファイル属性のバッチ表示など、特定の種類のファイルに対してバッチ操作を実行する場合、...
1. 背景最近、独立した開発者がUIデザインを行うのを支援するために、uideaというWebサイト...
以前は、ほとんどすべての Web サイトに、すべてのページをリストしたサイトマップ ページがありまし...
まずは例を見てみましょうコードをコピーコードは次のとおりです。 <!DOCTYPE html ...
1. まずファイルを作成します(ファイルを配置するディレクトリにcdします) myTest.py を...
まず、例を見てみましょう。記事テーブルにはタイプフィールドがあり、1 見出し、2 おすすめ、3 ホッ...
目次1. ChildNodes属性のトラバーサル2. 要素シリーズ属性のトラバーサル以前は、chil...