Ubuntu 16.04 から 18.04 にあげてから、 php の実行ユーザーを分離するために使っている php-fpm に繋ぐための libapache2-mod-fastcgi が消えてしまって動かなくなっていたので、 mod_proxy_fcgi を使うように変更しました。

確認環境

  • Ubuntu 18.04.2 LTS (bionic)
  • apache2 2.4.29-1ubuntu4.6
  • php-fpm 1:7.2+60ubuntu1

libapache2-mod-fastcgi の調査

https://tracker.debian.org/pkg/libapache-mod-fastcgi から削除された理由を調べてみると、 https://tracker.debian.org/news/805109/removed-2470910052141-12-from-unstable/https://tracker.debian.org/news/805110/removed-2470910052141-12-from-unstable/ の なぜか 2 通ありましたが、どちらも

  ------------------- Reason -------------------
  dead upstream, quite old, orphaned, dfsg-free alternative (libapache-mod-fcgid)
  ----------------------------------------------

となっていました。

libapache-mod-fcgid を試した

というわけで、 alternative としてあげられていた libapache-mod-fcgid を試してみましたが、要件を満たしませんでした。

https://www.mail-archive.com/mod-fcgid-users@lists.sourceforge.net/msg00222.html に書いてあるように

  > Is "FastCgiExternalServer" supported by mod_fcgid?

  mod_fastcgi and mod_fcgid are totally different modules and don't even
  share a common codebase. They have only the FastCGI protocol in common.
  Thus, Apache Directives are totally different. Besides, mod_fcgid has an
  adaptive-spawning design and does not support "Static" servers or
  External servers.

  I guess the short answer is : no, and not planned.

ということで、自前で FastCGI のプロセスを起動するようで、 php-fpm と繋ぐという用途には使えませんでした。

mod_proxy_fcgi を使う

https://cwiki.apache.org/confluence/display/HTTPD/PHP-FPM に php-fpm を mod_proxy_fcgi と組み合わせるという話があったので、 試してみたところ、 sudo a2enmod proxy_fcgisudo a2enconf php7.2-fpm でうまくいきました。

php7.2-fpm の設定は以下のようになっていました。

  % cat /etc/apache2/conf-enabled/php7.2-fpm.conf
  # Redirect to local php-fpm if mod_php is not available
  <IfModule !mod_php7.c>
  <IfModule proxy_fcgi_module>
	  # Enable http authorization headers
	  <IfModule setenvif_module>
	  SetEnvIfNoCase ^Authorization$ "(.+)" HTTP_AUTHORIZATION=$1
	  </IfModule>

	  <FilesMatch ".+\.ph(ar|p|tml)$">
		  SetHandler "proxy:unix:/run/php/php7.2-fpm.sock|fcgi://localhost"
	  </FilesMatch>
	  <FilesMatch ".+\.phps$">
		  # Deny access to raw php sources by default
		  # To re-enable it's recommended to enable access to the files
		  # only in specific virtual host or directory
		  Require all denied
	  </FilesMatch>
	  # Deny access to files without filename (e.g. '.php')
	  <FilesMatch "^\.ph(ar|p|ps|tml)$">
		  Require all denied
	  </FilesMatch>
  </IfModule>
  </IfModule>

最低限の設定

php7.2-fpm.conf の存在に気づく前に試した最低限の設定は以下の通りです。

  <IfModule proxy_fcgi_module>
	  <FilesMatch "\.php$">
		  SetHandler "proxy:unix:/run/php/php7.2-fpm.sock|fcgi://localhost/"
	  </FilesMatch>
  </IfModule>

まとめ

libapache2-mod-fastcgi の削除理由の alternative に libapache-mod-fcgid があげられていますが、 使い方によっては apache2-bin に同梱されている mod_proxy_fcgi を使えばよかったようです。

Disqus Comments

Kazuhiro NISHIYAMA

Ruby のコミッターとかやってます。 フルスタックエンジニア(って何?)かもしれません。 About znzに主なアカウントをまとめました。

znz znz


Published