实用LNMP架构详细实现和PHP性能优化

本文涉及的产品
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
简介:

 小编在前面说过要实现LNMP(Linux+Nginx+Mysql+Php)了吧,在这篇博文中小编就来将将如何来实现LNMP,因为Nginx的强大,现在越来越多的企业热衷于LNMP的架构,所以小编就来简单的实现一下此种架构,并且做一些简单的PHP优化,软件的安装顺序就按照英文首字母就是了

准备工作,软件需求:

小编的Linux是企业版5.4

mysql-advanced-5.6.10-linux-glibc2.5-i686.tar.gz //这个是个绿色版的,能省去源码安装不少的时间

nginx-1.3.16.tar.gz

php-5.4.14.tar.bz2

xcache-3.0.1.tar.bz2

Project 1:Nginx的安装

Step 1:安装pcre-devel,以及建立nginx用户

# yum install pcre-devel

# groupadd -r nginx

# useradd -r -g nginx -M nginx

Step 2:解压缩nginx的源码并安装

# tar -zxvf nginx-1.3.16.tar.gz -C /usr/local/src/

# cd /usr/local/src/nginx-1.3.16/

# ./configure \

--conf-path=/etc/nginx/nginx.conf \

--error-log-path=/var/log/nginx/error.log \

--http-log-path=/var/log/nginx/access.log \

--pid-path=/var/run/nginx/nginx.pid \

--lock-path=/var/lock/nginx.lock \

--user=nginx \

--group=nginx \

--with-http_ssl_module \

--with-http_flv_module \

--with-http_stub_status_module \

--with-http_gzip_static_module \

--http-client-body-temp-path=/var/tmp/nginx/client/ \

--http-proxy-temp-path=/var/tmp/nginx/proxy/ \

--http-fastcgi-temp-path=/var/tmp/nginx/fcgi/ \

--with-pcre

# make && make install

# mkdir -p /var/tmp/nginx/client

Step 3:编写ngnix服务的控制脚本

每次启动ngnix都很麻烦,小编自己写个脚本就是啦,附上啦

# vim nginxd

#!/bin/bash

# chkconfig: 35 80 30

# description: Apache server

NGINXD='/usr/local/nginx/sbin/nginx'

LOCKFILE='/var/lock/nginx.lock'

. /etc/init.d/functions

function start(){

[ -e $LOCKFILE ] && echo "nginxd is running ......." && exit

echo -n "nginxd is starting ......"

sleep 1

`$NGINXD`

[ $? -eq 0 ]&& touch $LOCKFILE && echo -e "\033[31m [ok] \033[0m" ||echo -e "\033[31m [fail] \033[0m"

}

function stop(){

echo -n "nginxd is stoping......"

sleep 1

killproc $NGINXD &>/dev/null

[ $? -eq 0 ] && rm -rf $LOCKFILE && echo -e "\033[31m [ok] \033[0m" ||echo -e "\033[31m [fail] \033[0m"

}

function status(){

[ -e $LOCKFILE ]&& echo "nginxd is running ......" || echo "nginxd is stoped"

}

case $1 in

start)

start

;;

stop)

stop

;;

restart)

stop

start

;;

status)

status

;;

*)

echo "nginxd Usage: {start|stop|restart}"

;;

esac

Step 4:将nginxd加入到服务控制文件夹,并启动,客户机测试

# chmod a+x nginxd

# cp -a nginxd /etc/init.d/

# chkconfig --add nginxd

# chkconfig --level 35 nginxd on

# service nginxd start

# netstat -tupln |grep 80

对于脚本的综合测试如下图所示

clip_image002

clip_image004

Project 2:Mysql的安装

     因为之前的Mysql源码编译安装消耗时间太长了,小编实在受不了啊,后来小编在Mysql官网下载了一个免编译的200多兆啊(类似于windows下的绿色安装包啦),但是时间确实省了不少啦

Step 1:解压缩Mysql软件包

# tar -zxvf mysql-advanced-5.6.10-linux-glibc2.5-i686.tar.gz -C /usr/local/

