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 の SQL 文の概要

この記事では、テーブルの作成、フィールドの追加、フィールドの変更、インデックスの追加を行う一般的な ...

SQL 集計、グループ化、並べ替え

目次1. 集計クエリ1. COUNT関数2. SUM関数3. AVG関数4. MAX関数とMIN関数...

HTML Web ページ リスト タグ学習チュートリアル

HTML Web ページ リスト タグの学習チュートリアル。 HTML ページでは、リストはアウトラ...

MySQLで論理SQLを置き換える際の落とし穴を回避する方法の詳細な説明

重複キーの置換と挿入の違い置換の使用法競合がない場合、挿入と同等となり、他の列のデフォルト値が使用さ...

キャンバス操作プラグイン fabric.js の使い方を詳しく解説

Fabric.js は非常に便利なキャンバス操作プラグインです。ここでは、日常のプロジェクトで使用さ...

VMware ワークステーションの仮想マシンの互換性の問題に対する解決策

VMware ワークステーションの仮想マシンの互換性の問題を解決するにはどうすればよいですか?ノート...

テキストまたはJSONを返すようにnginxを設定する方法

特定のインターフェースをリクエストするときに、指定されたテキスト文字列または JSON 文字列を返す...

fullpage.js フルスクリーンスクロールの具体的な使い方

1.fullpage.js ダウンロードアドレスhttps://github.com/alvarot...

Echarts は 1 つのグラフ内で異なる X 軸を切り替える機能を実装します (サンプル コード)

レンダリング下の画像のような効果を実現したい場合は、読み続けてアニメーション画像に直接進んでください...

JavaベースのMySQLバックアップテーブル操作

コアはmysqldumpとランタイムです操作は実際にはそれほど難しくありません。バックアップ操作を実...

ウェブページ読み込み時に左右にジャンプする原因の分析と解決

最近、ウェブサイトを設計するときにこの問題に遭遇しています。メンバーセンターを設計し、コンテンツを ...

MySQLエラー10061を解決する方法

この記事では、「'localhost' (10061) の MySQL サーバーに接...

CentOS7 で docker を使用して Apollo 構成センターをデプロイする実装

Apollo オープンソース アドレス: https://github.com/ctripcorp/...

MySQL データベースにおける高同時実行性の問題を解決する方法

序文スタートアップ企業が最初はモノリシック アプリケーションを主要なアーキテクチャとして使用し、通常...

Mysql系SQLクエリ文の書き順と実行順を詳しく解説

目次1. 完全なSQLクエリステートメントの記述順序2. 完全なSQL文の実行順序3. select...