デフォルトのnginxの設定のままだとエラーページにnginxのバージョンが表示されてしまいます。
セキュリティを考えると良くないので表示されないようにします。設定は簡単で、nginx.confに「server_tokens off;」と記載するだけです。nginx.confは /etc/nginx 配下にあります。
user nginx; worker_processes 1; : : http { : server_tokens off; : }
nginxを再起動して同じエラーページを表示してみると、バージョンが表示されなくなります。
とは言ってもWEBサーバーにnginxを使っていることはバレてしまいます。ユーザーがサイト内の存在しないURLにアクセスすることでサーバーからのエラー情報を取得しようとする場合に備え、専用のエラーページを表示させるようにしておこうと思います。
初期設定のnginxではdefault.confの「error_page 404 /404.html;」の記載がコメントアウトされていますので、このコメントアウトを外して専用のエラーページ(40x.html)表示に変えます。default.confは /etc/nginx/conf.d 配下にあります。
server { : error_page 400 403 404 /40x.html; location = /40x.html { root /usr/share/nginx/html; } : : }
初期設定だとHTTPのステータスコード404しか記載がありませんので400と403も独自に追加しました。意味は以下です。
400(Bad Request)・・不正なリクエスト
403(Forbidden)・・禁止されているリクエスト
404(Not Found)・・リソースが見つからない
default.confへの記載が終わったら40x.htmlを新規作成して配置します。40x.htmlには以下を記載します。
<!DOCTYPE HTML> <html><head> <title>404 Not Found</title> </head><body> <h1>Not Found</h1> <p>The requested URL was not found on this server.</p> </body></html>
HTTPステータス400、403も404エラーとして表示させています。この辺は好みによってエラー文言を変えてください。この40x.htmlを /usr/share/nginx/html 配下に配置します。このディレクトリはroot権限がないと書き込みできないです。
nginxを再起動して(存在しないhtmlファイルを指定するなどして)エラーページを表示してみます。
という画面が表示されるかと思いましたが、
となりました。実はコレ、、Apacheのエラー画面のHTMLソースをコピってきたもので、キャッシュが残っていたのかフォントがApacheのままになってしまいました。Apacheで動いているように見せかけて、実はnginxで動いているという・・これはこれでそのままとします。
ちなみに /usr/share/nginx/html 配下には50x.htmlというのが格納されています。これはHTTPステータスが500、502、503、504のときに表示されるものです(default.confに記載されています)。50x.htmlにはnginxの記載がありますのでnginxという文言を隠すのであれば50x.htmlも書き換えたほうが良いでしょう。
少し別の話題になりますが、nginxではエラーページ表示の代わりにレスポンスを返さない、という設定ができます。HTTP標準にはないnginx独自のステータスコード444を指定することで、レスポンスヘッダを返さずに接続を強制的に終了するようです。
server { listen 80; server_name dummy; root /var/www/html/dummy; location / { return 444; } : : }
この設定をしたnginxにアクセスすると、ブラウザではこのように表示されます。FireFoxの例です。
エラーページとステータスコード444をうまく使い分けると良さそうです。