前回紹介したnginx.conf についてもう少し掘り下げて説明します。
ログフォーマット
log_format main '$remote_addr - $remote_user [$time_local] "$request" ' '"$status" $body_bytes_sent "$http_referer" ' '"$http_user_agent" "$http_x_forwarded_for" "$gzip_ratio"'; access_log /var/log/nginx/access.log main;
nginx は良い所のたくさんあるソフトウェアですが、新しいだけに nginx のデフォルトのログフォーマットのままではAWStatsなどのログ解析ソフトに読み込ませる事ができません。そこで Apache の combind フォーマットと同じになるように設定しています。
この設定はGoogleで検索して見つけたのですが、nginx のバージョンが違うのかそのままでは AWStats や Webalizer でエラーになった為、多少変更しています。$request と $status をダブルクォーテーションで囲む必要がありました。
VirtualHost設定
nginxの設定はとても簡単で、単純な VirtualHost の設定は以下のような少ない記述だけで十分です。
# error catch server { listen 80; server_name _; root /var/www/temp; index index.html; access_log /var/log/nginx/temp-access.log main; }
root を DocumentRoot, index を DirectoryIndex と読み替えれば、Apacheの設定ができる人にはほぼ説明がいらないくらいだと思います。”server_name _;”は全てのリクエストを受け付けるVirtualHostで Host: ヘッダの指定されていないリクエストなどの他の VirtualHost が処理しないリクエストがこの VirtualHost に回ってきます。当然、サービスを提供する VirtualHost には適切な server_name を設定しておきます。
脆弱製のあるサーバを探しているスキャナの多くは IP アドレスを手がかりにサーバに接続してくるので、このような設定にしておく事で、スキャナのリクエストを「何も無い VirtualHost」に閉じ込めてしまう事ができます。実際にこのホストにも phpMyAdmin や xampp の管理画面を探すリクエストが来ています。
この設定は、codered が流行した頃に大量のアタックのログを本来のサービスのログから分離する為に始めたんですが、あまり一般的じゃないのかな。
[…] ここまで来たら、再びnginxを立ち上げます。エラーが出なければ、設定したホスト名宛にブラウザで接続してみて(http://ホスト名/)、403のエラーが返ってくることを確認します。そして、作成したログフォルダのアクセスログに403エラーが記録されていることが確認できれば、問題なしです。ここで、もう一度ngnixを止めます。(テスト環境なのでnginxはこれ以上設定しません。こことか、ここを参照したりすると、まだまだwebサーバとしてやるべき設定は色々ありそうだと分かりますが、とりあえず今回はそこまでは行いません) […]