LNMP原理
给用户看源代码的坏处:
用户看不懂
有些是用C语言写的,自己写代码的算法也被人看到了,有些代码比较核心,机密
php是解释器
mysql是用来后期存储用户的数据
做一个动态网站,需要的有LNMP。
nginx:80
mysql:3306
php-fpm:9000
所有的软件安装完成,并且成功启动服务。相当于搭建动态网站的素材,所有的服务都准备好了。
做一盘菜,你的配料都准备好了,接下来要做的就是把它们融合在一起,搭配去使用。
而之前安装,每个软件都是独立安装,独立启动。它们之间并没有任何的联系。彼此也不知道对方。
接下来就是要把它们整合在一起。整合在一起需要用的就是一张图。
Internet<--->Nginx<--->socket<--->FastCGI wrapper<--->Application 1
<--->FastCGI wrapper<--->Application 2
<--->FastCGI wrapper<--->Application 3
<--->FastCGI wrapper<--->Application 4
做动态网站,nginx负责接受请求,php负责执行代码
写脚本,写代码连接数据库,增删改查
写脚本的好处,一个人访问,脚本就自动执行一次,同一个脚本可以执行很多次。谁去连接数据库,脚本。
对用户开放的,用户能看到的只有nginx的80端口。哪怕服务端真的启了php程序了,用户也不知道,也无法访问,他们只知道访问80端口。不管访问的是静态页面a.html,还是动态页面a.php,他们都是访问nginx的80端口。
但是只有它,它并不是一个解释器,它无法解释代码,所以电脑里就另外起了一个php-fpm的9000端口。它是一个多进程的,它起来以后,它不是只启一个,它可以起二个三个四个很多个。跟我们看的谷歌浏览器,你只打开一个浏览器,但在任务管理器里面可以看到有很多进程。你可以起10个进程,也可以起100个进程。你起服务其实只打了一下,但是服务起来了,它会带动很多进程起来。这个进程之后,你要让nginx有一个判断功能,也就是if功能。如果访问的是静态网站,它就不需要其他任何程序了,自己就直接进行处理了。
但是如果是访问动态网站,它自己处理不了。那么就转发给9000,它也不管9000是谁。实际上9000就是php。
一旦有一个人过来了,他说他要看a.html或者a.doc这样的静态页面,或者a.php动态页面,所有这些请求都交给nginx处理,nginx自己就判断了。如果它判断是个静态页面,那么客户端要什么,它就给什么。一旦它判断是个动态页面,那么nginx在给客户端结果之前,先把页面转发给解释器php9000端口,而解释器已经启动了很多个进程,它就随机选择一个不太忙的进程,然后把代码执行一遍,而这些代码可以理解为一个个的小程序。虽然代码可能补太长,一个一个小脚本。所有的线程都是双向的,代码执行完以后可以源路返回,把结果传会给nginx。然后nginx再把代码执行的结果发给客户端,用户的浏览器上就显示出了最终的结果。
php-fpm的端口号,起多少个进程。这些都由php-fpm的配置文件里写的内容来决定的。
vim /etc/php-fpm.d/www.conf 这个文件比较特殊,分号;代表注释
grep -v "^$" /etc/php-fpm.d/www.conf | grep -v "^;" 可以去掉空白行和注释的行,只看有效的行
[www]
listen = 127.0.0.1:9000
这里写的是9000端口。如果你想用8000端口,只要修改配置文件后,重启服务就可以了。没事不用改它。
listen.allowed_client = 127.0.0.1
这个9000端口只允许自己访问,不让客户端访问。
比如你访问百度,百度可能也有php解释器,它可能真的启动了9000了。但是不让你访问。
如果你访问www.baidu.com:9000,它会显示无法访问此网站。如果访问不了9000,那要这9000有什么用呢?
因为用户压根儿用不到9000端口,真正用到9000端口的是nginx,是用户访问nginx,然后nginx连接9000,
而nginx和php都是一台电脑,所以它自己访问自己127.0.0.1就可以了。
pm.start_servers = 5
默认上来先启5个进程,跟访问谷歌浏览器一样,标签打开得越多,起得进程就越多。但是php不是浏览器,它什么时候多,什么时候少。当用户访问得多,需要你执行的代码多,你就多起几个进程。起一个就可以解释一个代码,再起一个,就可以并发再执行一个。用脚本的角度来考虑,你同时开了好几个端口,窗口越多,你就可以同时多跑几个脚本。但是同时跑的越多,你的内存消耗就越大。
pm.max_children = 50
最多启50个进程,工作中要启动更多。可以改个两三百,四五百,但是这个跟内存有关,启动多,内存小的话,反而会慢。现在我们虚拟机1个G,起50个就可以了,起再多内存也达不到。
pm = dynamic
进程的数量不是5和50这两个固定死的值。而是在5-50范围之间的动态的值。人访问的多,就多起几个,但不超过50个进程,人少就少启动几个,但至少起5个进程。
浙公网安备 33010602011771号