20171009 LAMP(一)
- LAMP介绍
- php详细使用
- CentOS 7环境下部署phpmyadmin
- CentOS 7环境下部署wordpress
- php加速器
- php的fastcgi模式
一、LAMP介绍
(一)LAMP的含义:
- L: linux
- A: apache httpd
- M: mysql, mariadb
- P: php, python
(二)Web资源类型
- 静态资源:原始形式与响应内容一致
- 动态资源:原始形式通常为程序文件,需要在服务器端执行之后,将执行结果返回给客户端
(三)Web相关语言
- 客户端技术:javascript, html,处理静态资源
- 服务器端技术:php, jsp, python,处理动态资源
(四)LAMP工作原理
-
当客户端请求静态资源时,web服务器直接把静态资源返回客户端
-
当客户端请求动态资源时,httpd的php模块会进行动态运算,如果过程需要数据库的数据作为运算参数时,php连接数据库取得相应数据,运算的结果转换为静态资源由web服务器返回客户端
-
CGI(Common Gateway Interface):httpd程序与php之间数据传输的标准
(五)php
-
php是一种脚本编程语言,同时也是一种可以嵌入到html中的嵌入式web程序语言
-
Zend Engine:开源的、php脚本语言的解释器
-
Opcode:php脚本编译后的中间语言,顺次执行opcode,每次执行一条,实现php脚本的解释执行
二、php详细使用
(一)php的配置
-
配置文件:/etc/php.ini, /etc/php.d/*.ini
-
配置文件在php解释器启动时被读取
-
对配置文件的修改生效方法
Modules:重启httpd服务
FastCGI:重启php-fpm服务 -
/etc/php.ini配置文件格式
[foo]:Section Header
directive = value
注释符:使用分号";" -
常用设置:
- max_execution_time = 30:最长执行时间30s
- memory_limit = 128M:生产不够,可调大
- display_errors = off:调试使用,不要打开,否则可能暴露重要信息
- display_startup_errors = off:建议关闭
- post_max_size = 8M:最大上传数据大小,生产可能临时要调大,比下面项要大
- upload_max_filesize = 2M:最大上传文件大小,生产可能要调大
- max_file_uploads = 20:同时上传最多文件数
- date.timezone = Asia/Shanghai:指定时区
- short_open_tag = on:开启短标签,如<? phpinfo();?>
(二)php语言的使用
(1)httpd与php结合的方式
- CGI
- FastCGI
- MPM:将php编译为httpd的模块,默认方式
prefork: libphp5.so
event, worker: libphp5-zts.so
(2)安装LAMP
-
CentOS 6:
yum install httpd, php, php-mysql, mysql-server
service httpd start
service mysqld start -
CentOS 7:
yum install httpd, php, php-mysql, mariadb-server
systemctl start httpd.service
systemctl start mariadb.service -
注意:要使用prefork模型
(3)php代码:
- 格式1:php代码嵌入html代码中
<h1>
<?php echo "hello world"?>
</h1>
- 格式2:html代码嵌入php代码中
<?php
echo "<h1>hello world</h1>"
?>
- 实验:测试php
vim /var/www/html/index.php
<h1>
<?php echo "hello php1!"?>
</h1>
<br /> //空行
<?php
echo "<h1>hello php2!</h1>"
?>
<br /> //空行
<?php
echo date("y/m/d"); //显示当前年月日
phpinfo(); //显示php相关信息
?>
vim /etc/httpd/conf/httpd.conf
<IfModule dir_module>
DirectoryIndex index.php index.html //设置为默认php文件优先级高
</IfModule>
systemctl reload httpd
(4)使用mysql扩展连接数据库
vim /var/www/html/index1.php
<?php
$conn = mysql_connect('192.168.136.130','testuser','centos');
if ($conn)
echo "OK";
else
echo "Failure";
mysql_close();
echo date("y/m/d");
phpinfo();
?>
(5)使用mysqli扩展连接数据库
vim /var/www/html/index2.php
<?php
$mysqli=new mysqli("192.168.136.130","testuser","centos");
if(mysqli_connect_errno()){
echo "连接数据库失败!";
$mysqli=null;
exit;
}
echo "连接数据库成功!";
$mysqli->close();
echo date("y/m/d");
phpinfo();
?>
三、CentOS 7环境下部署phpmyadmin
(一)安装相应的LAMP程序
yum install httpd php php-mysql mariadb-server
systemctl start httpd
systemctl start mariadb
mysql_secure_installation
(二)安装配置phpmyadmin
-
下载并解压安装包
tar xvf phpMyAdmin-4.0.10.20-all-languages.tar.xz -C /var/www/html/
-
配置phpmyadmin
cd /var/www/html/
ln -s phpMyAdmin-4.0.10.20-all-languages phpadmin //用软链接起一个短名字
cd phpadmin/
cp config.sample.inc.php config.inc.php //参考模板配置文件修改
vim config.inc.php
$cfg['blowfish_secret'] = 'a8b7hajldjslc6d'; //可以修改此处密码
- 根据提示,安装缺失软件包
yum install php-mbstring
systemctl reload httpd
- 刷新浏览器,成功显示登录界面
- 输入本机数据库的用户名和密码即可登录进入
四、CentOS 7环境下部署wordpress
- 本实验需要两台主机:
主机1:负责提供web服务和php, IP:192.168.136.130
主机2:负责数据库,IP:192.168.136.230
(一)安装相关程序
- 主机1:安装httpd和php相关程序
yum install httpd php php-mysql
systemctl start httpd
- 主机2:安装mariadb程序
yum install mariadb-server
systemctl start mariadb
mysql_secure_installation
(二)准备数据库
- 主机2:创建数据库和用户
mysql -u root -p
MariaDB > create database wpdb;
MariaDB > grant all on wpdb.* to wpadmin@'%' identified by 'centos';
MariaDB > exit;
(三)安装WordPress
- 主机1:解压缩安装包并进行相应的安装配置
tar xvf wordpress-4.8.1-zh_CN.tar.gz -C /var/www/html/
cd /var/www/html
ln -s wordpress/ blog
cd /var/www/html/blog/
cp wp-config-sample.php wp-config.php //复制配置示例文件
vim wp-config.php
/** WordPress数据库的名称 */
define('DB_NAME', 'wpdb');
/** MySQL数据库用户名 */
define('DB_USER', 'wpadmin');
/** MySQL数据库密码 */
define('DB_PASSWORD', 'centos');
/** MySQL主机 */
define('DB_HOST', '192.168.136.230');
- 浏览器访问
http://192.168.136.130/blog
,按照提示输入信息,点击安装WordPress开始安装
- 安装完成后,输入用户名和密码管理后台
- 后台管理界面
- 此时浏览器访问
http://192.168.136.130/blog
,博客界面如下
- ab测试php性能
ab -c 10 -n 100 http://192.168.136.130/blog/
如下图,当前每秒处理请求数约为10-11
五、php加速器
(一)实现原理
将opcode缓存于php的共享内存中,从而可以让同一段代码的后续重复执行时跳过编译阶段以提高性能
(二)常用php加速器
- APC (Alternative PHP Cache)
- eAccelerator
- XCache:大量应用于生产环境
- Zend Optimizer和Zend Guard Loader
- NuSphere PhpExpress
(三)CentOS 7环境下编译安装php-xcache
- 准备安装环境
yum -y install php-devel
yum groupinstall "development tools"
tar xvf xcache-3.2.0.tar.bz2 -C /usr/local/src
cd /usr/local/src/xcache-3.2.0
- 编译安装
phpize //生成编译环境
./configure --enable-xcache --with-php-config=/usr/bin/php-config
make && make install
- 安装完成后,在/usr/lib64/php/modules目录下生成xcache.so库文件
- 安装配置并测试
cp xcache.ini /etc/php.d/ //添加配置文件
systemctl restart httpd.service
vim /var/www/html/index.php
<?php
phpinfo();
?>
- 浏览器打开
http://192.168.136.130/
,确定安装并加载xcache成功
- ab测试php性能
ab -c 10 -n 100 http://192.168.136.130/blog/
如下图,当前每秒处理请求数约为18-19,比安装xcache前提高了性能80%左右
六、php的fastcgi模式
(一)fastcgi模式介绍
-
fastcgi模式下php以独立程序状态运行,有独立的进程、端口号
-
php-fpm软件包:专用于将php运行于fastcgi模式,与php软件包不能够同时安装
-
httpd2.4支持fastcgi模式,httpd2.2不支持该模式,故CentOS 6环境需要编译httpd2.4才能使用fastcgi模式
(二)配置fastcgi
-
配置文件:/etc/php-fpm.conf, /etc/php-fpm.d/*.conf
-
连接池:
- pm = static | dynamic
- static:固定数量的子进程
pm.max_children 50 - dynamic:子进程数量以动态模式管理
pm.max_children = 50
pm.start_servers = 5
pm.min_spare_servers = 5
pm.max_spare_servers = 35
pm.max_requests= 500
-
启用php-fpm:
yum remove php yum install php-fpm vim /etc/httpd/conf.d/fcgi.conf //添加/etc/httpd/conf.d/fcgi.conf配置文件 DirectoryIndex index.php ProxyRequests Off //关闭正向代理 ProxyPassMatch ^/(.*\.php)$ fcgi://127.0.0.1:9000/var/www/html/$1 //开启fcgi反向代理 systemctl start php-fpm.service systemctl restart httpd
-
浏览器登录
http://192.168.136.130/
,可以看到php-fpm已经开启
- ab测试php性能
ab -c 10 -n 100 http://192.168.136.130/blog/
如下图,当前每秒处理请求数约为26-28,在相同的xcache加速条件下,php_fpm模式比module模式性能提高40%左右
- 注意:在httpd服务器上必须启用proxy_fcgi_module模块,充当PHP客户端
httpd -M | grep fcgi
cat /etc/httpd/conf.modules.d/00-proxy.conf
(三)实验:php_fpm环境下虚拟主机设置
- 新增虚拟主机配置文件
rm -f /etc/httpd/conf.d/fcgi.conf //将上个实验的fcgi配置文件删除
vim /etc/httpd/conf.d/vhosts.conf
DirectoryIndex index.php
<virtualhost *:80>
ServerName "www.hello.com"
DocumentRoot "/app/website1/"
<directory /app/website1>
require all granted
</directory>
ProxyRequests Off
ProxyPassMatch ^/(.*\.php)$ fcgi://127.0.0.1:9000/app/website1/$1
</virtualhost>
<virtualhost *:80>
ServerName "www.bye.com"
DocumentRoot "/app/website2/"
<directory /app/website2>
require all granted
</directory>
ProxyRequests Off
ProxyPassMatch ^/(.*\.php)$ fcgi://127.0.0.1:9000/app/website2/$1
</virtualhost>
- 准备php文件
mkdir /app/website{1,2}
vim /app/website1/index.php
<?php
echo "<h1>welcome to www.hello.com</h1>";
phpinfo();
?>
vim /app/website2/index.php
<?php
echo "<h1>welcome to www.bye.com</h1>";
phpinfo();
?>
-
重启httpd服务
systemctl restart httpd
-
在测试主机上添加hosts记录,浏览器登录
http://www.hello.com
,http://www.bye.com
,结果符合预期