Step2 :安装Mysql啦

# groupadd mysql

# useradd -r -g mysql mysql

# cd /usr/local

# tar zxvf /path/to/mysql-VERSION-OS.tar.gz

# ln -s mysql-advanced-5.6.10-linux-glibc2.5-i686/ mysql

# cd mysql

# chown -R mysql .

# chgrp -R mysql .

# scripts/mysql_install_db --user=mysql

# chown -R root .

# chown -R mysql data

# cp support-files/my-default.cnf /etc/my.cnf

# bin/mysqld_safe --user=mysql &

clip_image006

# cp support-files/mysql.server /etc/init.d/mysqld

Step 3:启动mysqld服务试试

# service mysqld start

clip_image008

Step 4:后续处理

  • 在链接库里加入Mysql的链接库

# vim /etc/ld.so.conf.d/mysql.conf

/usr/local/mysql/lib/

保存退出

# ldconfig –v //重新加载

查询一下结果

 clip_image010

  • 将Mysql头文件加入系统

# ln -s /usr/local/mysql/include/ /usr/include/mysql

  • 加入mysql的环境变量进系统

# vim /etc/bashrc //在文件最后加入下面的内容

export PATH=/usr/local/mysql/bin:$PATH

# . /etc/bashrc

查看环境变量

# echo $PATH

clip_image012

  • 使用mysql

# mysql

clip_image014

mysql> grant all on mysql.* to 'root'@'localhost' identified by '123456';

mysql> flush privileges;

好啦,mysql的安装就算完成了

Project 3:php的安装

     这里小编要提醒的是,为了能让php和nginx结合起来,就要让php在编译过程中支持fastcgi,那fastcgi是个啥呢,小编也许解释不是很清楚,这里就将度娘的解释拉过来啦

FastCGI像是一个常驻(long-live)型的CGI,它可以一直执行着,只要激活后,不会每次都要花费时间去fork一次(这是CGI最为人诟病的fork-and-execute 模式)。它还支持分布式的运算, 即 FastCGI 程序可以在网站服务器以外的主机上执行并且接受来自其它网站服务器来的请求。

FastCGI是语言无关的、可伸缩架构的CGI开放扩展,其主要行为是将CGI解释器进程保持在内存中并因此获得较高的性能。众所周知,CGI解释器的反复加载是CGI性能低下的主要原因,如果CGI解释器保持在内存中并接受FastCGI进程管理器调度,则可以提供良好的性能、伸缩性、Fail- Over特性等等。

原理

1、Web Server启动时载入FastCGI进程管理器(IIS ISAPI或Apache Module)

2、FastCGI进程管理器自身初始化,启动多个CGI解释器进程(可见多个php-cgi)并等待来自Web Server的连接。

3、当客户端请求到达Web Server时,FastCGI进程管理器选择并连接到一个CGI解释器。Web server将CGI环境变量和标准输入发送到FastCGI子进程php-cgi。

4、FastCGI子进程完成处理后将标准输出和错误信息从同一连接返回Web Server。当FastCGI子进程关闭连接时,请求便告处理完成。FastCGI子进程接着等待并处理来自FastCGI进程管理器(运行在Web Server中)的下一个连接。 在CGI模式中,php-cgi在此便退出了。

在上述情况中,你可以想象CGI通常有多慢。每一个Web请求PHP都必须重新解析php.ini、重新载入全部扩展并重初始化全部数据结构。使用FastCGI,所有这些都只在进程启动时发生一次。一个额外的好处是,持续数据库连接(Persistent database connection)可以工作。

Step 1:解压源码包,并切换到源码目录

# tar -jxvf php-5.4.14.tar.bz2 -C /usr/local/src/

# cd /usr/local/src/php-5.4.14/

Step 2:编译并安装

./configure \

--prefix=/usr/local/php \

--enable-fpm \

--enable-sockets \

--with-mysql=/usr/local/mysql \

--with-mysqli=/usr/local/mysql/bin/mysql_config \

--enable-mbstring \

--enable-xml \

--with-png-dir \

