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に以下のパーサーを追加した。

[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に対し、以下のような設定を追加。

[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のバーチャルホスト設定からログ設定を削除し、グローバル設定に集約

こうすることでログファイルを統一でき、管理が楽になる。

  1. /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>
    
  2. /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がインストール済

手順

  1. libfcgi-perlをインストールする
    sudo apt install libfcgi-perl
    
  2. /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
    
  3. サービスを有効化する
    sudo systemctl enable adiary.service
    sudo systemctl start adiary.service
    
  4. 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        /;
       }
    }
    
  5. 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証明書のキャッシュをクリアする方法

TLS証明書を更新したらキャッシュの証明書とずれてエラーが出ることがあるので、キャッシュクリアでこの不整合を解除する方法。

確認環境

  • Microsoft Edge 148.0.3967.96
  • Windows 11 Pro 25H2 (OSビルド 26200.8457)

やり方

  1. あらかじめEdgeを落としておく
  2. コントロールパネルを開き、インターネットオプションを開く
    • inetcpl.cplをコマンド実行しても開く
    • コントロールパネルはスタートメニューを開き「kon」と入力すると出てくる
  3. コンテンツタブを開き「SSLキャッシュのクリア」ボタンを押す
  4. Edgeを起動するとエラーが消えているはず

あとがき

Edgeを再起動しなくても反映される可能性はあるがそこまで見ていない。

2026/06/04(木)Windows 11でコマンドを使って標準のブラウザを変更する

投稿日:

どこぞのやつはライセンスが面倒なのと、無料利用だと課金誘導のポップアップが出て面倒そうなので完全無償のPS-SFTAを使って解決する。

確認環境

  • Windows 11 Pro 25H2 (OSビルド 26200.8457)
  • SFTA.ps1 22a3229

やり方

  1. PS-SFTAにあるSFTA.ps1を拾ってきてどっかに置く
  2. 標準ブラウザ変更保護プログラムである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"
    
  3. 管理者権限の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の設定にあるアプリ→既定のアプリはレイアウトシフトが酷く、少し待たないと操作できないのも面倒なので、そういったフラストレーションから解放されるのも大きい。