一、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目录,把安装包下载到这个目录下(约定)
③解压
-[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库, yum install libaio-devel 也能处理)
⑨拷贝配置文件
编辑配置文件:
⑩拷贝启动脚本
编辑启动脚本:
十一、修改启动脚本权限为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