Nginx でバージョン番号を隠す方法

Nginx でバージョン番号を隠す方法

Nginx はバージョン番号を非表示にする

実稼働環境では、セキュリティ上の脆弱性の漏洩を避けるために、Nginx のバージョン番号を非表示にする必要があります。

表示方法

Windows クライアントで Nginx のバージョン番号を確認するには、fiddler ツールを使用します。centos システムで確認するには、「curl -I URL」コマンドを使用します。

Nginx でバージョン番号を隠す方法

設定ファイルを変更する ソースコードを変更する

1. Nginxをインストールする

1. Linuxのリモート共有を使用してファイルを取得し、mntディレクトリにマウントします。

[root@localhost ~]# smbclient -L //192.168.100.3/ ##リモート共有アクセス SAMBA\rootのパスワードを入力してください: 

                シェア名 タイプ コメント
                --------- ---- -------
                LNMP-C7 ディスク    
[root@localhost ~]# mount.cifs //192.168.100.3/LNMP-C7 /mnt ##/mntディレクトリにマウント

2. ソースパッケージを/optに解凍して確認する

[root@localhost ~]# cd /mnt ##マウントポイントディレクトリに切り替えます [root@localhost mnt]# ls
Discuz_X3.4_SC_UTF8.zip nginx-1.12.2.tar.gz
mysql-boost-5.7.20.tar.gz php-7.1.20.tar.gz
[root@localhost mnt]# tar zxvf nginx-1.12.2.tar.gz -C /opt ##Nginx ソース パッケージを /opt に解凍します [root@localhost mnt]# cd /opt/ ##解凍したディレクトリに切り替えます [root@localhost opt]# ls
nginx-1.12.2 RH

3. コンパイルに必要な環境コンポーネントパッケージをインストールする

[root@localhost opt]# yum -y install \
gcc \ //C言語 gcc-c++ \ //C++言語 pcre-devel \ //pcre言語ツール zlib-devel //データ圧縮ライブラリ

4. プログラムユーザーnginxを作成し、Nginxをコンパイルする

[root@localhost opt]# useradd -M -s /sbin/nologin nginx ##安全でログインできないプログラムユーザーを作成します [root@localhost opt]# id nginx
uid=1001(nginx) gid=1001(nginx) グループ=1001(nginx)
[root@localhost opt]# cd nginx-1.12.0/ ##nginxディレクトリに切り替えます [root@localhost nginx-1.12.0]# ./configure \ ##nginxを設定します
> --prefix=/usr/local/nginx \ ##インストールパス> --user=nginx \ ##ユーザー名> --group=nginx \ ##ユーザーグループ> --with-http_stub_status_module ##ステータス統計モジュール

5. コンパイルしてインストールする

[root@localhost nginx-1.12.0]# make ##コンパイル...
[root@localhost nginx-1.12.0]# make install ##インストール...
[root@localhost nginx]# ln -s /usr/local/nginx/sbin/nginx /usr/local/sbin/ 
##システムがnginxの起動スクリプトを認識できるようにソフトリンクを作成します

6. サービス管理を容易にするための管理スクリプトを作成する

[root@localhost nginx]# cd /etc/init.d/ ##スタートアップ設定ファイルのディレクトリに切り替えます [root@localhost init.d]# ls
機能 netconsole ネットワーク README
[root@localhost init.d]# vim nginx ##起動スクリプトファイルを編集します #!/bin/bash
# chkconfig: - 99 20 ##コメント情報# 説明: Nginx サービス制御スクリプト
PROG="/usr/local/nginx/sbin/nginx" ##変数をnginxコマンドファイルに設定します PIDF="/usr/local/nginx/logs/nginx.pid" ##変数PIDファイルのプロセス番号を5346に設定します
ケース「$1」 
        始める)
                $PROG ## サービスを開始します;;
        停止)
                kill -s QUIT $(cat $PIDF) ## サービスを閉じます;;
        restart) ##サービスを再起動する $0 stop
                0ドルからスタート
                ;;
        reload) ## サービスを再ロード kill -s HUP $(cat $PIDF)
                ;;
        *) ##エラー入力プロンプト echo "使用方法: $0 {start|stop|restart|reload}"
               出口1
