实现LAMP架构
主要内容
1. PHP连接MySQL的方式
1.1 使用mysql扩展连接数据库
使用mysql扩展模块mysql.so连接数据,此方式已经在php 7版后淘汰
范例:php使用mysql扩展连接数据库的测试代码
<?php
$conn = mysql_connect('mysqlserver','username','password');
if ($conn)
echo "OK";
else
echo "Failure";
#echo mysql_error();
mysql_close();
?>
1.2 使用mysqli扩展连接数据库
使用mysqli扩展模块mysqli.so连接数据,此方式只能连接MySQL数据库,不支持其它数据库,故使用此方式不多
范例:php使用mysqli扩展连接数据库的测试代码
<?php
$mysqli=new mysqli("mysqlserver", "username", "password");
if(mysqli_connect_errno()){
echo "Failure";
$mysqli=null;
exit;
}
echo "OK";
$mysqli->close();
?>
1.3 使用PDO(PHP Data Object)扩展连接数据库
使用PDO扩展模块pdo_mysql.so连接数据库,此方式可以支持连接MySQL,Oracle等多种数据库,较为常用。
范例:php使用pdo扩展连接数据库的测试代码
<?php
try {
$user='root';
$pass='magedu';
$dbh = new PDO('mysql:host=mysqlhost;dbname=mysql', $user, $pass);
foreach($dbh->query('SELECT user,host from user') as $row) {
print_r($row);
}
$dbh = null;
} catch (PDOException $e) {
print "Error!: " . $e->getMessage() . "<br/>";
die();
}
?>
2. yum方式实现wordpress部署个人博客
2.1 centos8以CGI方式实现部署wordoress
安装yum包
[root@centos8 ~]# dnf -y install httpd php php-json php-mysqlnd mariadb-server
创建wordpress数据库和账号
[root@centos8 ~]# systemctl start mariadb.service
[root@centos8 ~]# mysql
MariaDB [(none)]> create database wordpress;
Query OK, 1 row affected (0.001 sec)
MariaDB [(none)]> grant all on wordpress.* to wordpress@'localhost' identified by 'magedu';
Query OK, 0 rows affected (0.000 sec)
配置php模块和httpd
因为centos8的php默认开启fpm功能,所以要关闭fpm,让httpd加载php模块
[root@centos8 ~]# vim /etc/httpd/conf.d/php.conf
#将以下全部注释
#<IfModule !mod_php5.c>
# <IfModule !mod_php7.c>
# # Enable http authorization headers
# SetEnvIfNoCase ^Authorization$ "(.+)" HTTP_AUTHORIZATION=$1
#
# <FilesMatch \.(php|phar)$>
# SetHandler "proxy:unix:/run/php-fpm/www.sock|fcgi://localhost"
# </FilesMatch>
# </IfModule>
#</IfModule>
查看php模块的配置文件
[root@centos8 ~]# vim /etc/httpd/conf.modules.d/15-php.conf
<IfModule !mod_php5.c>
<IfModule prefork.c>
LoadModule php7_module modules/libphp7.so
</IfModule>
</IfModule>
发现要加载php模块httpd必须要工作在prefork模式
[root@centos8 ~]# httpd -M | grep mpm
mpm_event_module (shared)
# centos8默认是event模式
[root@centos8 ~]# vim /etc/httpd/conf.modules.d/00-mpm.conf
#注释下面一行
#LoadModule mpm_event_module modules/mod_mpm_event.so
#对下面一行取消注释
LoadModule mpm_prefork_module modules/mod_mpm_prefork.so
[root@centos8 ~]# httpd -M | grep mpm
mpm_prefork_module (shared)
再次查看发现php模块已经加载
[root@centos8 ~]# httpd -M | grep php
php7_module (shared)
# 若未加载则重启httpd
下载最新版wordpress到服务器,官网下载即可,需要翻墙
[root@centos8 data]# tar xf wordpress-5.3-zh_CN.tar.gz -C /var/www/html/
[root@centos8 data]# chown -R apache.apache /var/www/html/wordpress/
然后浏览器访问http://服务器ip/wordpress
点击现在开始
根据提示输入数据库用户名和密码,点击提交
点击现在安装
根据提示填写,最后点击安装wordpress
设置完成,再次访问http://服务器ip/wordpress
即可
2.2 php-fpm模式实现LAMP
2.2.1 各种OS版本对fastcgi的支持
centos 8:
默认使用fpm模式
centos 7:
httpd-2.4:默认rpm包支持fcgi模块
php-fpm包:专用于将php运行于fpm模式
centos 6:
PHP-5.3.2之前:默认不支持fpm机制;需要自行打补丁并编译安装
httpd-2.2:默认不支持fcgi协议,需要自行编译此模块
解决方案:编译安装httpd-2.4, php-5.3.3+
2.2.2 安装php-fpm
centos8默认安装的php-fpm版本已经很新了,不用再单独安装
centos7使用清华大学yum源安装较新版的PHP-FPM
yum install https://mirrors.tuna.tsinghua.edu.cn/remi/enterprise/remi-release-
7.rpm
#安装php-fpm5.6版
yum install php56-php-fpm php56-php-mysql
#安装php-fpm7.3版
yum install php73-php-fpm php73-php-mysql
2.2.3 php-fpm配置文件
[root@centos8 data]# rpm -ql php-fpm
/etc/httpd/conf.d/php.conf
/etc/logrotate.d/php-fpm
/etc/nginx/conf.d/php-fpm.conf
/etc/nginx/default.d/php.conf
/etc/php-fpm.conf
/etc/php-fpm.d
/etc/php-fpm.d/www.conf
/etc/systemd/system/php-fpm.service.d
/run/php-fpm
/usr/lib/.build-id
/usr/lib/.build-id/54
/usr/lib/.build-id/54/336c4d18722eb06945e653dfba427c6c7aaaee
/usr/lib/systemd/system/httpd.service.d/php-fpm.conf
/usr/lib/systemd/system/nginx.service.d/php-fpm.conf
/usr/lib/systemd/system/php-fpm.service
/usr/sbin/php-fpm
/usr/share/doc/php-fpm
/usr/share/doc/php-fpm/php-fpm.conf.default
/usr/share/doc/php-fpm/www.conf.default
/usr/share/fpm
/usr/share/fpm/status.html
/usr/share/licenses/php-fpm
/usr/share/licenses/php-fpm/fpm_LICENSE
/usr/share/man/man8/php-fpm.8.gz
/var/lib/php/opcache
/var/lib/php/session
/var/lib/php/wsdlcache
/var/log/php-fpm
php-fpm主要配置文件
- /etc/php-fpm.conf
- /etc/php-fpm.d/*.conf
php-fpm常见配置
- daemonize = no //是否将程序运行在后台
- listen = 127.0.0.1:9000 //FPM 监听地址
- listen = /var/run/php.sock //UDF模式使用,指定生成的unix socket文件的路径
- listen.owner = apache //UDF模式使用,指定生成的unix socket文件的所有者
- listen.group = apache //UDF模式使用,指定生成的unix socket文件的所属组
- listen.mode= 0666 //UDF模式使用,,指定生成的unix socket文件的权限
- listen.acl_users = apache,nginx //指定用户访问unix socket文件,listen.owner 和listen.group
将无效 - listen.backlog = -1 //等待队列的长度 -1表示无限制
- listen.allowed_clients = 127.0.0.1 //仅允许哪些主机访问
- pm = dynamic|static //static 固定数量的子进程, //dynamic子进程数据以动态模式管理
- pm.max_childen //static 固定数量的子进程
- pm.start_servers
- pm.min_spare_servers
- pm.max_spare_servers
- pm.max_requests = 500
- php_value[session.save_handler] = files
- php_value[session.save_path] = /var/lib/php/session //设置session存放位置
session目录
确保运行php-fpm进程的用户对session目录有读写权限
mkdir /var/lib/php/session
chown apache.apache /var/lib/php/session
php-fpm配置生产范例:
cat /etc/php-fpm.d/www.conf
[www]
listen = 127.0.0.1:9000 #监听地址及IP
listen.allowed_clients = 127.0.0.1 #允许客户端从哪个源IP地址访问,要允许所有行首加 ;注释
即可
user = apache #php-fpm启动的用户和组,会涉及到后期文件的权限问题
group = apache
pm = dynamic #动态模式进程管理
pm.max_children = 500 #静态方式下开启的php-fpm进程数量,在动态方式下他限定php-fpm的最大进
程数
pm.start_servers = 100 #动态模式下初始进程数,必须大于等于pm.min_spare_servers和小于等
于pm.max_children的值。
pm.min_spare_servers = 100 #最小空闲进程数
pm.max_spare_servers = 200 #最大空闲进程数
pm.max_requests = 500000 #进程累计请求回收值,会重启
pm.status_path = /pm_status #状态访问URL
ping.path = /ping #ping访问动地址
ping.response = ping-pong #ping返回值
slowlog = /var/log/php-fpm/www-slow.log #慢日志路径
php_admin_value[error_log] = /var/log/php-fpm/www-error.log #错误日志
php_admin_flag[log_errors] = on
php_value[session.save_handler] = files #phpsession保存方式及路径
php_value[session.save_path] = /var/lib/php/session #当时使用file保存session的文件
路径
2.2.4 实现php-fcgi
安装php-fcgi包
[root@centos8 ~]# yum install php-fpm
因为fcgi模式不依赖与prefork模式,所以将mpm改回event模式
[root@centos8 ~]# vim /etc/httpd/conf.modules.d/00-mpm.conf
LoadModule mpm_event_module modules/mod_mpm_event.so
#这行取消注释,剩下的全部注释
修改php-fpm配置文件
[root@centos8 ~]# vim /etc/php-fpm.d/www.conf
listen = /run/php-fpm/www.sock #因为在本机,所以选择sock文件方式
;listen = 127.0.0.1:9000 #也可选用ip加端口方式
user = apache
group = apache
listen.owner = apache
listen.group = apache
listen.mode = 0666
listen.acl_users = apache,nginx
修改httpd配置文件
[root@centos8 ~]# vim /etc/httpd/conf.d/php.conf
<IfModule !mod_php5.c>
<IfModule !mod_php7.c>
# Enable http authorization headers
SetEnvIfNoCase ^Authorization$ "(.+)" HTTP_AUTHORIZATION=$1
<FilesMatch \.(php|phar)$>
SetHandler "proxy:unix:/run/php-fpm/www.sock|fcgi://localhost"
</FilesMatch>
</IfModule>
</IfModule>
将这些全部取消注释
然后重启服务
[root@centos8 ~]# systemctl restart php-fpm.service
[root@centos8 ~]# systemctl restart httpd
浏览器访问http://服务器ip/wordpress
3. 实现xcache加速php5.x
编译php-xcache加速访问,支持php 5.6版以下
范例:
[root@centos7 ~]#yum -y install
https://mirrors.tuna.tsinghua.edu.cn/remi/enterprise/remi-release-7.rpm
[root@centos7 ~]#yum install php56-php php56-php-mysqlnd mariadb-server
[root@centos7 ~]#systemctl enable --now httpd mariadb
Created symlink from /etc/systemd/system/multi-user.target.wants/httpd.service
to /usr/lib/systemd/system/httpd.service.
Created symlink from /etc/systemd/system/multi-user.target.wants/mariadb.service
to /usr/lib/systemd/system/mariadb.service.
[root@centos7 ~]#mysql
MariaDB [(none)]> create database wordpress;
MariaDB [(none)]> grant all on wordpress.* to wordpress@'localhost' identified
by 'magedu';
[root@centos7 ~]#tar xvf wordpress-5.2.4-zh_CN.tar.gz -C /var/www/html
[root@centos7 ~]#cd /var/www/html
[root@centos7 ~]#chown -R apache.apache wordpress/
[root@centos7 ~]#yum -y install gcc php-devel
#下载并解压缩xcache-3.2.0.tar.bz2
[root@centos7 ~]#tar xf xcache-3.2.0.tar.gz
#生成编译环境
[root@centos7 ~]#cd xcache-3.2.0/
[root@centos7 xcache-3.2.0]#/opt/remi/php56/root/usr/bin/phpize
Configuring for:
PHP Api Version: 20131106
Zend Module Api No: 20131226
Zend Extension Api No: 220131226
[root@centos7 xcache-3.2.0]#./configure --enable-xcache --with-phpconfig=/
opt/remi/php56/root/usr/bin/php-config
[root@centos7 xcache-3.2.0]#make && make install
...省略...
Installing shared extensions: /opt/remi/php56/root/usr/lib64/php/modules/
[root@centos7 xcache-3.2.0]#cat xcache.ini >> /opt/remi/php56/root/etc/php.ini
#安装base源中执行即可cp xcache.ini /etc/php.d/
[root@centos7 ~]#systemctl restart httpd.service
#测试性能
[root@centos7 ~]#ab -c10 -n 100 http://LAMP服务器/wordpress
4. opcaache加速php7.x
范例:
[root@centos8 ~]#dnf install php-opcache
[root@centos8 ~]#rpm -ql php-opcache
/etc/php.d/10-opcache.ini
/etc/php.d/opcache-default.blacklist
/usr/lib/.build-id
/usr/lib/.build-id/71
/usr/lib/.build-id/71/55ebb00f7ebcab9d708c1d5c7b7e634cce259c
/usr/lib64/php/modules/opcache.so
[root@centos8 ~]#grep opcache /etc/php.d/10-opcache.ini
zend_extension=opcache
opcache.enable=1
...省略...