OpenBSDのapache2で、FastCGI(PHP)を動かす (OpenBSD 6.5R、2019/09/09) [OpenBSD]
タイトルを見て分かるとおり、泥沼化してきました(笑)
FreeBSD 12.0Rで動かしたJoomla!があまり期待通りではなかったので、再びWordPressを導入してみようかという気分になりました。が、ここで問題が。
最新のWordPressはphp7.3を要求しますが、zabbixの依存関係がphp7.2となっているため、無理にphp7.3化してしまうと環境が崩れてしまうのです。まあ、jailを使うとか、もう一つFreeBSDの仮想環境を作るとかやり方はあるのですが、どうせなら勉強も兼ねてOpenBSDでWordPressを動かしてみようと思い至った訳です。
さてさて、OpenBSDは堅物でもっと使いにくいのかと思っていたら、意外と普通に使えるのですね。pkg_infoコマンドで、パッケージの検索とインストール済みかどうかを確認することができます。追加したいときはpkg_addです。
WordPressにはMySQLが必要ですが、pkg_infoで検索しても出てきません。OpenBSDはMySQLの上位互換(?)であるMariaDB
が使えるようです。MariaDBの使い方はMySQLと全く一緒なので、ここでは割愛します。Webサーバは大好きなlighttpdがないので、apache2を使います。apacheでもFastCGIを使いたいので、/etc/php-fpm.confの設定変更を行い、rcctl enable php73_fpmでサービス登録を行うなどなど設定を積み上げていきます。(この辺は一般Webを参考にしています)
で、WordPressにアクセスすると「File Not Found」と表示される。あれ?
ソースコードを見てみたら、マークアップされたHTMLとしてのFile Not Foundではなく、Rawメッセージとしての文字列でした。下位レイヤからのメッセージなので、ベースの設定が怪しいように見えます。
apacheのエラーログには、AH01071: Got error 'Primary script unknown'と残っています。
ここから何時間も格闘したのですが、とりあえず切り分けとしては、
・apache2は、FastCGIを使わない普通のCGI方式だと、ちゃんと動く
・php-fpmは、socketを使ってもTCP Listenを使っても表示は変わらない
といったところが分かりました。
最終的に犯人はphp-fpm.confの以下の設定でした。(chrootをコメントアウトすれば直りました)
まあ、chroot時のディレクトリ階層がおかしいだけなので、論理的に整合性を取ってあげれば、chroot設定有りでちゃんと動くような気はしています。とりあえず今は先に進みたいので、設定を無効化して進みます。
FreeBSD 12.0Rで動かしたJoomla!があまり期待通りではなかったので、再びWordPressを導入してみようかという気分になりました。が、ここで問題が。
最新のWordPressはphp7.3を要求しますが、zabbixの依存関係がphp7.2となっているため、無理にphp7.3化してしまうと環境が崩れてしまうのです。まあ、jailを使うとか、もう一つFreeBSDの仮想環境を作るとかやり方はあるのですが、どうせなら勉強も兼ねてOpenBSDでWordPressを動かしてみようと思い至った訳です。
さてさて、OpenBSDは堅物でもっと使いにくいのかと思っていたら、意外と普通に使えるのですね。pkg_infoコマンドで、パッケージの検索とインストール済みかどうかを確認することができます。追加したいときはpkg_addです。
OpenBSD# pkg_info -Q apache apache-httpd-2.4.41 (installed) php-apache-7.1.32 php-apache-7.2.22 php-apache-7.3.9 (installed)
WordPressにはMySQLが必要ですが、pkg_infoで検索しても出てきません。OpenBSDはMySQLの上位互換(?)であるMariaDB
OpenBSD# pkg_info -Q maria mariadb-client-10.0.38v1 (installed) mariadb-server-10.0.38p0v1 (installed) mariadb-tests-10.0.38v1
が使えるようです。MariaDBの使い方はMySQLと全く一緒なので、ここでは割愛します。Webサーバは大好きなlighttpdがないので、apache2を使います。apacheでもFastCGIを使いたいので、/etc/php-fpm.confの設定変更を行い、rcctl enable php73_fpmでサービス登録を行うなどなど設定を積み上げていきます。(この辺は一般Webを参考にしています)
で、WordPressにアクセスすると「File Not Found」と表示される。あれ?
ソースコードを見てみたら、マークアップされたHTMLとしてのFile Not Foundではなく、Rawメッセージとしての文字列でした。下位レイヤからのメッセージなので、ベースの設定が怪しいように見えます。
apacheのエラーログには、AH01071: Got error 'Primary script unknown'と残っています。
ここから何時間も格闘したのですが、とりあえず切り分けとしては、
・apache2は、FastCGIを使わない普通のCGI方式だと、ちゃんと動く
・php-fpmは、socketを使ってもTCP Listenを使っても表示は変わらない
といったところが分かりました。
最終的に犯人はphp-fpm.confの以下の設定でした。(chrootをコメントアウトすれば直りました)
; Chroot to this directory at the start. This value must be defined as an ; absolute path. When this value is not set, chroot is not used. ; Note: you can prefix with '$prefix' to chroot to the pool prefix or one ; of its subdirectories. If the pool prefix is not set, the global prefix ; will be used instead. ; Note: chrooting is a great security feature and should be used whenever ; possible. However, all PHP paths will be relative to the chroot ; (error_log, sessions.save_path, ...). ; Default Value: not set chroot = /var/www
まあ、chroot時のディレクトリ階層がおかしいだけなので、論理的に整合性を取ってあげれば、chroot設定有りでちゃんと動くような気はしています。とりあえず今は先に進みたいので、設定を無効化して進みます。
コメント 0