エサック
終了 0
[root@localhost init.d]# chmod +x /etc/init.d/nginx ##起動スクリプトに実行権限を与える [root@localhost init.d]# chkconfig --add nginx ##サービスマネージャーに追加する [root@localhost init.d]# service nginx stop ##サービスを使用してnginxを制御できる
[root@localhost init.d]# サービス nginx を開始

2. バージョン番号を非表示にする

[root@localhost init.d]# curl -I http://192.168.13.140/ ##Nginx 情報を表示 HTTP/1.1 200 OK
サーバー: nginx/1.12.2 ##バージョン番号を表示 日付: 2019年11月12日火曜日 14:23:24 GMT
コンテンツタイプ: text/html
コンテンツの長さ: 612
最終更新日: 2019年11月12日(火) 13:46:35 GMT
接続: キープアライブ
ETag: "5dcab7bb-264"
受け入れ範囲: バイト
[root@localhost init.d]# vim /usr/local/nginx/conf/nginx.conf ## 設定ファイル http を変更します { ## http の下に include mime.types を追加します。
    デフォルトタイプ アプリケーション/オクテットストリーム;
    server_tokens off; ##バージョン番号をオフにする [root@localhost init.d]# service nginx stop ##サービスをオフにする [root@localhost init.d]# service nginx start ##サービスをオンにする [root@localhost init.d]# curl -I http://192.168.13.140/ ##Nginx情報を表示する HTTP/1.1 200 OK   
サーバー: nginx ##バージョン番号は非表示です 日付: 2019 年 11 月 12 日火曜日 14:22:00 GMT
コンテンツタイプ: text/html
コンテンツの長さ: 612
最終更新日: 2019年11月12日(火) 13:46:35 GMT
接続: キープアライブ
ETag: "5dcab7bb-264"
受け入れ範囲: バイト

3. バージョン番号を偽造する(再コンパイルしてインストールする必要がありますが、コンパイルとインストールの前に実行できます)

1. バージョン番号を開く