--with-jpeg-dir \

--with-zlib \

--with-config-file-path=/etc/php \

--with-config-file-scan-dir=/etc/php5.d \

--with-freetype-dir \

# make && make install

Step 3:创建php.ini文件

# mkdir /etc/php

# mkdir /etc/php5.d

# cp php.ini-production /etc/php/php.ini

Step 4:创建php-fpm的控制脚本

# cp sapi/fpm/init.d.php-fpm /etc/init.d/php-fpm

改变权限

# chmod a+x /etc/init.d/php-fpm

创建配置文件

# cd /usr/local/php/etc/

# cp php-fpm.conf.default php-fpm.conf

Step 5:启动php-fpm

clip_image016

好了,php的安装就算完成了

Project 4:nginx与php的结合

Step 1:编辑nginx的配置文件

clip_image018

Step 2:编辑测试页面

# vim /usr/local/nginx/html/index.php

<?php

phpinfo();

?>

Step 3:重新启动nginx和php-fpm服务

# service nginxd restart

# service php-fpm restart

Step 4:客户机测试啦,浏览器输入http://192.168.111.10

clip_image020

Step 5:测试php和mysql的链接

小编这里编写了一个很小的测试页面来测试啦

# vim /usr/local/nginx/html/index.php

<?php

$err=mysql_connect("localhost","root","123456")

or die("Could not connect:".mysql_error());

print("Connected successfully");

mysql_close($err);

?>

再一次在客户机浏览器输入http://192.168.111.10试试

clip_image022

如果将mysqld服务停止再试试看

# service mysqld stop

clip_image024

做到这里,基本的LNMP架构已经算是完成了,接下来小编要使用xcache对php的速度进行优化啦

Project 5:php加速

Step 1:安装xcache

# tar -jxvf xcache-3.0.1.tar.bz2 -C /usr/local/src/

# cd /usr/local/src/xcache-3.0.1/

到这里读者会发现居然没有configure文件啦,别急这个文件是 手工生成的

# /usr/local/php/bin/phpize –clean

# /usr/local/php/bin/phpize

clip_image026

# ./configure --enable-xcache --with-php-config=/usr/local/php/bin/php-config

# make

# make test

# make install

clip_image028

将模块加入php的配置文件

# cp xcache.ini /etc/php5.d

# vim /etc/php5.d/xcache.ini

extension=/usr/local/php/lib/php/extensions/no-debug-non-zts-20100525/xcache.so

重新启动nginxd和php-fpm服务

# service nginxd restart

# service php-fpm restart

在客户端浏览器输入http://192.168.111.10试试

clip_image030

Step 2:实现web管理xcache

#cp -r htdocs/ /usr/local/nginx/html/admin

# chmod a+rx /usr/local/nginx/html/admin/

# chmod a+rx /usr/local/nginx/html/admin/index.php

# cd /usr/local/nginx/html/admin

# cp config.example.php config.php

在这个目录下,读者可以看到index.php的页面,这就是管理xcache的web接口啦,当然要直接访问的话是需要用户名和密码的,所以小编这里就来修改xcache.ini的配置文件,加入用户名和密码(用md5加密的)

clip_image032

Step 3:客户机浏览器访问http://192.168.111.10/admin试试

clip_image034

clip_image036

看到了吧,很漂亮啦,读者可机监督xcache的使用状态好啦。

所有的项目都实现啦,希望对读者你有帮助啊


本文转自 chenming421  51CTO博客,原文链接:http://blog.51cto.com/wnqcmq/1185984


