apacheでphpを動かすには mod_php 方式か fpm(FastCGI Process Manager) 方式がある.

共存させるには?

簡単には Directory ディレクティブを使って 片方は mod_php、片方が fpm とかでしょうか.

mod_php

単純に

yum install http php

にてphpが有効になる。mod_phpというが実際には「/usr/lib64/httpd/modules/libphp5.so」が担当する
試しに

[root@centos7 ~]# vi /var/www/html/phpinfo.php
<?php
phpinfo();
?>
 
[root@centos7 ~]# firewall-cmd --add-service=http --zone=public --permanent
[root@centos7 ~]# firewall-cmd --reload
[root@centos7 ~]# getenforce
Enforcing
[root@centos7 ~]# systemctl start httpd

として当該サーバの「phpinfo.php」を叩くと下記が表示される
2021y05m25d_001654112.png

「Server API」項目で「Apache 2.0 Handler」の場合は mod_php を使っていることになるそうな

次にpfmの場合

fpm

yum install centos-release-scl
yum install rh-php72-php-fpm

apacheのCGI機構からphpへの連絡はtcp経由か unix socket を使うか選べる. ここでは既定であった tcp 経由で繋げてみた
なので変更は不要なのだが、変更箇所は

[root@centos7 ~]# vi /etc/opt/rh/rh-php72/php-fpm.d/www.conf
 :
 :
listen = 127.0.0.1:9000
 :
[root@centos7 ~]#

と「listen」で定義される.
このポート番号(9000)を変更すると SELinux での定義も変更を加える必要があすそうな
参照:https://wiki.centos.org/HowTos/php7

で、fpmデーモンを起動させる

systemctl start rh-php72-php-fpm.service

次にfpmで稼働するphpスクリプトを用意してみるが、mod_phpと共存なので Directory ディレクティブを使って
「ここはfpmで動く場所」と定義してみる

[root@centos7 ~]# vi /etc/httpd/conf.d/fpm-test.conf
Alias /fpm-test /var/www/fpm-test
<Directory "/var/www/fpm-test">
    Options FollowSymLinks
    AllowOverride None
    Require all granted
 
    <IfModule dir_module>
        DirectoryIndex index.php
    </IfModule>
 
    <FilesMatch \.(php|phar)$>
        SetHandler "proxy:fcgi://127.0.0.1:9000"
    </FilesMatch>
</Directory>
[root@centos7 ~]# mkdir /var/www/fpm-test
[root@centos7 ~]# vi /var/www/fpm-test/phpinfo.php
<?php
phpinfo();
?>
 
[root@centos7 ~]# systemctl restart httpd

該当のURLにアクセスすると
2021y05m25d_003952606.png
となる.
なのでコンテンツの場所でmod_php、fpmを使い分けることが可能

fpmをsocketで繋げたい

まずは「/etc/opt/rh/rh-php72/php-fpm.d/www.conf」を調整.
socketファイルの所有者を変更します. 既定だとrootです.

38c38
< listen = 127.0.0.1:9000
---
> listen = /var/opt/rh/rh-php72/run/php-fpm/fpm-test.sock
48,49c48,49
< ;listen.owner = nobody
< ;listen.group = nobody
---
> listen.owner = apache
> listen.group = apache

そしてhttp側の「/etc/httpd/conf.d/fpm-cgi.conf」を修正します

  SetHandler "proxy:fcgi://127.0.0.1:9000"
     ↓
  SetHandler "proxy:unix:/var/opt/rh/rh-php72/run/php-fpm/fpm-test.sock|fcgi://localhost"

これで「systemctl restart rh-php72-php-fpm.service」と「systemctl restart httpd」で完了


トップ   編集 添付 複製 名前変更     ヘルプ   最終更新のRSS
Last-modified: 2021-05-25 (火) 01:12:19 (65d)