WordPressの特定のURLがIPアドレスでのアクセスになっている場合

症状
テーマファイルの幾つかで https://IPアドレス/xxx とアクセスを行ってしまい、結果的にブラウザ側でセキュリティに問題があるサイトと認識されてNot foundになってしまいテーマが崩れる事象が発生していました。(ブラウザの、開発ツールなどでアクセスすると確認できます)

原因
get_template_directory_uri ()関数を利用して、テーマファイルがCSSを読み込んでいる場所があったのですがこの場合に、IPアドレスを含むURIが返却されてしまっていました。

対処
Mysqlのデータベースを確認すると 以下のようになっていたのでこちらの値をUpdateコマンドで更新します。(IPはダミーです)

mysql> SELECT option_name, option_value FROM tblog_wp_options WHERE option_name = 'siteurl' OR option_name = 'home';
+-------------+------------------------+
| option_name | option_value |
+-------------+------------------------+
| home | https://roguer.info |
| siteurl | https://111.111.111.111 |
+-------------+------------------------+
mysql> UPDATE tblog_wp_options SET option_value = 'https://roguer.info' WHERE option_name = 'siteurl';

これで無事にNot foundにならずに正しくスタイルが表示されるようになりました。何度も引っ越しをしているとだんだんゴミが溜まってしまってこのような状態になったもよう。ちなみに wp-config.php 側では正しく指定している状態でした(DBが優先されるのですね)

nginx のアップロードサイズ制限の変更(client intended to send too large body)

画像をアップロードしようとしたら「返答が正しいJSONレスポンスではありません」というエラーが表示されました。ログを見てみると client intended to send too large body: というエラーが nginxで表示されてました。

server {
    listen 80;
    listen [::]:80 default_server ipv6only=on;
    server_name localhost;
    root /usr/share/nginx/html;
    index index.php index.html;
    client_max_body_size 10M;
(略)

nginxの設定で初期は1Mになっているのでこの部分を変更しておきます。(PHP側でもサイズのUpload制限があるので変更をしておきますがNginx側でも必要なことをすぐに忘れてしまいます)

WordPressの「サイトヘルス」に従って改善をしてみる

重い腰をあげてこのサイトのメンテナンスを先日からしています。Wordpressの中でも色々と改善すべき項目が出ていますので対応をしていきたいと思います。

GA4
世の中はすでにGA4ですね。Google anaryticsのサイトに行きGA4用のタグを入れておきます。Pi-Holeでtagmanager切っているので動くのかわからんけど。

停止中のプラグインを削除してください
最近停止したものあるのでこちらも削除しておきます。これ以外にも何に使っていたのかわからんプラグインが30個も入っているので停止したいのですがテーマとかで使っているものも有り不用意に削除できない。
停止中のテーマを削除してください
ディフォルトのテーマ含めて利用してないものを削除

1つ以上の推奨モジュールが存在しません
imagickとか諸々、先日Updateした際に更新してなかったことが影響ですね sudo ln -s /etc/php/7.4//mods-available/imagick.ini 20-imagick.ini などでリンクを貼っておきます(が有効にならない・・あとで確認)

永続オブジェクトキャッシュを使用してください
こういうものが利用できるようになっているのですね。RadisとMemcacheが推奨されているようですがWordpressのディフォルト機能なのかプラグインで対応しろという話なのかどちらなんでしょうね?いずれにしてもお金もCPUリソースもかかるので今回はおいておきます。時間がある時にGCPのサービスを利用して構成してみたいと思います

HTTPS化
だいたいこういったものはハマるなと思いましたがハマりました。wp-adminに接続ができなくなりました。そもそもCloudflarでHTTPSにしているので一旦は良いかなと放置しておりましたがそろそろ真面目に設定変更をしないといけないかもしれません。サイトヘルスに表示されている画面からHTTPS化のようなリンクをクリックしたところ wp-configがリダイレクトループに陥ってしまったので強引に以下の設定を wp-config.php に入れて戻します。

define('FORCE_SSL_ADMIN', false);
if ( ! empty( $_SERVER['HTTP_X_FORWARDED_PROTO'] )
&& $_SERVER['HTTP_X_FORWARDED_PROTO'] == 'http' )
{
$_SERVER['HTTPS']='off';
}
define('FS_METHOD', 'direct');
define('WP_SITEURL','https://roguer.info' );
define('WP_HOME','https://roguer.info' );
define('RELOCATE', true );

標準の機能が何を変更したのか分からぬが、内部的にはhttpsになっているようで投稿する際などもhttpsで繋がないと「新に失敗しました。 現在オフラインのようです。」が出てきます。これは httpのサイトから投稿が httpsで行われてしまうことから来るエラーですなので一旦接続自体は https(CloudFlaerの機能)で行うようにしておきます。(後で Lets Encriptなどを設定して動くようにしておきたいと思います・・)

結局あまり改善されてないのですが問題があることはわかりました。おいおい修正を