JavaScriptを有効にしてください

Nginxのバージョンとコンパイルオプションを確認する方法

 · 

Nginxのバージョン情報を表示するコマンド

1
nginx -v

実行結果:

1
nginx version: nginx/1.25.1

このコマンドは、標準エラー出力にnginxのバージョンを表示します。

あまりすることは無いと思いますが、標準エラー出力なのでファイルに出力する際のコマンドは下記になります。

1
nginx -v 2> nginx-version.txt

nginxに限ったことではないですがバージョン出力は基本的に標準エラー出力です。
2を付けないとファイルに出力されません。

リダイレクトの基本的な形式は下記の通りです。

  • 標準出力のリダイレクト: > オペレータを使用します。例えば、ls > files.txt は、ls コマンドの出力を files.txt ファイルにリダイレクトします。
  • 標準エラー出力のリダイレクト: 2> オペレータを使用します。例えば、command 2> error.log は、command のエラーメッセージを error.log ファイルにリダイレクトします。
  • 標準出力と標準エラー出力の両方をリダイレクト: >& オペレータまたは > file 2>&1 の形式を使用します。例えば、command > output.log 2>&1 は、command の正常な出力とエラーメッセージの両方を output.log にリダイレクトします。

Nginxのバージョンに加えて、コンパイル時のオプション情報も表示する

1
nginx -V

このコマンドは、Nginxがどのようにコンパイルされたか(使用されたコンフィグレーションオプションを含む)についての詳細情報を提供します。

実行結果:

1
2
3
4
5
nginx version: nginx/1.25.1
built by gcc 12.2.0 (Debian 12.2.0-14) 
built with OpenSSL 3.0.9 30 May 2023
TLS SNI support enabled
configure arguments: --prefix=/etc/nginx --sbin-path=/usr/sbin/nginx --modules-path=/usr/lib/nginx/modules --conf-path=/etc/nginx/nginx.conf --error-log-path=/var/log/nginx/error.log --http-log-path=/var/log/nginx/access.log --pid-path=/var/run/nginx.pid --lock-path=/var/run/nginx.lock --http-client-body-temp-path=/var/cache/nginx/client_temp --http-proxy-temp-path=/var/cache/nginx/proxy_temp --http-fastcgi-temp-path=/var/cache/nginx/fastcgi_temp --http-uwsgi-temp-path=/var/cache/nginx/uwsgi_temp --http-scgi-temp-path=/var/cache/nginx/scgi_temp --user=nginx --group=nginx --with-compat --with-file-aio --with-threads --with-http_addition_module --with-http_auth_request_module --with-http_dav_module --with-http_flv_module --with-http_gunzip_module --with-http_gzip_static_module --with-http_mp4_module --with-http_random_index_module --with-http_realip_module --with-http_secure_link_module --with-http_slice_module --with-http_ssl_module --with-http_stub_status_module --with-http_sub_module --with-http_v2_module --with-http_v3_module --with-mail --with-mail_ssl_module --with-stream --with-stream_realip_module --with-stream_ssl_module --with-stream_ssl_preread_module --with-cc-opt='-g -O2 -ffile-prefix-map=/data/builder/debuild/nginx-1.25.1/debian/debuild-base/nginx-1.25.1=. -fstack-protector-strong -Wformat -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -fPIC' --with-ld-opt='-Wl,-z,relro -Wl,-z,now -Wl,--as-needed -pie'

こちらはあまり使う事もないと思いますが、下記の用途で使用されることがあります。

トラブルシューティング

Nginxの挙動に予期せぬ問題が発生した場合、問題の原因を特定するのに役立つコンパイル時の設定を確認できます。
例えば、特定のモジュールが有効になっているかどうか、または特定のパフォーマンス関連のオプションが使用されているかどうかを確認できます。

セキュリティ設定の確認

Nginxをセキュアに設定するためには、SSL/TLSの設定やセキュリティ関連のモジュールが適切に有効化されている必要があります。
これらのセキュリティ関連のオプションがコンパイル時にどのように設定されたかを確認できます。

パフォーマンスチューニング

Nginxのパフォーマンスを最適化するには、ファイルの非同期I/O、スレッドの使用、キャッシュの設定など、多くのコンパイル時オプションを調整することが重要です。
これらのパフォーマンス関連の設定がどのように構成されているかを理解するのに役立ちます。

環境の再現

新しいサーバーをセットアップする際や、既存の環境を別の場所に移行する際に、元の環境と同じ設定でNginxをコンパイルする必要があります。
元の環境でのコンパイルオプションを確認し、新しい環境で同じオプションを使用してNginxをコンパイルできます。

ドキュメント作成とレポーティング

システムのドキュメントを作成する際や、サポートリクエストを送る際に、Nginxの正確なバージョン情報とコンパイルオプションを提供することが求められることがあります。
この情報を簡単に収集する手段を提供します。

ブラウザでNginxのバージョンを確認する方法

Nginxの設定によってはブラウザでもバージョンが確認できます。

ChromeでNginxのバージョンを確認する方法

1.開発者ツールを起動

