リバース プロキシと WordPress

昨日Apache 上で PHP を動かすのに苦労したという記事を書いた。まぁ普段から Linux を使ってる人間にとってはなんてことない設定だ。Windows Server 側のボクからしても、振り返れば大したことではない。
さて、次は Windows Server でも Linux でもない、別の問題だ。

この仕事は WordPress を使う仕事だった。といってもボクはそちらには踏み入れない。ボクの仕事はフロント部分で、デザイナーさんがあげてきたウェブ デザインを CSS + HTML + JavaScript + PHP で WordPress のテーマに落とし込む仕事である。
とはいえサーバを用意するようには言われたので、昨日用意した仮想サーバに WordPress をインストールして動くようになるまではやらなければならない。

昨日も説明したが、仮想サーバはこの amatsukami.jp サーバ上にある。
インターネットからこの仮想サーバにアクセスするには、グローバル IP アドレス(インターネットの世界で重複しないユニークなアドレス)を最低でも一つ割り当てなければならないのだが、amatsukami.jp にはグローバル IP アドレスが一つしかないので、仮想サーバに割り当てることは出来ない。
そこでリバース プロキシApplication Request Routing)という仕組みを使って、仮想サーバにアクセスしに来たデータは amatsukami.jp サーバが素通しして仮想サーバに通すようにする。こうすることによって、外からはあたかも仮想サーバがインターネット上にいるかのように見えるわけである。

これ自体の設定は、とても簡単で、素通しの設定をすればいいのである。

問題は HTTPS だ。とはいえ、実はこれ自体も設定は簡単である。リバース プロキシが暗号化の処理をしてあげればいいのだ。リバース プロキシの向こう側にいる仮想サーバは別に暗号化の処理をしなくても良いのだ。
ところがここで大きな問題が生じる。それは「リンク」だ。

仮想サーバは暗号化の処理をしない。ということはどういうことになるかというと、WordPress は、自身のリンクにすべて「http://」という暗号化なしのアドレスを貼ってしまうのだ。

暗号化してある場合、ここは「https://」で始まらなければならない。でも WordPress 自身というか、仮想サーバそのものが暗号化の処理を必要としていないわけだから、https のリンクを張るわけがない。

さーて、こまった……これはどうすればいいんだ??

で、いろいろ試行錯誤した結果、WordPress が実行される一番最初のところで、ムリヤリ、HTTPS だという嘘の情報を書き込むと動くことが判明したwwww

$_SERVER['HTTPS'] = 'on';

