部署LNMP环境
第一步:装包(7个包)。其中nginx和php-fpm无红帽yum源,其余用yum安装
nginx------作为代理或http服务器------------------监听TCP 80(源码安装)
Mariadb---数据库客户端软件提供mysql命令,命令成功的前提是mariadb-server已安装,并已启动mariadb-server服务,mysql命令会去连接mariadb-serve
mariadb-server----数据库服务器,作为服务器为其他客户端提供数据的使用,可实时查看和调整数据库--------端口3306
mariadb-devel-------数据库的依赖包
php----------------------解释器
php-mysql------------使php能够连接上mysql
php-fpm---------------能够启动php服务---------端口9000(下载rpm包安装)
安装Nginx # yum –y install gcc gcc-c++ make pcre-devel openssl-devel zlib-devel
# useradd –s /sbin/nologin nginx
# tar -zxvf nginx-1.8.0.tar.gz
# cd nginx-1.8.0
# ./configure
--prefix=/usr/local/nginx --with-http_ssl_module
# make && make install
安装MariaDB # yum -y install mariadb mariadb-server mariadb-devel
mariadb数据库客户端软件、mariadb-server数据库服务器、mariadb-devel依赖包
安装PHP php是解释器 扩展包php-mysql 数据库mysql-server
# yum -y install php
安装PHP扩展,使得PHP可以连接MariaDB数据库 # yum -y install php-mysql
# tar –xf lnmp_soft-2017-03-28.tar.gz
# cd lnmp_soft
# yum -y localinstall php-fpm
另一种安装方法:# yum -ivh php-fpm
第二步:起nginx、mariadb、php-fpm服务,查看其服务状态
启动Nginx服务 # systemctl stop httpd //如果该服务存在则关闭该服务
# systemctl disable httpd //关闭httpd的开机启动功能
# /usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf
查看nginx服务状态 # netstat -pantul |grep 80
启动MySQL服务
# systemctl start mariadb; systemctl enable mariadb; systemctl status mariadb
查看mariadb服务状态 # netstat -pantul |grep 3306
启动PHP服务
# systemctl start php-fpm; systemctl enable php-fpm; systemctl status php-fpm
查看php-fpm服务状态 # netstat -pantul |grep 9000
Nginx+FastCGI
FastCGI工作原理
1.Web Server启动载入FastCGI进程管理器
2.FastCGI进程管理器初始化,启动多个解释器进程
3.当客户端请求到达Web server时,FastCGI进程管理器选择并连接到一个解释器
4.FastCGI子进程完成处理后返回结果,将标准输出和错误信息从同一连接返回Web Server
FastCGI是一种常驻(Long-Live)型的CGI。将CGI解释器进程保持在内存中,进行维护与调度;FastCGI技术目前支持语言有PHP、C/C++、Java、Perl、Python、Ruby等
FastCGI缺点:内在消耗大。因为是多进程,所以比CGI多线程消耗更多的服务器内存,PHP-CGI解释器每进程消耗7至25兆内存,将这个数字乘以50或100就是很大的内存数。
Nginx+PHP(FastCGI)服务器在3万并发连接下开10个Nginx进程消耗150M内存(10*15M),开64个PHP-CGI进程消耗1280M内存(20M*64)
往/usr/local/nginx/html写一个php页面
<?php
phpinfo();
?>
写一个PHP连接MySQL的代码
<?php
$link = mysql_connect ('localhost','root','');
if (! $link ) {
die( 'Could not connect');}
echo 'Connected successfully' ;
mysql_close ( $link );
?>
使用已完成的脚本:# cd /root/lnmp_soft/php_scripts/
# cp mysql.php /usr/local/nginx/html/
nginx和PHP协同工作
修改配置文件/usr/local/nginx/conf/nginx.conf,实现nginx--->PHP动静分离
server{
listen 80
server_name www.XXXX.com
#//静态页面匹配处理,如果用户看到是静态页面,则直接找到该页面返回给用户,如果用户看到的是动态页面,则转发给9000端口,执行代码,把执行的结果返回给nginx,nginx给用户,localtion用来匹配用户的地址栏,支持正则。如果找不到,则继承根的属性,显示根/下页面。
location / { //静态页面
root html;
index index.php index.html index.htm;
allow all;}
location /test { //静态页面
root html;
index index.php index.html index.htm;
deny all;}
#//动态页面匹配处理,如果用户访问的是php页面,则在html目录下找到该页面,转发给9000端口(php)
location ~ \.php$ { //动态页面,没有此段,打开php页面会提示下载
root html;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
#fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi.conf; }
配置FastCGI
Nginx结合FastCGI技术即可支持PHP页面架构,通过修改Nginx及php-fpm配置文件实现对PHP页面的支持。
php-fpm需要修改的常见配置如下:
listen = 127.0.0.1:9000 //PHP端口号
pm.max_children = 32 //最大进程数量
pm.start_servers = 15 //最小进程数量
pm.min_spare_servers = 5 //最少需要几个空闲着的进程
pm.max_spare_servers = 32 //最多允许几个进程处于空闲状态
示例:构建LNMP平台
步骤一:创建并修改php-fpm配置文件
1)查看php-fpm配置文件
[root@Proxy etc]# vim /etc/php-fpm.d/www.conf
[www]
listen = 127.0.0.1:9000
listen.allowed_clients = 127.0.0.1
user = apache
group = apache
pm = dynamic
pm.max_children = 50 //f越大越好,但视工作环境及内存而定
pm.start_servers = 5
pm.min_spare_servers = 5
pm.max_spare_servers = 35
2)确认php-fpm服务已经启动
[root@Proxy ~]# systemctl restart php-fpm
[root@Proxy ~]# systemctl status php-fpm
步骤二:修改Nginx配置文件并启动服务
[root@Proxy ~]# vim /usr/local/nginx/conf/nginx.conf
location / {root html;
index index.php index.html index.htm; }
location ~ \.php$ {root html;
fastcgi_pass 127.0.0.1:9000; //php-fpm IP与端口
fastcgi_index index.php;
include fastcgi.conf; } //加载Fast-CGI参数文件
[root@Proxy ~]# /usr/local/nginx/sbin/nginx -s reload
步骤三:创建PHP页面,测试LNMP架构能否解析PHP页面
# pkill -9 nginx
# /usr/local/nginx/sbin/nginx
# /etc/rc.d/init.d/php-fpm restart
1)创建PHP测试页面1:
[root@Proxy ~]# vim /usr/local/nginx/html/test1.php
<?php
$i="This is a test Page";
echo $i;
?>
2)创建PHP测试页面,连接MariaDB数据库:
[root@Proxy ~]# vim /usr/local/nginx/html/test2.php
<?php
$links=mysql_connect("localhost","root","密码");
//注意:root为mysql账户名称,密码需要修改为实际mysql密码,无密码则留空即可
if($links){ echo "link db ok!!!"; }
else{ echo "link db no!!!"; }
?>
3)创建PHP测试页面,连接并查询MariaDB数据库:
[root@Proxy ~]# vim /usr/local/nginx/html/test3.php
<?php
$mysqli = new mysqli('localhost','root','','mysql'); //主机名,用户名,密码,数据库
if (mysqli_connect_errno()){ die('Unable to connect!'). mysqli_connect_error(); }
else{ echo “link db OK!!!”; }
$sql = "select * from user";
$result = $mysqli->query($sql);
while($row = $result->fetch_array()){
printf("Host:%s",$row[0]);
printf("</br>");
printf("Name:%s",$row[1]);
printf("</br>"); }
?>
4)客户端使用浏览器访问服务器PHP首页文档,检验是否成功:
[root@client ~]# firefox http://192.168.4.5/test1.php
[root@client ~]# firefox http://192.168.4.5/test2.php
[root@client ~]# firefox http://192.168.4.5/test3.php
常见问题:1.出现下载页面 【配置文件中没有php转发,没有动静分离】
2.File not found. 【转发设置不正确】[SELinux]
3.An error occurred.
Connection refused(php服务没有启动)【转发给9000后,无响应,php未启动】
4.空白页面。 语法错误(查看/var/log/php-fpm/www-error.log)
参考日志:/usr/local/nginx/logs/errlog
/var/log/php-fpm/www-error.log
用tailf查看日志,回车至空白,再刷新网页,即可查看最新的报错信息