カテゴリー
WordPress

【nginx】server_tokens をオフにしてバージョン情報を非表示にする手順♪

nginx のバージョン情報を非表示にした方がセキュリティ上堅牢になりますの♪ある日ふと確認してみましたら、バージョン情報が表示されてしまっております><。

今回は、確認方法と設定の変更方法をメモいたします。

確認方法

curl -I http:ドメイン

オプションの意味です。

-I, –head

HTTP/FTP/FILE HTTP ヘッダのみを取得します。 文書のヘッダのみを取得する HTTP プロトコルの HEAD コマンドの機能が利用されます。 FTP あるいは FILE プロトコルのファイルに対して用いられた場合、ファイルサイズと最終更新時刻のみが表示されます。

 

また、ちなみになのですが curl については次のページで以前調べた情報が参考になりました♪

確認例・結果

$ curl -I https://oki2a24.com
HTTP/1.1 200 OK
Server: nginx/1.8.0
Date: Sun, 10 May 2015 10:46:49 GMT
Content-Type: text/html; charset=UTF-8
Connection: keep-alive
Vary: Accept-Encoding
Vary: Accept-Encoding
X-Cached: Sun, 10 May 2015 10:46:48 GMT
X-Pingback: https://oki2a24.com/xmlrpc.php
Link: <http://wp.me/2dTjg>; rel=shortlink

$

nginx/1.8.0 とバージョン情報が表示されております><。

nginx のバージョン情報を消す設定編集

nginx.conf の http, server, location ディレクティブの server_tokens ディレクティブの設定を変更いたします。

まずは、ファイルを開きます。

vim /etc/nginx/nginx.conf

http { } 内の最後の方に次の 2 行を追加いたしました。

    # エラーメッセージやレスポンスの Server ヘッダに Nginx のバージョン文字列を含めないようにする
    server_tokens off;

設定自体はこれにて終了です!

変更した設定の文法チェック、反映、確認

まずは nginx -t  コマンドで文法チェックです。

# nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
#

問題なしですの♪

続いて service nginx reload コマンドで、変更を nginx へ反映いたします。

# service nginx reload
nginx を再読み込み中:                                      [  OK  ]
#

これも OK ですの♪

最後に確認いたしましょう。ウェブブラウザから、今までどおり問題なく表示できることを確認いたしました。

続いて本命です。curl -I コマンドでバージョン情報が表示されていないことを確認いたしました。

$ curl -I https://oki2a24.com
HTTP/1.1 200 OK
Server: nginx
Date: Sun, 10 May 2015 11:03:25 GMT
Content-Type: text/html; charset=UTF-8
Connection: keep-alive
Vary: Accept-Encoding
Vary: Accept-Encoding
X-Cached: Sun, 10 May 2015 11:03:24 GMT
X-Pingback: https://oki2a24.com/xmlrpc.php
Link: <http://wp.me/2dTjg>; rel=shortlink

$

nginx/1.8.0 → Server: nginx となり、バージョン情報が無事非表示となりました♪

やったぜ!

おわりに

さくら VPS ってどんな雰囲気かしら?復習も兼ねて次の授業を受けてみましたわ♪

そうしましたら、本投稿の設定についても丁寧に取り挙げられておりました。試しに確かめてみますと、、、ぎゃー><!

急いで修正いたしましたの♪

また修正の際、server_tokens とは何なのかを基礎から学習するのに次の書籍が役に立ちました。

ちなみに、久しぶりの nginx 設定についての投稿となりましたけれども前回はこちらでパーマリンクの設定について取り扱ったのでした。少しでも改善が進み、嬉しいですわ♪

以上です。

おまけ。現在の WordPress 用 nginx 設定ファイル

/etc/nginx/nginx.conf

user  nginx;
# nginxのworkerプロセスの数(通常はCPUのコア数以下に設定)
worker_processes  2;

error_log  /var/log/nginx/error.log warn;
# masterプロセスのプロセスIDを保存するファイル
pid        /var/run/nginx.pid;


events {
    # 1つのworkerプロセスが同時に処理できる最大コネクション数
    worker_connections  1024;
}


