Nginx でバージョン番号と Web ページのキャッシュ時間を非表示にする方法

Nginx でバージョン番号と Web ページのキャッシュ時間を非表示にする方法

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 ウェブサイトをサポートしてくださっている皆様にも感謝申し上げます。
この記事が役に立ったと思われた方は、ぜひ転載していただき、出典を明記してください。ありがとうございます!

以下もご興味があるかもしれません:
  • Nginx でバージョン番号を隠したり偽造したりする方法
  • Nginx でバージョン番号を隠す方法
  • nginx のバージョン番号と WEB サーバー情報を隠すための解決策
  • バージョン番号を隠すために nginx を設定する複数の方法

<<:  Mysql クラシック高レベル/コマンドライン操作 (クイック) (推奨)

>>:  vue.js ルーターのネストされたルートの実例

推薦する

MySQLプロセスを安全かつ適切にシャットダウンする方法

序文この記事では、mysqld プロセスをシャットダウンするプロセスと、MySQL インスタンスを安...

Vue.js パフォーマンス最適化 N 個のヒント (収集する価値あり)

目次機能コンポーネント子コンポーネントの分割ローカル変数v-show によるDOMの再利用キープアラ...

DIV、テーブル、XHTML のウェブサイト構築の違いの分析と説明

簡単に言えば、ウェブサイト構築とは、「この人はどんな外見をしているのか」と「この人はどんな内面を持っ...

デプロイから基本操作までDocker Swarm

Docker SwarmについてDocker Swarm は次の 2 つの部分で構成されます。 D...

MySQLリモート接続失敗の解決策

以前、MySQLがローカルでは接続できるのにリモートでは接続できないという問題に遭遇したことがありま...

グループ化されたクエリでのGROUP BYの使用とSQL実行順序の説明

SQL では、GROUP BY は SELECT の結果のデータをグループ化するために使用されます。...

入力タイプ=テキスト値=str を使用するための不完全なソリューション

今日、非常に奇妙な問題に遭遇しました。次のコードを見てください。 SimpleDateFormat ...

TomcatはLog4jを使用してcatalina.outログを出力します。

Tomcat のデフォルトのログは java.util.logging を使用しますが、これにはい...

Linux コマンドラインのワイルドカードとエスケープ文字の実装

ハードディスクのファイル属性のバッチ表示など、特定の種類のファイルに対してバッチ操作を実行する場合、...

Vue パッケージサイズの最適化の実装 (1.72M から 94K)

1. 背景最近、独立した開発者がUIデザインを行うのを支援するために、uideaというWebサイト...

サイトマップをウェブページの下部に配置するメリットと例

以前は、ほとんどすべての Web サイトに、すべてのページをリストしたサイトマップ ページがありまし...

CSS のサイズと幅と高さのブラウザ解釈の違いに対する解決策

まずは例を見てみましょうコードをコピーコードは次のとおりです。 <!DOCTYPE html ...

Linuxでpyファイルを直接実行する方法

1. まずファイルを作成します(ファイルを配置するディレクトリにcdします) myTest.py を...

MySQL での find_in_set() 関数の使用に関する詳細な説明

まず、例を見てみましょう。記事テーブルにはタイプフィールドがあり、1 見出し、2 おすすめ、3 ホッ...

JavaScript の新しい要素トラバーサルプロパティを使用して子要素をトラバースする方法を学びます

目次1. ChildNodes属性のトラバーサル2. 要素シリーズ属性のトラバーサル以前は、chil...