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コンポーネントのライフサイクル機能についての簡単な説明

推薦する

Dockerコンテナ内でホストDocker操作を呼び出して実行する

まず、この投稿は Docker 初心者向けです。もちろん、ベテランであれば記事中の分割線以降の操作方...

正の整数かどうかを判断するMYSQLカスタム関数の例コード

関数を記述できます。主に正規表現を使用して判断を行います。入力文字が空の場合は、「-」を使用して置き...

Vue の計算プロパティの紹介

目次1. 計算プロパティとは何ですか? 2. 計算プロパティの構文3. 例1. 計算プロパティとは何...

MySQL は ACID トランザクションをどのように実装しますか?

序文最近、面接中に、MySQL の InnoDB エンジンがどのようにトランザクションを実装している...

Ubuntuデュアルシステムが起動時に停止する問題の解決方法の詳細な説明

起動時に Ubuntu デュアル システムが停止する問題の解決方法 (Ubuntu 16.04 およ...

MySQL 8.0.23 インストールの超詳細なチュートリアル

目次序文1. 公式サイトからMySQLをダウンロードする2. 解凍ファイルを設定する3. 初期化4....

Nginx の起動に失敗した場合のいくつかのエラー処理の詳細な説明

Nginx を Web サーバーとして使用する際に、次の問題が発生しました。 1. nginxの起動...

17 個の JavaScript ワンライナー

目次1. DOMとBOM関連1. 要素にフォーカスがあるかどうかを確認する2. 要素の兄弟ノードをす...

相同性とクロスドメイン、jsonp(関数カプセル化)、CORS原則の詳細な分析

目次同一起源ポリシーAjax リクエストの制限: Ajaxは自身のサーバーにのみリクエストを送信でき...

MySQL 5.7 でパスワードを忘れた場合の解決方法の詳細な説明

環境: [root@centos7 ~]# uname -r 3.10.0-514.el7.x86_...

検索履歴を実装するjQueryプラグイン

毎日jQueryプラグイン - 検索履歴を作成するためのものです。参考までに、具体的な内容は次のとお...

CSS3はシームレスなスクロールと手ぶれ防止を実現します

質問画像とテキストのシームレスなスクロールは、一般的に携帯電話では良い効果をもたらしますが、一部のモ...

Linuxロスレス展開方法

概要クラウド プラットフォームのお客様のサーバーでは、業務量が拡大し続けるとディスク容量が不足する場...

Vue3の一般的なAPIの使用方法の紹介

目次ライフサイクルの変化反応的な参照vue2.x では ref を使用して要素タグを取得します。vu...

Docker クリーンアップ環境操作

丁寧に掃除を始めましょう!未使用ボリュームの一覧docker ボリューム ls -qf dangli...