LNMP 分离式部署: Linux,Ninx,MySQL,PHP
开启三台虚拟机, 分别安装搭建 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 也有推服务器池的功能, 当分离部署的时候, 可以推一个服务器池, 也可以推多个服务器池, 每个服务器池都可以是一个业务.
------------------------------------------------------------- 未完 ---------------------------------------------------------------------------
来源: http://www.bubuko.com/infodetail-2864949.html