[root@localhost init.d]# vim /usr/local/nginx/conf/nginx.conf
http {
    mime.types を含めます。
    デフォルトタイプ アプリケーション/オクテットストリーム;
    server_tokens on; ##バージョン番号を開く

2. Nginxソースパッケージファイルを変更する

[root@localhost init.d]# cd /opt/nginx-1.12.2/src/core/ ##src ソース パッケージ ディレクトリに切り替えます [root@localhost core]# vim nginx.h ##ファイルを変更します #define NGINX_VERSION "1.1.1" ##ここでのバージョン番号は 1.1.1 に偽装されます

3. 再コンパイルしてインストールする

[root@localhost core]# cd /opt/nginx-1.12.2/ ##ディレクトリをNginxに切り替える [root@localhost nginx-1.12.2]# ./configure \ ##再構成> --prefix=/usr/local/nginx \
> --user=nginx \
> --group=nginx \
> --http_stub_status_module を追加
[root@localhost nginx-1.12.0]# make ##再コンパイル...
[root@localhost nginx-1.12.0]# make install ##再インストール...

4. Nginxサービスを再起動し、バージョン情報を確認します。

[root@localhost nginx-1.12.2]# service nginx stop ##閉じる [root@localhost nginx-1.12.2]# service nginx start ##開く [root@localhost nginx-1.12.2]# curl -I http://192.168.13.140/ ##Nginx 情報を表示 HTTP/1.1 200 OK 
サーバー: nginx/1.1.1 ##現時点でのバージョン番号は偽のバージョン番号です 日付: 2019年11月12日火曜日 14:34:02 GMT
コンテンツタイプ: text/html
コンテンツの長さ: 612
最終更新日: 2019年11月12日(火) 13:46:35 GMT
接続: キープアライブ
ETag: "5dcab7bb-264"
受け入れ範囲: バイト

Nginx ウェブページキャッシュ時間

  • Nginx が Web ページ データをクライアントに返すときに、キャッシュ時間を設定すると、将来同じコンテンツが要求されたときに直接返されるようになり、繰り返しの要求を回避してアクセスを高速化できます。
  • 一般的に静的ウェブページ用に設定され、動的ウェブページにはキャッシュ時間は設定されません。
  • Windowsクライアントでフィドラーを使用してWebページのキャッシュ時間を表示できます。

設定方法

構成ファイルを変更し、http セクション、サーバー セクション、または場所セクションの特定のコンテンツの有効期限パラメータを追加できます。

実験環境

1台のNginxサーバーと1台のテストマシンWin10

1. イメージをNginxサイトディレクトリにコピーする

[root@localhost ~]# cd /mnt/ ##マウントポイントに切り替えます [root@localhost mnt]# ls
11.jpg mysql-boost-5.7.20.tar.gz php-7.1.20.tar.gz
22.jpg nginx-1.12.2.tar.gz
Discuz_X3.4_SC_UTF8.zip php-7.1.10.tar.bz2  
[root@localhost mnt]# cp 11.jpg /usr/local/nginx/html/ ##画像をサイトにコピーします[root@localhost mnt]# cd /usr/local/nginx/html/ ##サイトに移動します[root@localhost html]# ls
11.jpg 50x.html インデックス.html

次に、Webページの情報を変更し、画像をindex.htmlファイルに追加します。

[root@localhost html]# vim index.html ##Webページ情報を変更する</head>
<本文>
<h1>nginx へようこそ!</h1>
<img src="11.jpg"/> ##画像をウェブページに追加する

3. 設定ファイル情報を変更する

[root@localhost html]# vim /usr/local/nginx/conf/nginx.conf ##設定ファイル events を変更する {
    ワーカー接続 1024;
}
    user nginx nginx; ##Nginxのユーザーとグループを変更する # Apacheのドキュメントルートが.htaccessファイルへのアクセスを拒否する
  # nginxのものと一致します
  #
  location ~\.(gif|jepg|jpg|ico|bmp|png)$ { ##サポートされている画像形式 ルート html; ##サイトの有効期限は 1 日です; ##1 日間キャッシュします}
[root@localhost html]# service nginx stop ## サービスを閉じて開きます [root@localhost html]# service nginx start 

4番目に、フィドラーを使用してキャッシュを表示します


Nginx ログカット

Nginx の実行時間が長くなると、ログも増加します。 Nginxの実行状況を簡単に把握するためには、ログファイルに常に注意を払う必要があります。

ログファイルが大きすぎると監視に支障をきたします

定期的にログファイルをカットする

Nginx 自体にはログ分割の機能はありませんが、Nginx シグナル制御機能のスクリプトを通じて自動ログ分割を実現し、Linux スケジュールタスクを通じて定期的にログ分割を実行できます。

1. ログセグメンテーションスクリプトファイルを作成する

[root@localhost ~]# vim fenge.sh ##スクリプトファイルを書き込む #!/bin/bash
#ファイル名:fenge.sh
d=$(date -d "-1 day" "+%Y%m%d") ## 1 日前の時間を表示 logs_path="/var/log/nginx" ## 分割ログのパスを保存 pid_path="/usr/local/nginx/logs/nginx.pid" ## pid パス [ -d $logs_path ] || mkdir -p $logs_path ## ディレクトリがない場合はディレクトリを作成 mv /usr/local/nginx/logs/access.log ${logs_path}/test.com-access.log-$d
## 元のログ ファイルを新しいパスに生成します kill -USR1 $(cat $pid_path) ## 新しい pid ファイルの再生成を終了します find $logs_path -mtime +30 | xargs rm -rf ## 30 日前のログ ファイルを削除します [root@localhost ~]# chmod +x fenge.sh ## 実行権限を付与します [root@localhost ~]# ./fenge.sh ## スクリプト ファイルを実行します

2. ログのセグメンテーションを確認する

[root@localhost ~]# cd /var/log/nginx/ ##Nginx ログディレクトリに切り替えます [root@localhost nginx]# ls
test.com-アクセス.log-20191112
[root@localhost nginx]# date -s 2019-11-14 ##日付を明日の時刻に変更します 2019年11月14日木曜日 00:00:00 CST
[root@localhost nginx]# cd ~
[root@localhost ~]# ./fenge.sh ##スクリプトを再実行します [root@localhost ~]# cd /var/log/nginx/
[root@localhost nginx]# ls ##ログセグメンテーションログファイルを表示 test.com-access.log-20191112 test.com-access.log-20191113

3. 定期的にスケジュールされたタスクを設定する

[root@localhost nginx]# crontab -e ##定期的にスケジュールされたタスク 0 1 * * * /opt/fenge.sh

以上がこの記事の全内容です。皆様の勉強のお役に立てれば幸いです。また、123WORDPRESS.COM を応援していただければ幸いです。

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

<<:  Windows 64 ビット版の MySQL 8.0.15 インストール チュートリアル

>>:  Reactコンポーネントのライフサイクル機能についての簡単な説明

推薦する

Linux で PCIe のバージョンと速度を確認する方法

PCIE には 4 つの異なる仕様があります。下の図でそのうちの 2 つを見てみましょう。マザーボー...

MySQL ジョイントインデックス(複合インデックス)の実装

共同インデックスこの記事におけるジョイントインデックスの定義は次のとおりです (MySQL): AL...

CentOS7 64ビットインストールmysqlグラフィックチュートリアル

MySQL をインストールするための前提条件: CentOS 7 64 ビットをインストールし、Ce...

HTML 内の CSS および JS リンクのバージョン番号 (キャッシュを更新)

背景検索エンジンで「.htaccess キャッシュ」というキーワードを検索すると、ウェブサイトのファ...

Linux の Centos7 に Mysql5.7.19 をインストールする詳細なチュートリアル

1. MySQLをダウンロードするURL: https://dev.mysql.com/downlo...

html2canvas で破線境界線を実装する例

html2canvas は、HTML 要素からキャンバスを生成するライブラリです。描画されるキャンバ...

React Nativeでシンプルなゲームエンジンを作る

目次導入始めるReact Nativeゲームエンジンの簡単な紹介React Nativeでスネークゲ...

Portainer を使用して Docker のビジュアル インターフェースを構築する方法

ポーテナーの紹介Portainer は、ステータス表示パネル、アプリケーション テンプレートの迅速な...

HTMLでのラジオ値の取得、割り当て、登録の詳細な説明

1. ラジオのグループ化名前が同じであれば、それらはグループであり、つまり、次のようにグループ内で選...

MySQL XA で分散トランザクションを実装する方法

目次序文XA プロトコルMySQL XA で分散トランザクションを実装する方法序文MySQL が単一...

vue.config.js からプロジェクト最適化までの vue2.x 構成

目次序文vue.config.js 構成オプションパッケージサイズを縮小するためのパッケージの最適化...

HTMLメタの大きな役割

メタ属性には、name と http-equiv の 2 つがあります。 name 属性は主に、We...

react+antdプロジェクトをゼロから構築する方法を教えます

これまでの記事はすべて私自身の学習記録であり、主に以前に遭遇した落とし穴を忘れないようにするためのも...

Vueモバイル端末は画面上で指をスライドさせる方向を判定する

vueモバイル端末は、画面上で指をスライドさせる方向を判断します。具体的な内容は次のとおりです。これ...

友達やグループを見つけるためのJavaScriptのLayim

現在、layuiの関係者はlayim友達検索ページの構造とスタイルを提供していません。私は個人的に非...