Xubuntu 24.10で構築した自宅Webサーバーをdo-release-upgrade コマンドで25.04へアップグレードしたら、Webサイトが表示できなくなり、それを修正した件

結論から言えば、chatGPT先生のおかげで修正できた。
chatGPT凄すぎんか?

Xubuntu 24.10で構築した自宅Webサーバーをdo-release-upgrade コマンドで25.04へアップグレードしたら、Webサイトが表示できなくなった。

元々、24.10環境下ではApache2 + php 8.3で構築していたが、アップグレードによりphpが8.4へアップグレードされたのが表示できなくなった理由であったが、もう一因としてvirtualHostの設定間違いがあり、24.10下では顕在化していなかった。

3日ほど寝不足になりつつ、会社からsshで繋いで設定弄ったりしていたが結局、ChatGPT先生のおかげで問題解決できたので、問題の原因と対策を取りまとめ。

まず自宅サーバーの構成はユーザーディレクトリを使って、オンラインストレージのNextcloud、Wordpressによるブログ、そして静的ホームページを運用していた。

アクセスURLについて
mysite.com → 静的ホームページ
mysite.com/~user1/  → nextcloud
mysite.com/~user2/  → Wordpressブログ
mysite.com/~user3/  → 静的ホームページ

実際のディレクトリ構造は下記
/var/www/html/ index.html他、静的ホームページを構成するhtmlファイル群
/home/user1/public_html/ nextcloudを構築するphpファイル群
/home/user2/public_html/ WordPressを構築するphpファイル群
/home/user3/public_html/ 静的ホームページを構成するhtmlファイル群

これが25.04へのアップグレード後、下記のようになった。
mysite.com → index.htmが表示されず、エラーを告げるnextcloudのindex.phpが表示
mysite.com/~user1/  → index.phpがダウンロードされる
mysite.com/~user2/  → サイト内のファイルリストが表示
mysite.com/~user3/  → 表示されず

ここでApache2の設定ファイル関連を弄ったが解決せず。

ものは試しとApache2をアンインストールしてnginxをインストールしてみた。

これにより静的ホームページ mysite.com/~user3/ は表示されるようになるが、Wordpressサイトは404エラーが出て表示されず。
nginxのエラーログは

$ sudo tail -n 30 /var/log/nginx/error.log
[error] 24581#24581: *184 rewrite or internal redirection cycle while internally redirecting to “/~user2//index.php/index.php/index.php/index.php/index.php/index.php/index.php/index.php/index.php/index.php/index.php”, client: 85.208.96.204, server: mysite.com, request: “GET /~user2/?p=23835

Nginxのリダイレクトルールが無限ループを引き起こしており、エラーが起こっていた。
ここでChatGPT先生に上記のエラーログを投げて相談して、/etc/nginx/sites-available/default の設定ファイルに下記のような記載をした。

# /~username の PHP ファイル処理
location ~ ^/~([^/]+)(/.*\.php)$ {
# alias は使わず root にして、$document_root が正しく機能するようにする
root /home/$1/public_html;

include snippets/fastcgi-php.conf;
fastcgi_pass unix:/run/php/php8.4-fpm.sock;

# SCRIPT_FILENAME を正しく指定(root + パス)
fastcgi_param SCRIPT_FILENAME $document_root$2;

include fastcgi_params;
}

結局、ユーザーディレクトリのphpファイルが無限ループ起こす設定を解消できず。
/var/www/html/以下に試しにindex.phpを置いてみると、動作するため、ユーザーディレクトリの設定が違うのだと思われるけど、解消法分からず。
Nginxをアンインストールし、改めてApache2で再設定することにした。

Apache2を初期設定していくことで、問題の切り出しを考えていたが、先のアンインストールした際にも
/etc/apache2/site-enabled/以下のmysite.confは残っていたので、そのまま使うこととした。

エラーログは下記
$ sudo cat /var/log/apache2/error.log
[core:notice] [pid 11050:tid 11050] AH00094: Command line: ‘/usr/sbin/ap\
ache2′
[proxy:error] [pid 11790:tid 11790] (2)No such file or directory: AH0245\
4: FCGI: attempt to connect to Unix domain socket /var/run/php/php8.3-fpm.sock (localhost:8000) failed

chatgptにエラーログを見てもらうと、
このエラーは、Xubuntu を 25.04 にアップグレードした際に PHP が 8.3 から 8.4 に更新されたにもかかわらず、Apache が依然として PHP 8.3 のソケット(/var/run/php/php8.3-fpm.sock)を参照しているために発生しています。

つまり、Apache の設定ファイル(もしくは仮想ホスト設定)が PHP 8.3 を使おうとしているのに、実際にはもうそのバージョンの PHP-FPM が存在しない状態です。
とのこと。

