论坛 » BootPHP » Apache 上用 mod_proxy_fcgi 和 php-fpm 实现高性能PHP

版主:无

1

作者 帖子

天师
管理员
注册于:2015年1月
发帖数:11

Apache 上用 mod_proxy_fcgi 和 php-fpm 实现高性能PHP

#楼主 2016-08-13 18:44

一、网站根目录 创建网站根目录:

sudo mkdir /var/www/htdocs
将该目录指定给当前用户:
引用
sudo chown current_user /var/www/htdocs
上面的红色文字为当前用户名,请根据实际情况进行替换。 二、apache httpd 2.4 说明:本文中使用的命令均为 Ubuntu 16.04 系统支持的命令。其它系统请选择其合适的命令。 安装:
sudo apt-get install apache2
确保 httpd.conf 中包含了 proxy_fcgi 模块,以便我们能够使用它的特性:
sudo a2enmod proxy_fcgi
因为这个需要基本代理模块,系统会自动启用 proxy 模块。 编辑你选择的虚拟主机的配置:
sudo gedit /etc/apache2/sites-available/000-default.conf
将第12行的
DocumentRoot /var/www/html
修改为
DocumentRoot /var/www/htdocs
如果你是 Ubuntu 用户,只需简单地开启 php-fpm 配置:
sudo a2enconf php7.0-fpm
跳过下面的内容,直接进入到第三步,安装 php 吧! 如果你是其它系统的用户,且没有提供现成的 php-fpm 配置,可以参考以下内容。 在第28行后面添加
	ProxyPassMatch ^/(.*\.php(/.*)?)$ unix:/run/php/php7.0-fpm.sock|fcgi://127.0.0.1:9000/var/www/htdocs/
DirectoryIndex /index.php index.php
看糊涂了吧?我们来看一下: ProxyPassMatch 只代理指定的正则表达式匹配的内容。 ^/(.*\.php(/.*)?)$ 从网站根目录开始,匹配所有以 .php 结尾的内容(“.”被转义),后面跟着可选的斜杠与任意路径(一些应用使用所谓的 pathinfo 将参数传递给 php 脚本。) 这个 ^(插入)和 $ (美元)符号用来固定这个绝对URL的开始和结束,以确保来自请求的字符没有逃出我们的正则匹配。 这对嵌套的括号作为 $1,使我们不仅能够引用整个请求URI(去掉前导斜杠),而且仍然保持尾随的 pathinfo 可选。 fcgi://127.0.0.1:9000 通过 mod_proxy_fcgi 使用 fastCGI 协议转发给 php-fpm 守护程序监听的端口。这决定了哪一个 fastcgi 池服务请求。 /var/www/htdocs/ 非常重要!这个必须精确匹配文件系统中 php 文件的位置,因为这是 php-fpm 守护程序查找它们的地方。 php-fpm 只是解析传递给它的 php 文件;它不是 web 服务器,也不会理解 web 服务器的命名空间、虚拟主机布局和别名。 非常重要!把上面再读一遍$1 从原请求扩展到整个请求URI,去掉前导斜杠(因为我们已经在前面加过了)。 DirectoryIndex /index.php index.php 对 / 的请求需要映射到 fcgi 后端的一个资源。不处理这个会导致空白响应,即通常所说的“白屏”,尤其是包含 php 扩展名的请求被代理,就像这个例子。这个处理链路先将 / 请求映射到 /index.php 或任何其它相对于当前请求URI的 index.php 文件,然后正确地代理到 PHP-FPM 后端。 unix domain socket (UDS) 方式 unix:/run/php/php7.0-fpm.sock 为你的 fpm socket 路径。 注意,用这种方式,获得的请求URI($1)并不传递到路径的后面。
更多设置请参考 httpd 维基:https://wiki.apache.org/httpd/PHP-FPM 三、PHP-FPM 安装:
sudo apt-get install php-fpm
如果需要安装 memcache 和 redis 模块,可以这样做:
sudo apt-get install php-memcache
sudo apt-get install php-redis
sudo service php7.0-fpm restart
四、重启 apache: 在 Ubuntu 中重启 apache 时会出现类似“Could not reliably determine the server's fully qualified domain name”这样的警告,可以在配置文件
sudo gedit /etc/apache2/apache2.conf
中添加 ServerName 值:
ServerName localhost
sudo apache2ctl restart

« 由 天师 最后编辑于 2016-08-15 07:47。 »

1