http {
    # インクルードファイルでtypesディレクティブはMIMEタイプと拡張子のマッピングを設定
    include       /etc/nginx/mime.types;
    # レスポンスのデフォルトのMIMEタイプを設定
    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() APIを使用
    sendfile        on;
    #tcp_nopush     on;

    # 同じクライアントからの再要求をサーバが待つ時間(秒)
    keepalive_timeout  5;

    # 静的な gzip ファイルがある場合はそれを参照
    gzip_static on;
    # gzip を使用
    gzip on;
    # gzip を使用する HTTP バージョンは 1.0
    gzip_http_version 1.0;
    # http レスポンスに Vary: Accept-Encoding ヘッダを追加
    gzip_vary on;
    # gzipの圧縮レベルを 1 (低圧縮)
    gzip_comp_level 1;
    # gzip 対象とするファイル形式(mine タイプで指定)
    gzip_types text/plain
               text/css
               text/xml
               text/javascript
               application/json
               application/javascript
               application/x-javascript
               application/xml
               application/xml+rss;
    # gzip 非対象。IE 1 から 6、Netscape 4
    gzip_disable "MSIE [1-6]\.";
    gzip_disable "Mozilla/4";
    # Proxy 経由での要求でも gzip 対象とする
    gzip_proxied any;
    # gzip で使用するバッファサイズ(16 8k ならば 16 x 8k = 128k を常時使用)
    gzip_buffers 16 8k;

    # エラーメッセージやレスポンスの Server ヘッダに Nginx のバージョン文字列を含めないようにする
    server_tokens off;

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

/etc/nginx/conf.d/default.conf (今回は未修正)

# ドキュメントルート
root   /var/www/html/oki2a24.com;
# インデックスファイル指定
index  index.php index.html index.htm;

# キャッシュしたファイルが保管されるパスと、キャッシュゾーンの名前、容量を指定
# キャッシュ保管ディレクトリ
# keys_zone=name:size メタデータを格納する共有メモリ領域と、そのサイズ
# levels キャッシュを保存するサブディレクトリ階層の深さ
# inactive アクセスの無いキャッシュを削除するまでの期間
# max_size ゾーン内に保存できるキャッシュ最大値
proxy_cache_path  /var/cache/nginx keys_zone=czone:32m levels=1:2 inactive=3d max_size=256m;
# 利用するキャッシュゾーンの名前を指定
proxy_cache czone;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-Host $host;
proxy_set_header X-Forwarded-Server $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
# キャッシュされた指定レスポンスコードのコンテンツの有効期限
proxy_cache_valid 200 404 1d;

# プロキシサーバ設定
server {
    listen 80 default_server;

    # ドットファイルへのアクセスを禁止、ログへの記録オフ
    location ~ /\. {deny all; access_log off; log_not_found off; }
    # robots.txt へのアクセスはログへの記録オフ
    location = /robots.txt  { access_log off; log_not_found off; }
    # favicon へのアクセスはログへの記録オフ
    location = /favicon.ico { access_log off; log_not_found off; }
    # JavaScript CSS 画像へのアクセスはログへの記録オフ、直ちにプロキシに通しキャッシュ。
    # この期の設定でアクセス元の状態で複数キャッシュを行うが画像ファイルなどは複数キャッシュさせない
    location ~* \.(js|css|png|jpg|jpeg|gif|ico)$ {
        log_not_found off;
        proxy_pass http://unix:/var/run/nginx.sock;
    }

    # プロキシキャッシュ設定
    # 初期値はキャッシュするにセット
    set $do_not_cache 0;

    # GET 時以外はキャッシュしない
    if ($request_method != "GET") {
        set $do_not_cache 1;
    }

    # .php ファイルへ直接アクセスがあるのは基本的に管理ページのみのためキャッシュしない
    if ($uri ~* "\.php$") {
        set $do_not_cache 1;
    }

    # クッキーから、コメント書き込み中、ログイン中、パスワード保護コンテンツはキャッシュしない
    if ($http_cookie ~ ^.*(comment_author_|wordpress_logged_in|wp-postpass_).*$) {
        set $do_not_cache 1;
    }

    # 今まで組み立てたプロキシ設定でキャッシュを実行
    location / {
        proxy_no_cache $do_not_cache;
        proxy_cache_bypass $do_not_cache;
        proxy_cache_key "$scheme://$host$request_uri";
        proxy_pass http://unix:/var/run/nginx.sock;
    }
 
}

# ウェブサーバ設定
server {
    # ポートを指定
    listen unix:/var/run/nginx.sock; 

    # WordPress カスタム パーマネントリンク対応
    try_files $uri $uri/ /index.php?q=$uri&$args;

    # PHP-FPM 設定
    location ~ \.php$ {
        fastcgi_pass   unix:/var/run/php-fpm/php-fpm.sock;
        fastcgi_index  index.php;
        fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
        include        fastcgi_params;
        fastcgi_pass_header "X-Accel-Redirect";
        fastcgi_pass_header "X-Accel-Buffering";
        fastcgi_pass_header "X-Accel-Charset";
        fastcgi_pass_header "X-Accel-Expires";
        fastcgi_pass_header "X-Accel-Limit-Rate";
    }
}

コメントを残す