やりたいこと
自宅に設置しているNAS(QNAP)のWebサーバーを利用して、特定のグループ内(やや不特定多数)にファイルを公開する事になり、アクセスログを収集するための設定変更を行った時のメモです。
- QNAP Webサーバーからアクセスログを取得したい
- HTTPだけでなく、HTTPSのログも取得したい
- 取得したログファイルは共有フォルダに出力して手軽に参照したい
環境前提
- NAS は QNAP TS-431P
2018年購入でとても古い(記事を書いた時点で6年前、まだ現役!) - QTS のバージョンは 4.5.4.2627
最新の 5.xx にはあげていません - ログ出力フォルダは /share/Log/Web
Web管理画面から作成し、administrators(httpd)のみ書込可、他は参照権限のみ
結論
Web管理画面からは設定変更できないため、ターミナルでログインしてApacheのconfファイルを直接編集する必要がありました。また、Webサーバーを起動時にconfファイルが自動更新されてしまうため、編集内容が消去されないよう小細工が必要でした。
HTTPログ
apache.confにCustomLogディレクティブを記載しても、なぜかWebサーバー起動時に削除されてしまう。Includeディレクティブは削除されないため、外部ファイルに定義して読み込ませる。
apache-log.confファイルを作成し、出力したいログを適当(適切)に定義する。
[~] # vi /etc/config/apache/extra/apache-log.conf
LogFormat "%{%Y/%m/%d %H:%M:%S}t %a %{User-agent}i %>s %m %U" accesslog
CustomLog "|/usr/local/apache/bin/rotatelogs -l /share/Log/Web/accesslog_%Y-%m-%d_http.log 86400" accesslog
apache.confに作成したファイルを読み込ませる。
末尾に外部ファイルをIncludeする箇所があるため、作成したファイルを追加で指定する。
[~] # vi /etc/config/apache/apache.conf
# (中略)
<IfModule ssl_module>
SSLRandomSeed startup builtin
SSLRandomSeed connect builtin
</IfModule>
<IfModule reqtimeout_module>
RequestReadTimeout header=20-40,MinRate=500 body=20,MinRate=500
</IfModule>
Include /etc/config/apache/extra/apache-ssl.conf
Include /etc/config/apache/extra/apache-fastcgi.conf
Include /etc/config/apache/extra/apache-musicstation.conf
Include /etc/config/apache/extra/apache-photo.conf
Include /etc/config/apache/extra/apache-video.conf
Include /etc/config/apache/extra/apache-common.conf
Include /etc/config/apache/extra/apache-http-compress.conf
# 追加
Include /etc/config/apache/extra/apache-log.conf
# 追加(ここまで)
HTTPSログ
apache-ssl.confもサーバー起動時に置換されてしまうため、元ネタとなるファイルを編集する。
VirtualHostディレクティブ内に出力したいログを適当(適切)に定義する。
[~] # vi /etc/default_config/apache-ssl.conf
# (中略)
<FilesMatch "\.(cgi|shtml|phtml|php)$">
SSLOptions +StdEnvVars
</FilesMatch>
<Directory "/usr/local/apache/cgi-bin">
SSLOptions +StdEnvVars
</Directory>
BrowserMatch ".*MSIE.*" \
nokeepalive ssl-unclean-shutdown \
downgrade-1.0 force-response-1.0
# 追加
LogFormat "%{%Y/%m/%d %H:%M:%S}t %a %{User-agent}i %>s %m %U" accesslog
CustomLog "|/usr/local/apache/bin/rotatelogs -l /share/Log/Web/accesslog_%Y-%m-%d_https.log 86400" accesslog
# 追加(ここまで)
</VirtualHost>
再起動
設定をすべて保存したら、Webサーバーを再起動します。
[~] # /etc/init.d/Qthttpd.sh restart
編集後記
サーバー起動ごとに設定が自動更新されてしまう点を回避するのが難儀しました。
アクセスログくらいWeb管理画面から設定できても良いのではと思いますが、最近のNASは高機能なものが多く、一般家庭向けの製品は必要最低限の機能にしか手が回っていないのかもしれません。
今後に期待してます、QNAPさん。