LNMP分离式部署

Posted wsnbba

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了LNMP分离式部署相关的知识,希望对你有一定的参考价值。

LNMP分离式部署:Linux,Ninx,mysqlphp

开启三台虚拟机,分别安装搭建nginx,php和mysql

首先搭建nginx

技术分享图片

 

技术分享图片

技术分享图片

技术分享图片

技术分享图片

技术分享图片

技术分享图片

技术分享图片

 修改目录的属主属组

技术分享图片

 

 开始搭建PHP

安装相关的lib软件包

 技术分享图片

 

 技术分享图片

安装libiconv库 安装libmcrypt库 安装mhash加密扩展库 安装mcrvpt加密扩展库技术分享图片

技术分享图片

开始安装PHP(FastCGI方式)服务

 解压配置PHP(别忘了建程序用户www)

 技术分享图片

技术分享图片

技术分享图片

#特别强调:上述每行结尾的换行符反斜线()之后不能再有任何字符包括空格

如果执行编译后报错显示你没有安装openssl那个包,那么直接yum安装所有和openssl相关的包即可。

执行上述命令后,最后的正确输出提示为下图

技术分享图片

对于上面命令,部分参数说明如下:

技术分享图片

 

 

 正确执行前文配置PHP软件的./configure系列命令后,就可以编译安装PHP软件了

技术分享图片

最后的正确提示

技术分享图片

 

 配置PHP引擎配置文件php.ini

设置软链接以方便访问

技术分享图片

查看PHP配置默认模版文件

 技术分享图片

开发环境更多的是开启日志,调试信息,而生产环境都是关闭状态

拷贝PHP配置文件到PHP默认目录,并更改文件名称为php.ini

技术分享图片

 

 配置PHP(FastCGI方式)的配置文件php-fpm.conf

技术分享图片

修改配置文件的监听端口,151行改成监听本地IP的,可以进行远程访问

技术分享图片

关于php-fpm.conf,暂时可用默认的配置,先把服务搭好,以后再进行优化。

 

启动PHP服务(FastCGI方式)

启动PHP服务php-fpm

 技术分享图片

技术分享图片

配置Nginx支持PHP程序请求访问

修改Nginx配置文件

技术分享图片

将nginx的ip加入windows的映射文件中

技术分享图片

测试静态网页

技术分享图片

 

 

 添加一个动态网页

技术分享图片

在浏览器上刷新显示的仍旧是html,因为它跳转的就是index.html静态网页

技术分享图片

如果在域名后面加上动态网页的后缀,我们发现返回码404,因为nginx配置文件里的目录是共享的,所以它去php服务器里去找www目录了,但是php服务器没有创建这个目录,所以找不到网页。

技术分享图片

 

 在php服务器上创建www目录并添加一个动态首页,再在浏览器上刷新发现有内容了,显示的内容是php服务器上的

技术分享图片

技术分享图片

 

在nginx服务器上把静态网页删了,只保留一个动态网页,打开配置文件,将静态网页都删了,加入动态网页,重启配置文件,再访问,没问题。

技术分享图片

技术分享图片

测试:

既然看到的网页是php服务器上的,那么nginx上的动态网页是不是就可以把它删了呢?将nginx上的动态网页删掉,再在浏览器上访问发现返回码403,禁止访问。权限拒绝了。

技术分享图片

技术分享图片

 

测试发现,不能在nginx上将他删掉。但是找不到首页应该返回码404,为什么是403呢?

这就是nginx的安全机制,跳转首页的时候,如果发现跳转的首页找不着,它就会权限拒绝,不会再去php那里拿网页。它之前在nginx那里静态的部分先确定有没有那个首页,因为它是自动跳转,如果没有首页,它为了防止把目录内容都被别人看到,它的内部安全机制就会都给禁止了。所以就变成403,而非404。即使php里有,它也并不会再去拿,权限就给拒绝了。因为它发现本地没有。

我们在域名后面加上后缀动态网页名去访问,访问成功。不需它挑战,直接自己找,没问题。

技术分享图片

 

 在静态的部分也要添加动态网页名的原因就是防止它找不到首页时被权限拒绝。

如果想要让它跳转,静态的部分必须要有要找的那个“名字”,哪怕是空的都可以。

技术分享图片

 

 技术分享图片

 

 只要有这个“名字”,它的内部机制就不会阻碍你,它跳转的时候会去确定有没有这个文件,发现没有就不会再去推给php。后面加上了具体的文件名其实是去找php看文件的,所以nginx静态部分挂存储,php动态部分也要挂存储,两边要一致。

存储nfs不是挂在网页目录上的,而是挂在网页目录的子目录下的。

技术分享图片

技术分享图片

是挂在static upload这两个子目录下的。页面是不放在存储上的,网页文件是放在网页目录下的。所以每台web节点的网页目录下的内容都是一样的,然而还不是放在存储上的。

网页文件那么多,如何保持服务器一致呢?

每台服务器上都挂网页文件,放的还都是一样的,因为网页文件就是代码,代码不更新他就不会变,这就是具体的网页内容。开发修改了才需要变。变的时候用ansible批量分发。

一旦开发申请所有的页面需要升级修改,会把那个新的网页文件给运维,运维将这些文件都批量分发覆盖就上线了。所有的web服务器都是一样的,他不是挂nfs的,每个都有网页文件,用户不可能去修改网页内容,也修改不了。

一旦要上线,开发交申请,然后交给运维去更新,更新自然是ansible批量分发。真正挂存储的就是子目录图片视频才挂存储,所以动态服务器如果不考虑上传的问题,上传图片就进入nfs了,一旦把上传的东西给分离出去,剩下的就只有读功能了,读功能本地访问网页目录,但本地的网页目录文件是有的,每台都有,不需要挂存储。

测试:将php服务器关了,克隆一个它叫php2,再开启。然后再启动php服务

技术分享图片

技术分享图片

技术分享图片

技术分享图片

回到nginx进行反向代理,修改nginx的配置文件

技术分享图片

技术分享图片

再去浏览器访问也可以成功。fastcgi也有推服务器池的功能,当分离部署的时候,可以推一个服务器池,也可以推多个服务器池,每个服务器池都可以是一个业务。

 

 

-------------------------------------------------------------未完---------------------------------------------------------------------------

 

以上是关于LNMP分离式部署的主要内容,如果未能解决你的问题,请参考以下文章

LNMP分离式部署搭建

Linux系统——LNMP分离式部署

LNMP分离式部署

企业级LNMP分离式部署

分离式部署LNMP架构并实现项?上线 -Author: bavdu -Email: bavduer@

lnmp分离部署