第十二章 LNMP架构(上)

一、LNMP架构介绍
二、MySQL安装
三、PHP安装
四、Nginx介绍
五、Nginx安装
六、扩展

一、LNMP架构介绍

与LAMP相比,区别:

1.LNMP用nginx替代apache来提供web服务。

2.php也不再是作为模块形式存在,而是作为一个叫php-fpm的独立进程来提供服务。

Nginx直接处理静态请求,动态请求会转发给php-fpm处理。

架构图:

二、MySQL安装(新装一台机器做实验)

Mysql的安装方式有多种,yum安装,二进制免编译安装,源码包编译安装等。

yum安装缺乏定制性,如果不是性能要求特别高的场合,也可以使用。安装比较方便。

二进制包免编译和源码包编译安装类似,只是免去了编译过程,节省了时间 ,而且定制性和性能也基本没有损失。如果没有特殊需求,推荐二进制免编译安装。

①查看自己的操作系统是多少位的(下载匹配的安装包)
查看操作系统版本

②进入/usr/local/src目录,把安装包下载到这个目录下(约定
下载MySQL5.6安装包

③解压
-[root@Linux01 src]# tar zxvf mysql-5.6.39-linux-glibc2.12-x86_64.tar.gz
解压

④挪动位置并且改名
[root@Linux01 src]# mv mysql-5.6.39-linux-glibc2.12-x86_64 /usr/local/mysql
在这里插入图片描述

⑤进入到usr/local/mysql目录下,要确认目录下是否有bin data等目录
在这里插入图片描述

⑥创建一个MySQL用户,创建一个data目录,以后数据库文件会放到这个里面

⑦mysql初始化,指定用户为MySQL,再指定目录(存放数据库文件的目录/data/mysql,指定目录,目录不存在的话,上一级目录存在时自动创建)即进入安装路径usr/local/mysql,执行初始化配置脚本,创建系统自带的数据库和表

缺少libaio库文件
注意:第一次初始化时,可能会出现问题(不固定),确认清楚原因后,针对具体原因处理,不要照搬(这里libaio库, yum install libaio-devel 也能处理)

⑧再次初始化,检验是否OK
在这里插入图片描述

å¨è¿éæå¥å¾çæè¿°

⑨拷贝配置文件

编辑配置文件:

⑩拷贝启动脚本

编辑启动脚本:

十一、修改启动脚本权限为755;设为开机启动;

十二、启动服务

三、PHP安装

在LAMP架构中,php是做为apache的一个模块存在的,而在LNMP架构中,php是作为一个单独的服务存在,所以安装方式及参数有些许差别,需要开启php-fpm服务。

关于php的版本,目前大多企业都会使用5.4以及更高的版本,甚至越来越多的企业使用PHP7版本。
7和5两个版本还是又很大差异的,7的话有很大的性能提升。
主流版本5.6和7.1。

①下载包

②解压包

③进入包目录、新建用户、设定功能

过程中会出现很多需要安装的包,我们一起安装上:

[root@Linux01 php-5.6.32]# yum -y install libxml2-devel libpng-devel openssl openssl-devel bzip2 bzip2-devel libjpeg-devel freetype-devel libmcrypt.x86_64  libmcrypt-devel.x86_64  curl curl-devel

配置:

[root@Linux01 php-5.6.32]#  ./configure --prefix=/usr/local/php-fpm --with-config-file-path=/usr/local/php-fpm/etc --enable-fpm --with-fpm-user=php-fpm --with-fpm-group=php-fpm --with-mysql=/usr/local/mysql --with-mysqli=/usr/local/mysql/bin/mysql_config --with-pdo-mysql=/usr/local/mysql --with-mysql-sock=/tmp/mysql.sock --with-libxml-dir --with-gd --with-jpeg-dir --with-png-dir --with-freetype-dir --with-iconv-dir --with-zlib-dir --with-mcrypt --enable-soap --enable-gd-native-ttf --enable-ftp --enable-mbstring --enable-exif --with-pear --with-curl  --with-openssl

验证:

④make
make install //编译安装

安装中出现的问题:

a.make&make install 时,libtool: link: `ext/date/php_date.lo' is not a valid libtool object 的错误。

解决:make clean 一下然后再make,即可。原因未知,可能是某些脚本执行顺序的问题

b.但是,make clean后并没有解决,再次make,出现make: 没有指明目标并且找不到makefile。 停止

解决:重新configure,再make

验证:

⑤查看目录下有哪些:

这样也可以,效果一样

⑥配置php-fpm(这里有个疑问:为什么cp了php.ini,还要新建php-fpm.conf? 答:php.ini是php的配置文件;php-fpm.conf是php-fpm服务的配置文件,管理服务的配置文件    php.ini与php-fpm.conf配置文件的区别

拷贝配置文件:

[root@Linux01 php-5.6.32]# cp php.ini-production /usr/local/php-fpm/etc/php.ini

在/usr/local/php-fpm/etc/下把 php-fpm.conf.default改为php-fpm.cnf或者创建php-fpm.conf 文件(这里我们新建一个)

进入/usr/local/php-fpm/etc/目录

[root@Linux01 php-5.6.32]# cd /usr/local/php-fpm/etc/
[root@Linux01 etc]# vim php-fpm.conf
//文件内容如下:(参考https://coding.net/u/aminglinux/p/aminglinux-book/git/blob/master/D15Z/php-fpm.conf)

[global]
pid = /usr/local/php-fpm/var/run/php-fpm.pid                      //进程id所在的位置
error_log = /usr/local/php-fpm/var/log/php-fpm.log            //错误日志的保存位置
[www]                                                                                //模块名
listen = /tmp/php-fcgi.sock                                               //监听方式
// listen = 127.0.0.1:9000                                                //也可写成这样,php和nginx结合时语法.

监听端口:①可以监听sock,可以指定mode权限;②也可以监听ip,指定端口③还可以监听所有端口:0.0.0.0:9000​​
listen.mode = 666
user = php-fpm
group = php-fpm
pm = dynamic
pm.max_children = 50
pm.start_servers = 20
pm.min_spare_servers = 5
pm.max_spare_servers = 35
pm.max_requests = 500
rlimit_files = 1024

⑦进入源码包目录,将启动脚本复制到/etc/init.d目录下

[root@Linux01 php-5.6.32]# cd /usr/local/src/php-5.6.32
[root@Linux01 php-5.6.32]# cp sapi/fpm/init.d.php-fpm  /etc/init.d/php-fpm

⑧修改启动脚本权限为755;设为开机启动;

⑨启动php-fpm(/usr/local/php-fpm/sbin/php-fpm -t是测试配置文件是否正常,下图写错了

四、Nginx介绍

Nginx("engine x")是一个高性能的HTTP和反向代理服务器,也是一个IMAP/POP3/SMTP代理服务器。Nginx是由Igor Sysoev为俄罗斯访问量第二的Rambler.ru站点开发的,第一个公开版本0.1.0发布于2004年10月4日。其将源代码以类BSD许可证的形式发布,因它的稳定性、丰富的功能集、示例配置文件和低系统资源的消耗而闻名。 它已经在众多流量很大的俄罗斯网站上使用了很长时间,这些网站包括Yandex、Mail.Ru、VKontakte,以及Rambler。目前中国互联网企业70%以上公司都在使用nginx作为自己的web服务器。包括目前互联网主流公司百度、腾讯、阿里等。Nginx 特点是占有内存少,并发能力强,事实上nginx的并发能力确实在同类型的网页服务器中表现较好。

Nginx由内核和模块组成,其中内核的设计非常微小和简洁,完成的工作也非常简单,仅仅通过查找配置文件将客户端请求映射到一个location block(location是Nginx配置中的一个指令,用于URL匹配),而在这个location 中所配置的每个指令将会启动不同的模块去完成相应的工作。Nginx相对于Apache优点:

1) 高并发响应性能非常好,官方测试Nginx处理静态文件并发5w/s
2) 反向代理性能非常强。(可用于负载均衡)
3) 内存和 cpu 占用率低。(为 Apache 的 1/5-1/10)
4) 对后端服务有健康检查功能。
5) 支持 PHP cgi 方式和 fastcgi 方式。
6) 配置代码简洁且容易上手。

Nginx 工作原理:

Nginx由内核和模块组成,其中,内核的设计非常微小和简洁,完成的工作也非常简单,仅仅通过查找配置文件将客户端请求映射到 一个location block(location是Nginx 配置中的一个指令,用于URL匹配),而在这个location中配置的每个指令将会启动不同的模块去完成相应的工作。Nginx的模块从结构上分为核心模块、基础模块和第三方模块:

核心模块:HTTP模块、EVENT 模块和 MAIL 模块

基础模块:HTTP Access 模块、HTTP FastCGI 模块、HTTP Proxy模块和 HTTP Rewrite 模块,

第三方模块:HTTP Upstream Request Hash 模块、Notice 模块和HTTP Access Key 模块。

Nginx 的高并发得益于其采用了epoll模型,与传统的服务器程序架构不同,epoll 是 linux 内核 2.6 以后才出现的。Nginx 采用epoll模型,异步非阻塞,而apache 采用的是 select模型:Select特点:select选择句柄的时候,是遍历所有句柄,也就是说句柄有事件响应时,select 需要遍历所有句柄才能获取到哪些句柄有事件通知,因此效率是非常低。epoll 的特点:epoll 对于句柄事件的选择不是遍历的,是事件响应的,就是句柄上事件来就马上选择出来,不需要遍历整个句柄链表,因此效率非常高。

nginx官网:http://nginx.org/,最新版本1.15,最新稳定版:1.14。(2018年7月)

Nginx著名分支:Tengine, 是淘宝基于Nginx开发的,使用上和Nginx一致,服务名,配置文件名都一样,和Nginx的最大区别在于Tenging增加了一些定制化模块,在安全限速方面表现突出,另外它支持对js,css合并。

另外,Nginx核心+lua相关的组件和模块组成了一个支持lua的高性能web容器openresty,使用Lua编写脚本,然后部署到Nginx Web容器中运行。从而非常轻松就能开发出高性能的Web服务。参考资料:https://jinnianshilongnian.iteye.com/blog/2280928http:/.

五、Nginx安装

安装当前最新稳定版1.14.0

①进入/usr/local/src目录,把安装包下载到这个目录下(约定)

②解压包

[root@Linux01 src]# tar zxvf nginx-1.14.0.tar.gz 

③新建nginx服务用户

④安装可能需要的依赖包

[root@Linux01 src]# yum -y install pcre.x86_64 pcre-devel.x86_64 openssl openssl-devel

⑤进入包目录、配置、编译、安装

[root@Linux01 nginx-1.14.0]# ./configure --user=nginx --group=nginx --prefix=/usr/local/nginx --with-http_stub_status_module --with-http_ssl_module

make && make install                        //编译和安装

验证:

⑥配置nginx

拷贝配置文件:

[root@Linux01 nginx-1.14.0]# cd /usr/local/nginx/conf
[root@Linux01 conf]# mv nginx.conf nginx.conf.1
[root@Linux01 conf]# vim nginx.conf

编辑配置文件:添加内容(参考https://coding.net/u/aminglinux/p/aminglinux-book/git/blob/master/D15Z/nginx.conf)

测试配置:

[root@Linux01 conf]# /usr/local/nginx/sbin/nginx -t

⑦添加启动脚本,添加内容(参考https://coding.net/u/aminglinux/p/aminglinux-book/git/blob/master/D15Z/etc_init.d_nginx ):

[root@Linux01 nginx-1.14.0]# vim /etc/init.d/nginxng

修改启动脚本权限为755;设为开机启动;

启动nginx:

⑧验证测试nginx:

⑨测试验证nginx能否解析php

在默认页面下新建一个页面,并编辑

验证:

六、扩展

Nginx为什么比Apache Httpd高效:原理篇 http://www.toxingwang.com/linux-unix/linux-basic/1712.html
https://coding.net/u/aminglinux/p/nginx/git/blob/master/4z/IO.md?public=true
https://www.zhihu.com/question/64727674
apache和nginx工作原理比较 http://www.server110.com/nginx/201402/6543.html
概念了解:CGI,FastCGI,PHP-CGI与PHP-FPM https://www.awaimai.com/371.html

nian.it去eye.com/blog/2280928http://ji

猜你喜欢

转载自blog.csdn.net/dwy2018/article/details/84901221