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";
}
}
