2026/06/05(金)先日の自宅サーバー移転に対し追加対応をした
投稿日:
昨日、さくらのレンタルサーバでホスティングしていたサイトの大部分を自宅サーバーに移行したが改善点が幾つか見えたので、その追加対応をしたログ。
adiaryをApacheからNginx * FastCGIへ移行
こちらについては構築記事をUbuntuのadiaryをlibfcgi-perlで動かす方法に、パフォーマンス計測記事をサイト環境を移転したのでadiaryのパフォーマンス計測をやってみたに書いている。
ECO-WikiをApacheからNginx * PHP-FPMへ移行
Pukiwiki本体はPHP-FPM、それ以外をApacheで動かすようにしている。キメラ構成。
将来的にドメイン直下に静的コンテンツを置いたり、サイトをレガシー技術で拡張することを念頭に置いて設計しているがKISSだし、意味があるかどうかは謎である。
server {
...前略...
root /var/www/path/to/eco;
location = /wiki {
return 301 /wiki/;
}
location /wiki/ {
try_files $uri /wiki/index.php$is_args$args;
}
location ~ ^/wiki/.+\.php$ {
fastcgi_pass unix:/var/run/php/php8.3-fpm.sock;
fastcgi_index index.php;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
}
location / {
proxy_pass http://apache/;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-Proto $scheme;
}
}
FluentBitにApacheのパーサーを追加
/etc/fluent-bit/parsers.confに以下のパーサーを追加した。(LLMの言った内容のコピペ)
[PARSER]
Name apache_vhost
Format regex
Regex ^(?<vhost>[^:]+):(?<port>\d+) (?<remote_host>[^ ]*) [^ ]* (?<user>[^ ]*) \[(?<time>[^\]]*)\] "(?<method>\S+)(?: +(?<path>[^\"]*?)(?: +\S*)?)?" (?<code>[^ ]*) (?<size>[^ ]*) "(?<referer>[^\"]*)" "(?<agent>[^\"]*)"$
Time_Key time
Time_Format %d/%b/%Y:%H:%M:%S %z
Time_Keep On
[PARSER]
Name apache_error
Format regex
Regex ^\[(?<time>[^\]]*)\] \[(?<module>[^:]*):(?<level>[^\]]*)\] \[pid (?<pid>[^\]]*)\](?: \[client (?<client>[^\]]*)\])? (?<message>.*)$
Time_Key time
Time_Format %a %b %d %H:%M:%S.%L %Y
Time_Keep On
FluentBitでApacheのログをとれるようにした
/etc/fluent-bit/fluent-bit.confに対し、以下のような設定を追加。(LLMの言った内容のコピペ)
[INPUT]
Name tail
Path /var/log/apache2/access.log
Tag apache.access
Parser apache_vhost
DB /var/log/flb_apache.db
Mem_Buf_Limit 5MB
[INPUT]
Name tail
Path /var/log/apache2/error.log
Tag apache.error
Parser apache_error
DB /var/log/flb_apache_error.db
[OUTPUT]
name loki
match apache.*
host ::1
port 9100
labels job=apache, log_type=$TAG[1]
上記の設定にあるポート番号は他の記事と整合するように書いているつもりだが、ひょっとしたらずれているかもしれない。ちなみにうちのサーバーでは上記と別のポートを使っている。
Apacheのバーチャルホスト設定からログ設定を削除し、グローバル設定に集約
こうすることでログファイルを統一でき、管理が楽になる。
/etc/apache2/sites-enabled/hoge.confからログ設定を削除#LogLevel info ssl:warn - ErrorLog ${APACHE_LOG_DIR}/eco-error.log - CustomLog ${APACHE_LOG_DIR}/eco-access.log combined </VirtualHost>/etc/apache2/apache2.confのファイル末尾に共通的なログ設定を追加。vhost_combinedを指定することでログにホスト名が出るようになっているErrorLog ${APACHE_LOG_DIR}/error.log LogFormat "%v:%p %h %l %u %t \"%r\" %>s %O \"%{Referer}i\" \"%{User-Agent}i\"" vhost_combined CustomLog ${APACHE_LOG_DIR}/access.log vhost_combined
壊れていたカウンタを直した
今回のサイト移転に伴い、IPv6側が優先接続されるようになったのか、アクセスカウンタが回らなくなったため、アクセスカウンタにIPv6対応を施した。
具体的にはうちで使っているアクセスカウンタはリモホを見て日本のISPならカウントしているのだが、IPv6ではリモホが取れないためカウントできない問題があった。この問題そのものは去年の8月には気づいてIssueにしていたのだが、対応せず放置していたところ、ちょっとこれは困ると思って対応した。
変更差分としては、UAによるBOT判定を強化した上で、日本のISPかIPv6ならカウントするように変更した。また、条件分岐がmutableでイケてなかったので、Immutableになるように書き直した。
2026/06/05(金)Ubuntuのadiaryをlibfcgi-perlで動かす方法
サイト環境を移転したのでadiaryのパフォーマンス計測をやってみたの環境構築した時のログ。
確認環境
| Env | Ver |
|---|---|
| Ubuntu | 24.04.4 LTS |
| nginx | 1.26.1 |
| adiary | 3.52dev / Extends 0.25.0 |
| libfcgi-perl | 0.82+ds-3build2 |
前提
nginxとperlがインストール済
手順
- libfcgi-perlをインストールする
sudo apt install libfcgi-perl /etc/systemd/system/adiary.serviceを次のように作成し、adiaryのFastCGIデーモンを作る[Unit] Description=adiary daemon After=network.target [Service] Type=simple User=www-data Group=www-data WorkingDirectory=/var/www/path/to ExecStart=/usr/bin/perl /var/www/path/to/adiary.fcgi /var/www/path/to/adiary.sock 10 100 Restart=always [Install] WantedBy=multi-user.target- サービスを有効化する
sudo systemctl enable adiary.service sudo systemctl start adiary.service nginxの設定を書く
server { listen 443 ssl; listen [::]:443 ssl; server_name blog.example.com; client_max_body_size 100M; ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem; root /var/www/path/to/blog; location / { try_files $uri @adiary; } location /__cache { deny all; } location /data { deny all; } location ~ \.cgi$ { deny all; } location @adiary { include fastcgi_params; fastcgi_pass unix:/var/www/path/to/adiary.sock; fastcgi_param Basepath /; } }- nginxを再起動する
sudo systemctl restart nginx
あとがき
adiary.httpd.plがオススメらしいのは見たが、HTTPサーバーは脆弱になりやすいことや、ログの使い勝手がどうなのか確認するのが面倒なこと、IPv6対応させるのが面倒だったことがあり採用しなかった。
2026/06/05(金)サイト環境を移転したのでadiaryのパフォーマンス計測をやってみた
投稿日:
CDNやキャッシュなどは挟まず直にCGIを実行した結果を書いている。
計測にはhttps://blog.lycolia.infoを利用している。今回の計測時はトップに画像多めの長大記事が多数ぶら下がっていたので計測の都合がよかった。
計測に使ったadiaryのバージョン
adiary Version 3.52dev / Extends Version 0.25.0
PageSpeed Insightsのスコア
まずは各環境ごとにPageSpeed Insightsで計測した。
携帯電話
| 環境 | FCP | LCP | SpeedIndex | パフォーマンス |
|---|---|---|---|---|
| さくらのレンタルサーバ | 4.1 | 4.4 | 5.4 | 61.0 |
| 自鯖Apache CGI | 11.0 | 11.5 | 11.0 | 30.0 |
| 自鯖nginx libfcgi-perl | 3.9 | 4.2 | 5.1 | 64.0 |
デスクトップ
| 環境 | FCP | LCP | SpeedIndex | パフォーマンス |
|---|---|---|---|---|
| さくらのレンタルサーバ | 0.6 | 2.8 | 1.3 | 54.0 |
| 自鯖Apache CGI | 0.6 | 2.2 | 1.4 | 57.0 |
| 自鯖nginx libfcgi-perl | 0.8 | 2.6 | 1.3 | 56.0 |
※ 自鯖Apache CGIは自宅サーバーのnginx→apache2環境のCGI実行、自鯖nginx libfcgi-perlは自宅サーバーのnginx→libfcgi-perlのFastCGI実行。
curlで10回叩いたスコア
curlを投げて出てきたtime_totalを書いている。
| 環境 | 10回の合計 | さくらのレンタルサーバとの差 |
|---|---|---|
| さくらのレンタルサーバ | 0.407181秒 | 0.000000秒 |
| 自鯖Apache CGI | 0.403104秒 | -0.004077秒 |
| 自鯖nginx libfcgi-perl | 0.247276秒 | -0.159905秒 |
あとがき
adiaryマニュアルにある通りlibfcgi-perlを使うと劇的に早くなることが分かった。
さくらのレンタルサーバではロードに一秒以上かかっていたこともあったため、それと比べるとかなり早くなるのではないだろうか?
関連記事
2026/06/05(金)Windows 11のEdgeでTLS証明書のキャッシュをクリアする方法
2026/06/04(木)Windows 11でコマンドを使って標準のブラウザを変更する
どこぞのやつはライセンスが面倒なのと、無料利用だと課金誘導のポップアップが出て面倒そうなので完全無償のPS-SFTAを使って解決する。
確認環境
- Windows 11 Pro 25H2 (OSビルド 26200.8457)
- SFTA.ps1 22a3229
やり方
- PS-SFTAにある
SFTA.ps1を拾ってきてどっかに置く - 標準ブラウザ変更保護プログラムであるUCPDとかいうのを殺す
New-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Services\UCPD" -Name "Start" -Value 4 -PropertyType DWORD -Force schtasks /change /disable /tn "\Microsoft\Windows\AppxDeploymentClient\UCPD velocity" - 管理者権限のPowerShellでこれを流す
powershell -ExecutionPolicy Bypass -command "& { . C:/path/to/SFTA.ps1; Set-PTA MSEdgeHTM http; Set-PTA MSEdgeHTM https; Set-FTA MSEdgeHTM .htm; Set-FTA MSEdgeHTM .html }"
あとがき
Windows 11には標準のブラウザを変更するコマンドは用意されておらず、レジストリの操作も単純ではないようなので、やるとしたらWindowsの設定を開き、アプリ→既定のアプリ→Edge→標準ブラウザにするという手間のかかる作業が必要だが、今回の方式ならコマンドを一発叩くだけなので非常に楽である。
しかもWindowsの設定にあるアプリ→既定のアプリはレイアウトシフトが酷く、少し待たないと操作できないのも面倒なので、そういったフラストレーションから解放されるのも大きい。