その他
    ホーム 技術発信 DoRuby Apacheを最新版に更新したらnagiosのhttp監視がBad Requestになった話
    Apacheを最新版に更新したらnagiosのhttp監視がBad Requestになった話
     

    Apacheを最新版に更新したらnagiosのhttp監視がBad Requestになった話

    この記事はアピリッツの技術ブログ「DoRuby」から移行した記事です。情報が古い可能性がありますのでご注意ください。


    こんにちは。アピリッツの本多です。 今回は先日apacheを最新版に更新した際に発生した事象についてご紹介します。 こちらはAWS上で稼働しているEC2インスタンス(OSはAmazon Linux)にて発生したものですが、他の環境でも発生した際のご参考になればと思い、本記事を投稿させて頂きます。

    エラー発生の経緯

    2017-09-18にAmazon Linux向けに「重要度:重要」のapache(httpd)のアップデートが配信されました。
    https://alas.aws.amazon.com/ALAS-2017-896.html

    そのため先日、稼働中のwebサーバー(以降server_01と表記)にてapacheの更新を実施したのですが、更新直後からnagios(server_01とは別のサーバー上で稼働)の監視項目の1つとして設定しているhttp監視からアラートが発生するようになりました。

    手動で確認してもこの通り400 Bad Requestが返ってきます。
    apacheのアップデート前までは200 OKでした。

    /usr/lib64/nagios/plugins/check_http -H server_01 -u /
    => HTTP WARNING: HTTP/1.1 400 Bad Request - 513 bytes in 0.002 second response time |time=0.001673s;;;0.000000 size=513B;;;0
    

    nagios設定

    nagiosサーバーのhostsの設定にサーバー名を書いて、nagiosのcfgファイルでaddressの部分にそのサーバー名を指定していました。

    # hosts
    10.0.0.1 server_01
    10.0.0.2 server_02
    
    # cfgファイル
    define host{
        use                     linux-server
        host_name               server-01
        alias                   server-01
        address                 server_01
        }
    ~
    define service{
        use                             generic-service
        host_name                       server-01
        service_description             HTTP
        check_command                   check_http! -u /
        notifications_enabled           1
        }
    

    原因

    サーバー名「server_01」にアンダーバーを使用していた事により、エラーが発生していました。

    汎用JPドメイン名登録等に関する技術細則
    https://jprs.jp/doc/rule/saisoku-1-wideusejp.html

    「ドメイン名」は、ラベルをピリオド(”.”)で区切って連結した文字列であ
    る。

    「ラベル」は、本技術細則により定められるASCIIラベルおよび日本語ラベル
    により構成される。

    「ASCIIラベル」は、英字(”A”から”Z”)、数字(”0″から”9″)、ハイフン(”-“)
    からなる文字列である。ただし、ASCIIラベルの先頭と末尾の文字はハイフン
    であってはならない。

    ドメイン名については上記のように定義されているのですが、どうやら今回のapacheのアップデートにて、それを厳密にチェックする判定が導入されたようです。
    そのため、ドメイン名に上記の文字列以外(今回のケースではアンダーバー)が入ると、400 Bad Requestを返すようになったと思われます。

    nagios設定 修正後

    おとなしく、nagiosのcfgをIPアドレスに変更する事でエラーが解消されました。

    # cfgファイル
    define host{
        use                     linux-server
        host_name               server-01
        alias                   server-01
        address                 10.0.0.1
        }
    ~
    define service{
        use                             generic-service
        host_name                       server-01
        service_description             HTTP
        check_command                   check_http! -u /
        notifications_enabled           1
        }
    

    手動で実行した際の結果もこの通りです。

    /usr/lib64/nagios/plugins/check_http -H 10.0.0.1 -u /
    => HTTP OK: HTTP/1.1 200 OK - 352 bytes in 0.016 second response time |time=0.016100s;;;0.000000 size=352B;;;0
    

    まとめ

    今回はapacheのエラーという形で表面化しましたが、もしかすると他のミドルウェアとの連携でもハイフンが原因で正常に動かない等の問題があるかもしれません。
    サーバー名を設定する際にアンダーバーを使うのはリスクがあるため今後は使わないようにしようと思います。