改めて、mysite.conf中の記載を確認
ProxyPassMatch ^/(.*\.php)$ unix:/var/run/php/php8.3-fpm.sock|fcgi://localhost/
→ 上記8.3を8.4へ修正

$ sudo systemctl restart apache2

エラーログの内容変わらず
No such file or directory: AH0245\
4: FCGI: attempt to connect to Unix domain socket /var/run/php/php8.3-fpm.sock (localhost:8000) failed

ここでChatGPT先生より提案される
他の VirtualHost 設定で php8.3-fpm.sock を参照していないか

$ sudo ls /etc/apache2/conf-available/
php8.3-fpm.conf

これを削除

$ sudo grep -r “php8.3-fpm.sock” /etc/apache2/conf-available/
/etc/apache2/conf-available/wordpress.conf: SetHandler “proxy:unix:/var/run/php/php8.3-fpm.sock|fcgi://localhost/”

ここで原因発見

$ sudo vi /etc/apache2/conf-available/wordpress.conf
SetHandler “proxy:unix:/var/run/php/php8.3-fpm.sock|fcgi://localhost/”
→ 上記8.3を8.4へ修正

$ sudo a2ensite wordpress.conf

$ sudo systemctl restart apache2

mysite.com/~user1/へのアクセスで、nextcloud、mysite.com/~user2/へのアクセスで、Wordpressのブログが表示されるようになった。

ところがmysite.comへアクセスした際に、エラーを告げるnextcloudのindex.phpが表示される状態は変わらず。
/var/www/html/のindex.htmlが表示されない

$ sudo apache2ctl -S
apache2ctl -S : a synonym for -t -D DUMP_VHOSTS
バーチャルホストと実行に関わるファイルの設定を確認

VirtualHost configuration:
*:80 is a NameVirtualHost
default server mysite.com (/etc/apache2/conf-enabled/nextcloud.conf:6)
port 80 namevhost mysite.com (/etc/apache2/conf-enabled/nextcloud.conf:6)
port 80 namevhost mysite.com (/etc/apache2/sites-enabled/mysite.conf:1)
ServerRoot: “/etc/apache2”
Main DocumentRoot: “/var/www/html”
Main ErrorLog: “/var/log/apache2/error.log”
Mutex watchdog-callback: using_defaults
Mutex rewrite-map: using_defaults
Mutex ssl-stapling-refresh: using_defaults
Mutex ssl-stapling: using_defaults
Mutex proxy: using_defaults
Mutex ssl-cache: using_defaults
Mutex default: dir=”/var/run/apache2/” mechanism=default
Mutex mpm-accept: using_defaults
PidFile: “/var/run/apache2/apache2.pid”
Define: DUMP_VHOSTS
Define: DUMP_RUN_CFG
Define: ENABLE_USR_LIB_CGI_BIN
User: name=”www-data” id=33
Group: name=”www-data” id=33

/var/www/html/のindex.htmlが表示されない理由
現在の default server(ポート80)は nextcloud.conf になっている。
→ mysite.conf を default server にしたい

nextcloud.conf の VirtualHost を削除して Include を制御

$ sudo vi /etc/apache2/conf-enabled/nextcloud.conf

#<virtualhost *:80=””>
# ServerName example.com
# DocumentRoot /var/www/nextcloud
# …
# </virtualhost>

上記を#つけてコメントアウト
<directory home=”” user1=”” publichtml=””> → 実際のnextcloudのPHPファイル展開先
Options +FollowSymlinks
AllowOverride All
Require all granted
</directory>
上記設定だけ残す

Apache は sites-enabled/ ディレクトリ内のファイル名の アルファベット順 に設定を読み込むため、mysite.conf を先に読み込ませるよう、名前をリネーム
$ sudo mv /etc/apache2/sites-enabled/mysite.conf /etc/apache2/sites-enabled/000-mysite.conf

$ sudo a2dissite nextcloud.conf
$ sudo a2dissite mysite.conf

$ sudo a2ensite nextcloud.conf
$ sudo a2ensite 000-mysite.conf

$ sudo systemctl reload apache2

上記設定により、ようやく想定どおりに自宅Webサイトが表示されるようになった。
そもそも、先の24.10環境下でnextcloud.confの <virtualhost *:80=””> 以下の設定はしていたのだが、なぜ上手く行っていたのかは不明。

今回はchatGPT先生にエラーログや設定ファイルを読み込ませることで、一つ一つ問題の切り出しができた。
問題の対応にGoogle検索していたが、解決には至らなかったことを考えると、chatGPTが使える現在って凄い。
問題解決のスピードが違うよ。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です