apache 2.4.x + php 7.4.x での、php (CGI/fastCGI)の設定、覚え書きです。
マルチプロセッシングモジュール (MPM)は、「event」で設定をしています。
httpd 2.4.xの設定
# wget https://downloads.apache.org//httpd/httpd-2.4.46.tar.gz # tar xzvf httpd-2.4.46.tar.gz # ./configure --enable-suexec --enable-ssl --with-suexec-caller=www --with-suexec-userdir=web --with-suexec-docroot=/home --with-suexec-logfile=/usr/local/apache2/logs/suexec_log --with-suexec-uidmin=100 --with-suexec-gidmin=100 --with-suexec-safepath=/bin:/usr/bin --enable-modules=all --enable-mods-shared=all --with-mpm=event --enable-mpms-shared='prefork worker event' # make # make install
↑ メモリ管理、「prefork」「worker」「event」の3つを入れて、「event」として設定をします。
# vi /usr/local/apache2/conf/httpd.conf User daemon Group daemon ↓ User www Group www
<Directory /> AllowOverride none Require all denied </Directory> ↓ <Directory /home> Options All -Indexes +SymLinksIfOwnerMatch -FollowSymLinks AllowOverride All </Directory>
<IfModule dir_module> DirectoryIndex index.html </IfModule> ↓ <IfModule dir_module> DirectoryIndex index.html index.php </IfModule>
<Files "xmlrpc.php"> Require all denied </Files> ↑加える(セキュリティ対策)
Include conf/extra/httpd-mpm.conf Include conf/extra/httpd-vhosts.conf Include conf/extra/httpd-ssl.conf ↑上記を有効にする LoadModule ssl_module modules/mod_ssl.so LoadModule socache_shmcb_module modules/mod_socache_shmcb.so LoadModule rewrite_module modules/mod_rewrite.so LoadModule fcgid_module modules/mod_fcgid.so ↑ 上記も有効にする # LoadModule cgid_module modules/mod_cgid.so # LoadModule proxy_module modules/mod_proxy.so # LoadModule proxy_fcgi_module modules/mod_proxy_fcgi.so ↑上記は、コメントのままでOK
php 7.4.x
# wget https://www.php.net/distributions/php-7.4.19.tar.gz # tar xzvf php-7.4.19.tar.gz # cd php-7.4.19 # export PKG_CONFIG_PATH=/usr/local/lib/pkgconfig/ # ./configure --with-apxs2=/usr/local/apache2/bin/apxs -with-mysqli --with-pdo-mysql --enable-mbstring --enable-pcntl --enable-fpm --with-fpm-user=www --with-fpm-group=www --enable-ftp --enable-gd --with-jpeg --with-webp --with-xpm --with-zlib --with-snmp --enable-sockets --with-freetype --enable-cgi --with-curl --enable-intl --with-gettext --with-openssl --enable-bcmath --enable-exif --with-pear
# make # make install
全体を、CGI/FastCGIにする場合
# vi /usr/local/apache2/conf/httpd.conf <Directory /home> Options All -Indexes +SymLinksIfOwnerMatch -FollowSymLinks AllowOverride All AddHandler fcgid-script .php FcgidWrapper /usr/local/bin/php-wrapper .php </Directory>
↑ 後半の2行を加えます。
# vi /usr/local/bin/php-wrapper #!/bin/sh export PHP_FCGI_MAX_REQUESTS=10000 export PHP_FCGI_CHILDREN=0 exec /usr/local/bin/php-cgi
# chown www.www /usr/local/bin/php-wrapper # chmod a+x /usr/local/bin/php-wrapper
↑ 実行権限を設定する
個別に、CGI/FastCGIにする場合(ユーザ毎の権限で実行)
# vi /usr/local/apache2/conf/httpd.conf LoadModule suexec_module modules/mod_suexec.so
↑ SuEXECを有効にします。
SuexecUserGroup test_user users AddHandler fcgid-script .php FcgidWrapper /home/test_user/php-wrapper .php
↑「VirtualHost」の中で、上記を設定します。
「SuexecUserGroup」で実行するユーザ/グループを指定します。
# vi /home/test_user/php-wrapper #!/bin/sh export PHP_FCGI_MAX_REQUESTS=10000 export PHP_FCGI_CHILDREN=0 exec /usr/local/bin/php-cgi
↑ 各ユーザ毎に、php-wrapperと言うファイルを作成します。
exec /usr/local/bin/php-cgi -c /home/test_user/php.ini
↑ というふうに、ユーザ毎のphp.iniファイルを指定することも可能です。
CGI(.phpファイル)にアクセスするたびに
test_users 4246 5.6 1.8 200348 33888 ? S 15:39 0:00 /usr/local/bin/php-cgi
↑ というようにユーザ権限で、プログラムが実行されます。
アクセスがないと、phpは、実行されず、プロセスも起動しません。メモリも消費されません。
X-serverのX10などの共用サーバーで、設定されている方式です
apache 起動
phpinfo()で、みると
Server APIが、「CGI/FastCGI」
と、なっています。