Xinu

Apache服务器设置多种php运行方式
php在apache服务器下运行方式主要有一下几种:模块化(效率最高)CGI方式(不推荐,效率低)FastCgip...
扫描右侧二维码阅读全文
30
2019/05

Apache服务器设置多种php运行方式

php在apache服务器下运行方式

主要有一下几种:

  1. 模块化(效率最高)
  2. CGI方式(不推荐,效率低)
  3. FastCgi
  4. phpfpm

1. 模块化方式

在编译安装php的时候,增加--with-apxs2=/server/httpd/bin/apxs 选项,会自动生成php5_module。
在http.conf文件中如下设置


# 加载模块
LoadModule php5_module modules/libphp5.so
# 设置方式1
 <FilesMatch "\.php$">
    SetHandler application/x-httpd-php
</FilesMatch>
# 设置方式2
# 在<IfModule mime_module>中添加如下内容
AddType application/x-httpd-php .php

2.CGI方式

CGI是通用网关接口协议的缩写,是一种通用的规范协议,与语言无关,编译安装的php在bin下会存在一个php-cgi,就是php自带的CGI接口程序
设置如下

# 加载模块
LoadModule alias_module modules/mod_alias.so
LoadModule cgid_module modules/mod_cgid.so(linux)
LoadModule cgi_module modules/mod_cgi.so(windows)
LoadModule actions_module modules/mod_actions.so
# 在安装好的php目录下的bin下复制php-cgi到 /server/www/cgi-bin
# /server/www/cgi-bin 此目录是在安装apache的时候自动生成的,/server/www/是apaceh服务器的网页根目录
# 将安装好的php-cgi复制到有执行CGI程序权限的目录下
# 这个目录可以是任意目录,只要在配置中给权限就好,建议放在官方推荐的位置,根据安装位置的不同,默认的位置不同
cp /server/php56/bin/php-cgi /server/www/cgi-bin/
# 在http.conf文件中查找ScriptAlias,规定了CGI执行目录
ScriptAlias /cgi-bin/ "/server/www/cgi-bin"
<Directory "/server/www/cgi-bin">
    AllowOverride None
    Options All
    Require all granted
 </Directory>
AddType application/x-httpd-php .php
Action application/x-httpd-php /cgi-bin/php-cgi
# application/x-httpd-php 可以自定义 扩展.php的Mime

3.FastCgi方式

FastCgi是对CGI方式的一个优化,效率有显著提升
php官网中的FastCgi安装说明 点我
不过FastCgi的官网已经倒闭了....
好在Apache提供了新的模块mod_fcgid来支持FastCgi的实现
mod_fcgid官方文档地址 点我

# 安装 mod_fcgid 模块
wget http://mirror.bit.edu.cn/apache//httpd/mod_fcgid/mod_fcgid-2.3.9.tar.gz
tar -zxvf mod_fcgid-2.3.9.tar.gz
cd mod_fcgid-2.3.9
APXS=/server/httpd/bin/apxs ./configure.apxs 
make
make install

查看http.conf文件,会发现配置文件LoadModule最后面会自动加了一行


LoadModule fcgid_module modules/mod_fcgid.so
# 这里是通用设置所有的.php文件都会被处理 
# 不同的虚拟机还可以配置不同的php版本处理
<IfModule fcgid_module>
    # 初始化设置
    # CGI进程的最大请求个数
    FcgidInitialEnv PHP_FCGI_MAX_REQUESTS 1000
    #fcgi每个进程的最大请求数要<= 上面的PHP_FCGI_MAX_REQUESTS 否则会出现请求完不成的问题
    FcgidMaxRequestsPerProcess 1000
    #php-cgi最大的进程数
    FcgidMaxProcesses 5
    #最大执行时间
    FcgidIOTimeout 120
    FcgidIdleTimeout 120
    AddHandler fcgid-script .php
    <FilesMatch "\.php$">
        Options ExecCgi
        FcgidWrapper /server/www/cgi-bin/php-cgi .php
    </FilesMatch>
</IfModule>

# 为虚拟机设置不同的php版本
# 注释掉上文中的FilesMatch容器
# 在虚拟机内添加如下设置
# 更改不同版本的cgi路径即可
<FilesMatch '\.php$'>
    Options ExecCgi
    FcgidWrapper /server/www/cgi-bin/php-cgi .php
</FilesMatch>

4. php-fpm php fastcgi process manager

该方式的本质还是FastCgi不过管理Cgi的工作由Apache变成了php,Apache只做转发工作
该方式需要在编译安装的时候开启 --enable-fpm
安装成功在安装目录下的sbin下会出现一个php-fpm
php-fpm方式


# 复制启动脚本到 启动目录
cp /server/source/php-5.6.38/sapi/fpm/init.d.php-fpm.in /etc/init.d/php-fpm56
# 复制配置文件到/etc下
# 默认的文件在安装路径下的etc中
cp /server/php56/etc/php-fpm.conf.default /etc/php-fpm56.conf
# 修改php-fpm56.conf配置文件

默认参数基本不需要修改什么
php-fpm调优参数设置参考 这里

这里附上一份宝塔面板的php-fpm参数配置供参考

[global]
pid = /www/server/php/56/var/run/php-fpm.pid
error_log = /www/server/php/56/var/log/php-fpm.log
log_level = notice

[www]
listen = /tmp/php-cgi-56.sock
listen.backlog = -1
listen.allowed_clients = 127.0.0.1
listen.owner = www 
listen.group = www 
listen.mode = 0666
user = www 
group = www 
pm = dynamic
pm.status_path = /phpfpm_56_status
pm.max_children = 80
pm.start_servers = 15
pm.min_spare_servers = 15
pm.max_spare_servers = 80
request_terminate_timeout = 100
request_slowlog_timeout = 30
slowlog = var/log/slow.log

# 启动php-fpm
/etc/init.d/php-fpm56 start
# 修改http.conf文件
# 需要代理模块
LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_fcgi_module modules/mod_proxy_fcgi.so
ProxyPass '/status' fcgi://127.0.0.1:9000 # 这个是设置访问/status 查看当前php-fpm的工作情况 实际生产环境中 需要把这个屏蔽掉
ProxyRequests Off
ProxyPassMatch ^/(.*\.php)$ fcgi://127.0.0.1:9000/server/www/htdocs/p5/$1 # 这里的目录要和访问的文件实际所在路径完全一致

相关文章

apache安装看 这里
apache配置看 这里

Last modification:June 5th, 2019 at 05:40 pm

Leave a Comment