この記事はアピリッツの技術ブログ「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のエラーという形で表面化しましたが、もしかすると他のミドルウェアとの連携でもハイフンが原因で正常に動かない等の問題があるかもしれません。
サーバー名を設定する際にアンダーバーを使うのはリスクがあるため今後は使わないようにしようと思います。