学习本教程须掌握:
1、Linux下指定版本编译安装LAMP
https://www.osyunwei.com/archives/9224.html
2、Linux下Apache虚拟主机配置
https://www.osyunwei.com/archives/9232.html
3、CentOS 7.x编译安装Nginx1.10.3+MySQL5.7.16+PHP5.2 5.3 5.4 5.5 5.6 7.0 7.1 7.2 7.3多版本全能环境
https://www.osyunwei.com/archives/10057.html
安装约定:
Apache版本:2.2
Apache安装路径:/usr/local/apache
Apache虚拟主机配置文件:/usr/local/apache/conf/vhost
php版本:支持php5.2到最新的php7.3
php安装路径:/usr/local/php56 /usr/local/php73
开始配置:
1、安装Apache的mod_fcgid模块 #mod_fcgid模块可以实现Apache下多版本php同时运行
cd /usr/local/src
wget https://mirrors.tuna.tsinghua.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=/usr/local/apache/bin/apxs ./configure.apxs
make
make install
2、修改apache配置文件
cp /usr/local/apache/conf/httpd.conf /usr/local/apache/conf/httpd.conf-bak #备份
vi /usr/local/apache/conf/httpd.conf #编辑
#在Group apache下面一行添加如下代码,如果配置文件有就不用重复添加。
LoadModule fcgid_module modules/mod_fcgid.so
FcgidMaxProcesses 1000 #php-cgi最大的进程数
MaxRequestLen 52428800 #php程序最大文件上传限制50MB
:wq! #保存退出
一般安装完第一步mod_fcgid模块,会在apache配置文件httpd.conf中自动添加上面第一行的代码。
apache php fastcgi模式下,默认上传文件大小只有131072字节(128kb),需要在apache的配置文件中修改,
fastcgi模式下,在php.ini中修改upload_max_filesize等参数无效。
3、配置虚拟主机文件
cd /usr/local/apache/conf/vhost
vi osyunwei.com.conf #编辑虚拟主机配置文件,添加下面的红色字体代码。
<VirtualHost *:80>
# ServerAdmin webmaster@dummy-host.example.com
DocumentRoot /data/root/osyunwei.com/www.osyunwei.com/wwwroot/
ServerName www.osyunwei.com
ServerAlias osyunwei.com
# ErrorLog logs/dummy-host.example.com-error_log
# CustomLog logs/dummy-host.example.com-access_log common
CustomLog "|/usr/local/apache/bin/rotatelogs /upload/log/osyunwei.com/www.osyunwei.com/logf iles/access_log%Y%m%d.log 86400 480" combined
DirectoryIndex index.htm index.html index.php
AddHandler fcgid-script .fcgi .php #映射fcgi执行脚本
FcgidInitialEnv PHP_FCGI_MAX_REQUESTS 1000 #设置PHP_FCGI_MAX_REQUESTS大于或等于FcgidMaxRequestsPerProcess,防止php-cgi进程 在处理完所有请求前退出
FcgidMaxRequestsPerProcess 1000 #php-cgi每个进程的最大请求数
FcgidIOTimeout 300 #最大执行时间
FcgidIdleTimeout 300 #最大空闲时间
FcgidMaxRequestLen 2097152 #限制最大请求字节
MaxRequestLen 52428800 #php程序最大文件上传限制50MB,默认只有2MB
FcgidInitialEnv PHPRC "/usr/local/php73/" #php安装路径
FcgidWrapper "/usr/local/php73/bin/php-cgi" .php #php-cgi脚本执行路径
<Directory "/data/root/osyunwei.com/www.osyunwei.com/wwwroot/">
php_admin_value open_basedir "/data/root/osyunwei.com/www.osyunwei.com/wwwroot/:/tmp/"
Options Includes ExecCGI FollowSymLinks
AllowOverride All
Order allow,deny
Allow from all
</Directory>
</VirtualHost>
#其他的虚拟主机设置方法一样,php安装路径部分,根据服务器上php实际安装路径填写。
#apache使用mod_fcgid模块后,php_admin_value open_basedir 参数就不起作用了,防止php脚本跨站必须去php.ini配置文件中设置。
[HOST=www.osyunwei.com]
[PATH=/data/root/osyunwei.com/www.osyunwei.com/wwwroot/]
open_basedir=/data/root/osyunwei.com/www.osyunwei.com/wwwroot/:/tmp/
4、测试虚拟主机
在虚拟主机目录下上传测试文件,查看php版本信息的变化。
ceshi.php
<?php
phpinfo();
?>
打开测试页面,会看到php版本已经变成了7.3
特别注意:
这样配置的apache、php运行模式为apache fastcgi模式,此模式下apache的伪静态规则需要做调整。
如:默认的
RewriteRule ^(.*)$ index.php/$1 [QSA,PT,L]
规则在apache fastcgi模式下会导致No input file specified.
修改成
RewriteRule ^(.*)$ index.php [L,E=PATH_INFO:$1]
就正常了。
Thinkphp框架的apache规则.htaccess文件,默认为:
<IfModule mod_rewrite.c>
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ index.php/$1 [QSA,PT,L]
</IfModule>
apache fastcgi模式需要调整为:
<IfModule mod_rewrite.c>
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
#RewriteRule ^(.*)$ index.php/$1 [QSA,PT,L]
RewriteRule ^(.*)$ index.php [L,E=PATH_INFO:$1]
</IfModule>
至此,Linux下apache虚拟主机配置多版本php同时运行教程完成。