相关实践学习
如何快速连接云数据库RDS MySQL
本场景介绍如何通过阿里云数据管理服务DMS快速连接云数据库RDS MySQL,然后进行数据表的CRUD操作。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
3月前
|
消息中间件 缓存 前端开发
PHP性能优化:从新手到高手的实战指南###
【10月更文挑战第21天】 本文将深入探讨PHP性能优化的策略与技巧,涵盖从基础代码优化到高级缓存机制的应用。通过具体案例分析,展示如何有效提升Web应用的响应速度和处理能力,帮助开发者在面对高并发场景时更加从容应对。无论你是初学者还是有经验的开发者,都能从中获得实用的建议和启发。 ###
66 8
|
2月前
|
监控 安全 API
使用PaliGemma2构建多模态目标检测系统:从架构设计到性能优化的技术实践指南
本文详细介绍了PaliGemma2模型的微调流程及其在目标检测任务中的应用。PaliGemma2通过整合SigLIP-So400m视觉编码器与Gemma 2系列语言模型,实现了多模态数据的高效处理。文章涵盖了开发环境构建、数据集预处理、模型初始化与配置、数据加载系统实现、模型微调、推理与评估系统以及性能分析与优化策略等内容。特别强调了计算资源优化、训练过程监控和自动化优化流程的重要性,为机器学习工程师和研究人员提供了系统化的技术方案。
186 77
使用PaliGemma2构建多模态目标检测系统:从架构设计到性能优化的技术实践指南
|
4月前
|
存储 前端开发 JavaScript
深入理解React Fiber架构及其性能优化
【10月更文挑战第5天】深入理解React Fiber架构及其性能优化
157 1
|
5月前
|
缓存 监控 网络协议
在配置 PHP-FPM 的 pool 时,常见的性能优化技巧
在配置 PHP-FPM 的 pool 时,常见的性能优化技巧
|
2月前
|
数据采集 机器学习/深度学习 前端开发
PHP爬虫性能优化:从多线程到连接池的实现
本文介绍了一种通过多线程技术和连接池优化PHP爬虫性能的方法,以新浪投诉平台为例,详细展示了如何提高数据采集效率和稳定性,解决了传统单线程爬虫效率低下的问题。
PHP爬虫性能优化:从多线程到连接池的实现
|
2月前
|
网络协议 Linux Android开发
深入探索Android系统架构与性能优化
本文旨在为读者提供一个全面的视角,以理解Android系统的架构及其关键组件。我们将探讨Android的发展历程、核心特性以及如何通过有效的策略来提升应用的性能和用户体验。本文不包含常规的技术细节,而是聚焦于系统架构层面的深入分析,以及针对开发者的实际优化建议。
107 21
|
2月前
|
消息中间件 缓存 PHP
PHP性能优化:从基础到进阶的实战指南####
本文旨在为开发者提供一份全面的PHP性能优化指南,涵盖从代码层面的基础优化到服务器配置的高级策略。通过具体实例分析,揭示如何有效减少页面加载时间、降低资源消耗,并提升用户体验。无论你是PHP新手还是资深开发者,都能在本文中找到实用的技巧和建议,助你打造更高效、更稳定的Web应用。 ####
|
3月前
|
设计模式 缓存 架构师
架构师必备10大接口性能优化秘技
【11月更文挑战第25天】在软件开发中,接口性能优化是架构师必须掌握的关键技能之一。一个高效的接口不仅能够提升用户体验,还能减少服务器资源消耗,提高系统稳定性。本文将介绍10大接口性能优化秘技,并通过Java示例代码展示这些技巧在实际业务场景中的应用。
60 3
|
3月前
|
SQL 缓存 PHP
PHP性能优化的五大策略####
本文将深入探讨PHP性能优化的关键领域,包括代码层面的优化、数据库交互效率提升、缓存机制的应用、服务器配置调整以及使用高性能框架。通过具体案例与实用技巧,帮助开发者显著提升Web应用的响应速度和处理能力。 ####
|
3月前
|
消息中间件 缓存 Cloud Native
云原生架构下的性能优化实践与挑战####
随着企业数字化转型的加速,云原生架构以其高度解耦、弹性伸缩和快速迭代的特性,成为现代软件开发的首选模式。本文深入探讨了云原生环境下性能优化的关键策略与面临的主要挑战,通过案例分析,揭示了如何有效利用容器化、微服务、动态调度等技术手段提升应用性能,同时指出了在复杂云环境中确保系统稳定性和高效性的难题,为开发者和架构师提供了实战指南。 ####
52 3