この一行を書き加えるだけですべて解決(汗)。え、ほんとにいいのかなぁ??
たぶん解決方法としては正しくないとは思うんだけど、とりあえず動いているし、特に問題も起きてないのでよしとしよう(ぁ
プラグインとかの更新もちゃんとできるし……(^^;

2020 年最初の台風が発生した。去年より 3 ヶ月以上遅れての発生だ。というのも去年は 2/20 の段階ですでに二号が生まれているからだ。とはいえツイートで一月に発生していたというのは調査不足だ。じっさい 2029 年の台風一号がいつ発生したかは調べてない(汗

さてこの 2019 年との台風発生の違いは現れるだろうか? 去年は妙に台風の数が多かったが……今年は果たして?

WordPress のタイムアウト問題を解決する

この TAMA Networks は WordPress というシステムで動いている。
で、この WordPress がバージョンアップしたのでウチでもバージョンアップしようとしたのだが、バージョンアップ中にタイムアウトしてしまう……。

あれー? なんだこれ。

いや、まぁ前からなかったわけではないのよね。特に最近はテレワークで昼間もネットが重い。
その辺が関係あるのかなと思い、PHPset_time_limit(); 関数を使って、サーバの応答を待つ時間を長くしてみたんだけど……そもそもこの関数で設定した時間よりも先に HTTP 500 エラーになってしまった。

なんだなんだ?

じゃぁサーバ側の問題か……と思い、いろいろと設定を漁った結果、サーバ側には三つのタイムアウト時間を設定する場所があった。

  1. アプリケーション プール
    1. アプリケーション プールの生存確認を行う ping 応答時間
    2. アプリケーション プールのアイドル状態をシャットダウンする時間
  2. サイトそのものの接続タイムアウト設定
  3. FastCGI のアイドル タイムアウト

このどれが直接関わっているのかはようわからんっていうか、多分全部だろうと言うことでとりあえず全部の時間を 10 分にしてみたところ、無事に WordPress が更新されるようになった。

ところが、とあるプラグインを更新しようとしたらタイムアウトしてしまった!
マジか!? 設定が悪いのか!? って思って、試しにブラウザで普通にそのプラグインをダウンロードしようとしたら、そもそも 10 分経ってもダウンロードが終わらなかったwwww
ツイートで 10 分と言っているのは、タイムアウトの設定値が 10 分だからなわけですな。

だめだこりゃ_(:3 」∠ )_

PHP の恥ずかしい話と TV で見た分福

ついに WordPress から PHP のバージョンが古いと警告されるようになった。amatsukami.jp サーバは PHP 5.3 で動いている。こいつはセキュリティ ホールとかもあって本当は使っちゃいけないバージョンだ。
しかも 2 年前に PHP5 系でしか動かないものは、別のサーバに追い出している。
なのでさっさと PHP のバージョンをアップしないといけないのだ。また、上の別サーバに追い出したときにも書いているが、アップデートしないと WordPress そのものが動かなくなるというのも予想していた(そして今年の 4 月に動かなくなるらしい)。

じゃぁアップデートすりゃいいじゃん。

いや、まったくその通りなんだけど、実は過去に何度か PHP のアップデートを試みて失敗しているのだ。入れるのは 7 系と言われているバージョン。ところが amatsukami.jp サーバに 7 系を入れてもなぜか従来ある 5 系が呼び出されてしまうという現象がおきるのだ。
7 が入っているディレクトリ(フォルダ)から直接 php.exe を叩いても、5 系が呼び出される。しかもその場合、exe は 7 なんだけどその他の全てが 5 なため、PHP が起動すらしないという状況になるのだ。
これがもーわからなくてわからなくて、何度やってもこうなる……orz

という経緯があった。しかしさすがに WordPress から「もう動かなくなるよ」って言われてしまったらなんとかしてアップデートするしかない。そこで今日も設定してみたんだけどやっぱり動かない。まぁそうだよなー、もう何度も試してるしなぁ……もう Windows Server 自体がおかしくなってるのかなぁ……とか思い始める。

PHP は php.exe というプログラム本体以外に、さまざまな機能を実現するためのプログラム群(Extension)がある。そいつらを読み込むためには MS-DOS 時代からある PATH という環境変数にそのプログラム群が入っているディレクトリを定義したりするのだが、それは php.ini という定義ファイルに書いておくことも出来るので amatsukami.jp サーバの PATH にはその設定はない。
なければ定義ファイルを見に行くはずだよなーなんて思いながら、環境変数をぼけーっと眺めていたら、「PHPRC」っていう環境変数を見つける。そしてそこには PHP5 系のディレクトリが設定されている。

これかぁぁぁぁぁぁぁぁぁぁ!!!

この環境変数はまさにその php.ini がある場所を設定する環境変数なのだが、これがあるために PHP7 系を起動しても 5 系のプログラム群を読みに行っていたのであるorz
すっかり見落としていたというか、忘れてた!!!
あほやなぁ……。

というわけでこの環境変数を消し、PHP のバージョンごとに PHPRC を設定して無事 PHP7 系が動くようになった。この数年の失敗はなんだったんだ……。

ところが問題はそれだけでは終わらなかった。WordPress が動かないのだ。
もちろん動くサイトもある。ということは PHP 自体のアップデートには成功しているのだろうととりあえず判断し、WordPress 本体をあれやこれやといじる。WordPress そのものはけっこう規模の大きなソフトウェアな上に、ボクがかってにいじくってる部分もあるので何かが引っかかってるんだろうと調べるも、そもそも自分が WordPress のどこをいじったのかも憶えてないwww

とりあえず一つの WordPress でいくつものサイトを運営できる「マルチサイト機能」が問題なのかなと思ったのだが、マルチサイトが ON になっているサイトも動くことが判明

結果的に古いプラグインが原因だと解った。そのプラグインを外すことによって、ほぼ全ての WordPress が動くようになった。ところが GLacé というエロゲ ブランドのサイトがあるのだが、ここだけは動かなかった(汗)。なんだろうなー。
でも、このサイトを管理する義務もないし、しらなーいってなった(ぁ
でもなー、古い PHP で動かし続けるのは問題があるわけで、さてどうしたもんか……。

さて、今日行ったランチはね、楽しかったというか何というか。
お店の名前は『分福』。なんか入り口がけっこう凝ってる(7 番目の写真)のでちょっと入るのに躊躇してたんだけど、入ってビックリ。あ!って思った。中はお風呂屋さんなのだ! そしてテレビで見たことある!! ワールドビジネスサテライトだったかガイアの夜明けだったかまぁなんかその手の番組で居抜き物件とかリノベーション物件でがんばってるお店を特集してたときに出てきたあの店だ!
そうかー、まさか田町にあったとは。

写真は鳥煮定食と、ミルフィーユ豚カツ定食とハムカツ定食。
お値段は 800 円 ~ 1000 円。ご飯お代わり自由だったかな?
鳥はかなりゴロゴロ入ってるし、ミルフィーユ カツはやわらかくて衣サクサクだし、ハムカツは分厚くて中にチーズが挟んであって食べ応え充分。いやー、イイ店でした。ここは常連になりたいと思った店でした。

まぁでもハムカツとかミルフィーユカツとか鳥肉とか、なんていうんだろうね安いもので美味しくしようっていう感じなのかな……と<失礼

天津神本舗を SSL 化する話

今日はわりと遅めに食事に出たため、お店はだいたいどこも昼休み(?)に入ってしまっていた。個人経営の飲食店は、14 時頃から 17 時頃まで閉まってしまうことが多いのだ。その時間帯にやっているのはチェーン店かラーメン屋くらいなものである。

というわけでとんこつラーメン屋さんに入ってみた。
一瑞亭
食べログの店数が妙に高いが、とりたててこれはという感じではない。普通(ぁ
スープは真っ白ではなく、濁り系。博多ラーメンらしいあっさりした感じはでてて食べやすいと思った。
炒飯がしょっぱかったー。

ちなみにこの一瑞亭、前に食べた由丸と同じ並びにある。由丸は白くてミルキー系(北九州系なんだろうか?)で特色は全然違うので、その二つが味わえるのはいいなと思った。

ところで同人の方で使っている amatsukami.infoSSLHTTPS)化をしてみた。
世間はなんでもかんでも SSL 化である。Google Chrome に至っては SSL 化していないサイトにアクセスすると警告を出す始末。えー、たかが個人サイトに SSL 化って必要なの?? っていう思いは未だに変わらないものの、世の中がそういう流れになっていくので仕方なく(ぉ

といっても自分のサーバでやったのではない。
実は自分の所でやらない大きな理由がある。それはウチのウェブサーバである IIS7.5 が SNI にちゃんと対応してないのだ。暗号化されたウェブページを取り扱う HTTPS は、何もかも暗号化するため、amatsukami.info と言うようなドメイン名まで隠蔽してしまう。となると一つのサーバでいくつものドメインを運営しているサイトにはアクセスできなくなってしまうのだ(なんのドメインでアクセスしに来たのか解らなくなるため)。
そこで HTTPS で通信を確立する前に平文でドメイン名だけをやりとりする規格が SNI なのだが、ウチのサーバにはその機能が無い(正確にはないわけではないが、対応が中途半端)。
そのため、amatsukami.jp や amatsukami.info、他にも様々なサイトを動かしているウチのサーバは SSL 化ができないでいた。

まぁそもそもサーバ自体を更新しなくちゃいけないんだけどね。こっちは裏で少しずつ進行中。

とりあえず練習も兼ねてテキトーなホスティング サービスを契約した。月 300 円(ぁ
ファイル容量は 100GB、DB は三つまで。DB の容量は 100 MB まで。
DB の制限がきつすぎるなぁ、と思いつつ……。

まず一回目は失敗。どうしても WordPress が動かなかった。
DB の問題か? それとも WordPress のスクリプトの問題か??

それから一日おいて、もう一度試してみた
すると ASCII モードで転送していたのが問題だったようだ。とりあえず動いてエラーを吐くところまではきた(前回はウンともスンとも言わなかった)。そのエラーを見ると、今度は memcached 関連のところで動かなくなっていたことが解った。それらを取り外すと動き始めた。

次に萌え時計だ。これが動かないんだwww
原因はファイル名に日本語を使っているからというのは何となく推測できたのだが、それの何がいけないのかさっぱりわからない。ファイル名の文字コードソースファイル側の文字コードを合わせたりしたのだが、まったくダメ。

結局これはソースコードの UTF8 から EUC にコンバートすることによって動いた。

もっとも時間がかかったのがファイルのアップロードだ。FTPS でアップロードしたのだが、とにかく途中で止まるのだ。天津神本舗は 1.16GiB ほどのデータが有り、ファイル数は 6174 個。とまりまくってそのたびに再接続してまたアップするファイルを指定して……とかやってたんだけど、6 時間ぐらいかかった。
あほらしい……orz

これ、どうも NextFTP というソフトだとなるらしい。確かに一回目の時は CyberDuck というソフトを使ったのだけど、そちらだと三回ぐらいしか止まらなかった。もー、なんなの?? じゃぁなんで二回目も CyberDuck を使わなかったのかというと、同じファイルがあった場合にちゃんとした比較がなかったのと、バイナリ モードだけでアップする方法がよく解らなかったため。たぶんどっちもないわけじゃないとは思うんだけどね……設定を見つけられなかった。

ちなみに萌え時計はもっとデータがデカくて、7GiB オーバー。こっちもアップするのが大変だった~。

なんだかんだで Windows Server と Linux はけっこう違うなぁと実感した作業であった。

めげずに Gutenberg を使ってみる

WordPress の記事を編集するためのエディタ Gutenberg がクソだという話は過去にも書いた。
ただ問題点はわかっている。大きく二つ。何度も書いたが、一つのブロックに複数の画像を貼る方法と、リスト内での改行だ。
このうち、一つのブロックに複数の画像を貼る方法がわかった。

それはクラシック スタイルだ。

古い編集機能のブロックというのを作れるのだ。古い編集機能では複数の画像が貼れるので、これで Gutenberg でも複数の画像が貼れるようになった。

けど、やはり Guteberg そのものが使いづらいと言うことが解った。
なぜか?

それは、Gutenberg がマルチメディアな記事を書くことを目指して設計されたからだ。つまり画像あり、動画あり、文章あり、一つの記事に様々な形態のデータがあってそれらを包括的に一つの記事にまとめるためのエディタなのだ。
ところがボクの記事はそうではない。そもそも物書きだから文章がメインとなる。
基本的に文章をつらつらと書ければそれでよいのである。だから Gutenberg のように画像を貼るのは楽になったけど、文章を貼るのも画像を貼るのも同じコストがかかるようになってしまいました、ではダメなのだ。

なので WordPress が古い編集機能を使えなくするようになるまではこのままで行こうと思う。

ふくの鳥と AI と WordPress

今日は同僚が鶏の唐揚げが食べたいというので、いろいろと彷徨った結果、『ふくの鳥』というお店に入った。ランチメニューがどれも鶏の唐揚げだったからだ。鶏の唐揚げって言うと、あの丸っこいのを思い浮かべるのだけど、ここのは全て一枚肉だった。
同僚は油淋鶏、ボクはカレーを選んだ。

カレー屋さんじゃないカレーはあれね、業務用ね。
当たり前か(^^;

鶏の唐揚げは美味しかったと思うんだけど、カレーがぬめぬめっとしてた。
イマイチ!

ポイント カードについて、このあいだひどい目に遭ったわけだけど(そこまで言う?w)、ふとこの間 THANK で見たロビを思い出して、そもそも AI が普及したらポイント カードいらないじゃん! ってことに気付いた。
いや、AI とかそういう単語を使わなくても現状でも可能だ。
要するに顔認識システムを店頭に置いておいて、会計の時にその人が常連さんなのかどうかを判別して貰えばいいのだ。その人の来店回数や今まで使ったお金の積算を表示するなんて簡単だ。そしてポイントの付与も楽々だ。
たくさん貯まってたら「○○ポイントたまってますけど、お使いになりますか?」と、店員が聞けばいいのだ。自動割引でもイイし、レジのタッチパネルに表示して使うかどうかを尋ねるのでもいい。

いやー、明るい未来が見えてきそうだ。これで財布が金も持ってないのにパンパンなんてことはなくなりそうだ。頼みますよ!

今、仕事をいくつも抱えているんだけど、どれもが PHP + HTML + Javascript な案件なのね。で管理画面があったりとかいろいろするんだけど、クライアントさんには WordPress でやれるようにすることが多い。要するにデザインとかウェブサイトそのものはクライアントさんが作って、システムというか仕組みの部分はボクが組んで、クライアントが作った WordPress 内に組み込むといった感じだ。

ただ 100% WordPress で済むようにはしていなかった。
ボクが作ったシステムの UI は、ボクが自分で HTML を組み、CSS を組んで提供していた。
でもこれだと見た目が良くない。ボクはデザイナーではないからね。それにシステムごとに CSS を組むのがめんどうくさかった。

そこでボクが作ったシステムを全部 WordPress 側で呼ぶ仕組みを作った。
これでボクが作ったシステムも全部 WordPress を通して表示されるようになった。UI も統一されるし、デザインも統一されるうえにクライアントも操作に戸惑うことも減る(まったくなくなるわけではない)。
今までは WordPress とボクのシステムとで管理画面をアクセスする場所が違っていたりしたので、その辺も統一された。

本当は SS とか貼りたいんだけど、開発中なので貼れない……

ついに根負けして Classic Editor に戻す

今ご覧になっている TAMA Networks や、ボクの同人サイトである天津神本舗などは WordPress というシステムを使って運営されている。まぁこの日記には何度も出ている名前だけれども。それがバージョンアップして、編集画面が新しくなったという話題は出した。
で、それがまだ機能不足でクソだという話も書いた。

それから何度か使ってみてはいるんだけど、やっぱダメだー!

というわけで、古い編集画面に戻してしまった……orz
あー、これ戻したらもう二度と新しいのにしないヤツだ。
って本能的に思ったwww

実はボクは UI に間してはあまり頓着がない。だから Windows のバージョンが新しくなっても、Microsoft Office がリボン UI に変わってもボク自身困ることはないし、普通に使ってきた。けど機能がないのだけはどうしようもない。
別に Gutenberg でも Classic Editor でできたことが出来ればボクは文句は言わなかったと思う。思想が古いとは思ったけど。

とにかく困っているのが、一つのブロックに複数の画像を貼ることだ。
これが出来ないとどうしようもない。ちなみに無理やり HTML で組み込むとエラーが出るw
エラーは出るが編集不可能なブロックとなるだけで、そのままいじらずに放置すれば表示はされる。
そしてリスト内で改行を入れる方法がないことだ。これも結局 HTML を直接ぶちこんでいる。

この二つが Gutenberg にも実装されれば Gutenberg に移行することはそんなにイヤじゃない。たださ、たとえ実装されていたとしてもだ、それにボクが気づけるかということなのだ。一度 Classic Editor にしてしまったらもう Gutenberg を試してみようってことはしないと思うんだよねぇ……。それこそ WordPress が Classic Editor を動かなくするとかしない限りは……。

1/3 から 1/6 まで毎晩スーパー銭湯形式の温泉に行っていた。
その中で、花小金井にあるお風呂の王様に行ったんだけど、弟家族と一緒だったため人数が多かった。そのため会員になったほうが安いと言われたので会員になることにした。
そしたら店員から二枚のカードを渡された。

思わず目が点になる、ボク。

なぜ二枚なのかが理解出来なかったからだ。
そもそもボクは会員になるのを極力避ける。会員カードが増えるからだ。これの管理に財布は大変なことになる。スマートフォンという便利な携帯できるコンピュータが普及しているにもかかわらず、この手のカード類は減る兆しさえない。それに辟易しているのである。

そこへ、二枚も渡されたものだから、目が点になると同時に、呆れた表情もしていたかも知れない。

二枚の内訳は、会員カードとポイント カードだった。ポイント カードの方は判子を店員が押すタイプのヤツ。

「はぁ???」

ただでさえカードが増えるのが困るのに、ポイント カードは別だとぉ!?
そんなもん、会員カードに集約しとけよ。会員カードを提示したら消費した金額に応じたポイントなり、来店回数なりをサーバにもっときゃいいだろうが! なんでいちいち会員証を提示した上にポイント カードまで出さにゃならんのだ!
しかも老婆がやってる個人の駄菓子屋じゃなくて、都内にいくつも店を持つ企業だろ? 10 店舗もなきゃ、サクラの VPS にフロントエンドとバックエンドを二組でももっときゃ充分足りるよ!!

とか、年始からもう呆れかえってしまった。
もー!! ほんとカードが増えるの困ってるんだってば!!

あれだよなー、なんかポイント カードの標準的な規格を業界で作って無料で開放するしかないよね。
どんな小さな店舗でも利用できるようにしてさ。
そしたら一気に財布の中身が軽くなるんだけどなぁ……。
技術的にすでにクリアされていることなのに、解決できないってもどかしいよね。
まぁそんなことは、ポイントカードに限らずいっぱいあるんだろうけどさ。