使用php-fpm以fastcgi的方式顺利地运行php
使用fpm将php以fastcgi方式运行
我安装了PHP的CGI版本,而不是模块版本,但直接使用时会担心性能问题,同时也担心安全性,因此我使用php-fpm来通过FastCGI执行。
如果直接使用CGI版,每个请求都会创建一个进程并且在处理完后销毁,这会造成很大的开销和不必要的额外负担。而对于PHP-FPM来说,可以重用进程,因此不仅可以减少开销,还可以实现Opcache的效果,甚至不需要使用模块化版本。
此外,与模块版本不同的是,可以根据每个网站来更改执行用户,并进行各种调整。这样非常方便应用,所以强烈推荐。
※虽然在模块版本中也可以为每个网站启动Web服务器并使用反向代理来实现,但考虑到不像fpm那样简便,我们认为不太方便。
安装php-fpm
假设已经安装了php5.6。
这次一起安装了opcache。由于我们使用的是aws服务器,所以amazon的仓库中存在5.6版本。如果没有5.6版本,请使用remi-php56仓库等其他选项。
可以安装php56-opcache.x86_64和php56-fpm.x86_64。
设定
如果使用yum的软件包进行安装,配置文件将会被放置在
/etc/php-fpm.conf
以及
/etc/php-fpm.d/目录下的*.conf文件被使用。
这次为了增强安全性,我希望能将每个域名的php执行用户分开。
另外,本来想准备一个专用服务器,但这只是我的爱好,所以会安装在与Web服务器相同的服务器上。
因此,我将使用套接字通信。
我们将实现以下具体结构。
设定参数
我认为,pm.max_children、pm.start_servers、pm.min_spare_servers和pm.max_spare_servers这些参数只能在负载测试等过程中进行调整。我认为每个网站和服务器都会有所不同,所以没有绝对正确的答案。
userFPM プロセスの unix ユーザー。このオプションは必須です。セキュリティの為にも専用ユーザを用意した方が良いと思います。groupFPM プロセスの unix グループ。未設定の場合は、デフォルトのユーザーのグループを使います。セキュリティの為にも専用グループを用意した方が良いと思います。
pmプロセスマネージャが子プロセスの数を制御する方法を選択します。 使用可能な値: static, ondemand, dynamic このオプションは必須です。pm.max_childrenpm が static の場合は作成される子プロセスの数、 pm が dynamic の場合は作成される子プロセスの最大数。 このオプションは必須です。このオプションは、同時に処理できるリクエストの最大数を設定します。 mpm_prefork での ApacheMaxClients ディレクティブみたいなイメージです。pm.start_servers起動時に作成される子プロセスの数。pm が dynamic の場合にのみ使います。デフォルト値: min_spare_servers + (max_spare_servers – min_spare_servers) / 2pm.min_spare_serversアイドル状態のサーバープロセス数の最小値。 pm が dynamic の場合にのみ使います。 また、この場合には必須となります。アイドル状態のプロセス数がこれよりも減った場合に新たなプロセスが作成されます。pm.max_spare_serversアイドル状態のサーバープロセス数の最大値。 pm が dynamic の場合にのみ使います。 また、この場合には必須となります。アイドル状態のプロセス数がこれよりも増えた場合にアイドルなプロセスをkillします。pm.max_requests各子プロセスが、再起動するまでに実行するリクエスト数。 サードパーティのライブラリにおけるメモリリークの回避策として便利です。 再起動せずにずっとリクエストを処理させる場合は ‘0’ を指定します。 PHP_FCGI_MAX_REQUESTS と同じです。デフォルト値: 0
pm.status_pathFPM の情報ページを見るための URI。この値を省略した場合は、どの URI も情報ページとは見なされません。デフォルト値: なしping.pathFPM のモニタリングページをコールするための ping URI。この値を省略した場合は、どの URI も ping ページとは見なされません。これを使うと、 FPM が生きていて応答するかどうかを外部から確かめることができます。 この値の最初はスラッシュ (/) で始めなければならないことに注意しましょう。
request_terminate_timeout単一のリクエストを処理する際のタイムアウト。この時間を過ぎるとワーカープロセスが kill されます。 このオプションは、’max_execution_time’ ini オプションが何らかの理由でスクリプトの実行を止められなかった場合に使われます。 値 ‘0’ は ‘Off’ を意味します。 使用可能な単位: s(秒)(デフォルト), m(分), h(時間) あるいは d(日)、 デフォルト値: 0request_slowlog_timeout単一のリクエストを処理する際のタイムアウト。この時間を過ぎると PHP のバックトレースが ‘slowlog’ ファイルに出力されます。 値 ‘0’ は ‘Off’ を意味します。 使用可能な単位: s(秒)(デフォルト), m(分), h(時間) あるいは d(日)、 デフォルト値: 0slowlog遅いリクエストを記録するログファイル。デフォルト値: #INSTALL_PREFIX#/log/php-fpm.log.slow
php_admin_flagこのドメイン独自で設定したい値をここに書くことができます。php.iniの設定を上書きするイメージです。php_admin_valueこのドメイン独自で設定したい値をここに書くことができます。php.iniの設定を上書きするイメージです。php_valueこのドメイン独自で設定したい値をここに書くことができます。php.iniの設定を上書きするイメージです。
用户,添加目录。
为了提高安全性,用户将无法登录。
创建文件夹 /var/www/www.hoge.jp/log,确保目录存在
创建文件夹 /var/www/www.hoge.jp/doc_root,确保目录存在
创建文件夹 /var/www/www.hoge.jp/session,确保目录存在
创建文件夹 /var/www/www.hoge.jp/wsdlcache,确保目录存在
创建/var/www/www.hoge.com/log目录。
创建/var/www/www.hoge.com/doc_root目录。
创建/var/www/www.hoge.com/session目录。
创建/var/www/www.hoge.com/wsdlcache目录。
创建一个ID为2000的www.hoge.jp组。
创建一个ID为2001的www.hoge.com组。
只需一个选项:
useradd -u 2000 -g 2000 -N -s /sbin/nologin -M -d /var/www/www.hoge.jp www.hoge.jp
useradd -u 2001 -g 2001 -N -s /sbin/nologin -M -d /var/www/www.hoge.com www.hoge.com
添加用户-用户名为www.hoge.jp,用户ID为2000,所在组为2000,不创建用户组,登录Shell设置为禁止登录,不创建用户主目录,用户目录路径为/var/www/www.hoge.jp。
添加用户-用户名为www.hoge.com,用户ID为2001,所在组为2001,不创建用户组,登录Shell设置为禁止登录,不创建用户主目录,用户目录路径为/var/www/www.hoge.com。
更改/var/www/www.hoge.jp的所有权为www.hoge.jp:www.hoge.jp并递归应用于所有子目录和文件。
更改/var/www/www.hoge.com的所有权为www.hoge.com:www.hoge.com并递归应用于所有子目录和文件。
/etc/php-fpm.d/下的配置文件
在”/etc/php-fpm.d/”目录下,为每个域名准备一个配置文件。
(也可以在一个文件中写入多个服务器的配置。)
[www.hoge.jp]
listen = /var/run/php-fpm/www.hoge.jp.sock
;listen.allowed_clients = 127.0.0.1
listen.owner = nginx
listen.group = nginx
listen.mode = 0600
user = www.hoge.jp
group = www.hoge.jp
pm = dynamic
pm.max_children = 40
pm.start_servers = 3
pm.min_spare_servers = 5
pm.max_spare_servers = 10
pm.max_requests = 10000
pm.status_path = /operation/php-fpm/www.hoge.jp-status.php
ping.path = /operation/php-fpm/www.hoge.jp-ping.php
request_terminate_timeout = 600
request_slowlog_timeout = 100
slowlog = /var/www/www.hoge.jp/log/php-fpm/php-slow.log
php_admin_flag[log_errors] = on
php_admin_value[error_log] = /var/www/www.hoge.jp/log/php-fpm/php-error.log
php_value[session.save_handler] = files
php_value[session.save_path] = /var/www/www.hoge.jp/session
php_value[soap.wsdl_cache_dir] = /var/www/www.hoge.jp/wsdlcache
[www.hoge.com]
listen = /var/run/php-fpm/www.hoge.com.sock
;listen.allowed_clients = 127.0.0.1
listen.owner = nginx
listen.group = nginx
listen.mode = 0600
user = www.hoge.com
group = www.hoge.com
pm = dynamic
pm.max_children = 40
pm.start_servers = 3
pm.min_spare_servers = 5
pm.max_spare_servers = 10
pm.max_requests = 10000
pm.status_path = /operation/php-fpm/www.hoge.com-status.php
ping.path = /operation/php-fpm/www.hoge.com-ping.php
request_terminate_timeout = 600
request_slowlog_timeout = 100
slowlog = /var/www/www.hoge.com/log/php-fpm/php-slow.log
php_admin_flag[log_errors] = on
php_admin_value[error_log] = /var/www/www.hoge.com/log/php-fpm/php-error.log
php_value[session.save_handler] = files
php_value[session.save_path] = /var/www/www.hoge.com/session
php_value[soap.wsdl_cache_dir] = /var/www/www.hoge.com/wsdlcache
Nginx的一侧
由于NGINX侧使用套接字通信,因此做如下配置。
fastcgi_pass unix:/var/run/php-fpm/www.hoge.jp.sock;
fastcgi_pass unix:/var/run/php-fpm/www.hoge.com.sock;
如果是关于Apache的特别篇
如果可以使用proxy_fcgi_module,则使用proxy_fcgi_module。(2.4〜)
FastCGIExternalServer /usr/sbin/php-fpm -socket /var/run/php-fpm/www.hoge.com.sock
SetHandler "proxy:unix:/var/run/php-fpm/www.hoge.com.sock|fcgi://localhost"
引用来源
以上()