開発者ツールを開くには、いくつかの方法があります。

  • キーボードショートカット: WindowsではCtrl + Shift + Iを、MacではCmd + Option + Iを押します。
  • メニューから開く: Chromeメニュー(右上の三点リーダー)→ その他のツール → 開発者ツール、を選択します。
  • ページ上で右クリック → 「検証」を選択します。

2.Networkタブに移動

開発者ツールが開いたら、「Network」タブをクリックします。
このタブが見当たらない場合は、タブバーを左右にスクロールするか、»アイコンをクリックして表示されるメニューから選択できます。

3.ページのリロード

Networkタブが開いている状態で、ページをリロードします(F5キーを押すか、ブラウザのリロードボタンをクリック)。
これにより、ページの読み込みに関連するすべてのネットワークリクエストがNetworkタブに記録されます。

4.リクエストを選択

ページのリロード後、Networkタブに表示されるリクエストの一覧から、確認したいリクエストをクリックします。
多くの場合、ページ自体に関連するリクエストはリストの最初にあり、ドメイン名がページのURLと一致しています。

5.ヘッダーを確認

リクエストを選択すると、右側に詳細パネルが表示されます。
このパネルの「Headers」セクションを見ると、リクエストヘッダーとレスポンスヘッダーが表示されます。
レスポンスヘッダーの中にServerヘッダーがあれば、そこにサーバーの種類やバージョンが記載されています。

ChromeのNetworkタブでNginxのバージョンを確認

EdgeでNginxのバージョンを確認する方法

1.開発者ツールを起動

開発者ツールを開くには、いくつかの方法があります。

  • キーボードショートカット: WindowsではCtrl + Shift + Iを、MacではCmd + Option + Iを押します。
  • メニューから開く: Edgeメニュー(右上の三点リーダー)→ その他のツール → 開発者ツール、を選択します。
  • ページ上で右クリック → 「検証」または「Inspect」を選択します。

2.Networkタブに移動

開発者ツールが開いたら、「Network」タブをクリックします。
このタブが見当たらない場合は、タブバーを左右にスクロールするか、»アイコンをクリックして表示されるメニューから選択できます。

3.ページのリロード

Networkタブが開いている状態で、ページをリロードします(F5キーを押すか、ブラウザのリロードボタンをクリック)。
これにより、ページの読み込みに関連するすべてのネットワークリクエストがNetworkタブに記録されます。

4.リクエストを選択

ページのリロード後、Networkタブに表示されるリクエストの一覧から、確認したいリクエストをクリックします。
多くの場合、ページ自体に関連するリクエストはリストの最初にあり、ドメイン名がページのURLと一致しています。

5.ヘッダーを確認

リクエストを選択すると、右側に詳細パネルが表示されます。
このパネルの「Headers」セクションを見ると、リクエストヘッダーとレスポンスヘッダーが表示されます。
レスポンスヘッダーの中にServerヘッダーがあれば、そこにサーバーの種類やバージョンが記載されています。

EdgeのNetworkタブでNginxのバージョンを確認

ブラウザでNginxのバージョンを表示させたくない場合

前述した通りNginxの設定によってブラウザにバージョンが表示されてしまいますが、
こちらはnginx.confserver_tokens Off;を記述することによって非表示にできます。

具体的には下記14行目のように記述します。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
user  nginx;
worker_processes  auto;

error_log  /var/log/nginx/error.log notice;
pid        /var/run/nginx.pid;


events {
    worker_connections  1024;
}


http {
    server_tokens Off;
    include       /etc/nginx/mime.types;
    default_type  application/octet-stream;

    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';

    access_log  /var/log/nginx/access.log  main;

    sendfile        on;
    #tcp_nopush     on;

    keepalive_timeout  65;

    #gzip  on;

    include /etc/nginx/conf.d/*.conf;
}

nginxのデフォルトのファイルには、server_tokensは記載されていないためOnになってしまっています。(記載されていないとOnになります。nginxのドキュメント を参照の事)
本番環境で公開してもいいことはないので、基本的にOffにしておきましょう。

server_tokensOffにすると下記のように表示されます。
server_tokensをOffにした時の表示

なぜserver_tokensはデフォルトでonに設定されているの?

Nginxがデフォルトでserver_tokensをonに設定している理由は、特に公式な説明はありませんが、一般的には以下のような理由が考えられます。

1.透明性

オープンソースプロジェクトとして、Nginxは使用しているバージョンを公開することで透明性を確保しようとしています。
これにより、開発者やシステム管理者は特定の機能や修正が適用されているかを簡単に確認できます。

2.デバッグとサポート

バージョン情報が公開されていると、トラブルシューティングやサポートが容易になります。
問題が発生した際に、どのバージョンのNginxが動作しているかを迅速に特定できるため、解決策を見つけやすくなります。

どちらも開発者のためのサポートが主な理由のようです。
セキュリティ上の観点からNginxのバージョンが公開されるのはよろしくないので、個人的にはデフォルトで非表示にしてもいい気はしてます。


スポンサーリンク

共有

もふもふ
著者
もふもふ
プログラマ。汎用系→ゲームエンジニア→Webエンジニア→QAエンジニア