0
0

QNAP Webサーバーでアクセスログを出力する

Last updated at Posted at 2024-07-27

やりたいこと

自宅に設置している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
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
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
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さん。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0