一、 环境准备: centos系统、nginx源码、 yum源(安装mysqlphp-fpm

二、 安装步骤:

1、先确定一下防火墙都清空了

feb22803ef186cff33abc6a16c80536e.png

2、安装nginx(推荐源码编译安装)

3yum方式安装mariadbmariadb-server php-mysql php php-fpm 5108d386bcfa36b4dc13557baf3a71b2.png

4、下载小米商城源码, 解压缩到/data/web目录, 修改权限为nobody

新建目录,然后解压缩到目录下

     08bcf5393fd987c759f90e5163d8c9aa.png

发现所有文件的属主属组都是root,权限太大实验——实现基于LNMP的电子商务平台架构_第1张图片

于是我们将它改为nobody实验——实现基于LNMP的电子商务平台架构_第2张图片


三、 修改配置文件:

1、修改nginx配置, 把nginx.conf.default模板复制为配置文件进行修改,指定网站访问目录为/data/web, 并设置默认用户和配置与php-fpm交互

将模板复制为配置文件实验——实现基于LNMP的电子商务平台架构_第3张图片

修改配置文件

     8106f0b4ad0185d1dda10b37b3ec6238.png

用户为nobody

     80df6362f2de61a1f9694aaac561cd9a.png

启用info日志,更改日志的路径(如果没有这个路径记得自己去建好)

     818d5d5751ba4fae2155bf89c49979de.png

连接数改大一点,改为65535

     247596d26db83447d7b273d6a59cdd0c.png

    将日志去掉注释,并修改存放路径f353e12b8e6f7ad9ae41a573a02fbd53.png

设置其他属性

     实验——实现基于LNMP的电子商务平台架构_第4张图片

写上端口和服务名(名随便起),指定网站访问目录为/data/web

     实验——实现基于LNMP的电子商务平台架构_第5张图片

    因为上面定义了路径,因此下面这行就可以删掉了:

     实验——实现基于LNMP的电子商务平台架构_第6张图片

删掉后如下:

     f2dafdf889e977ad8362e4778941a6c2.png

PHP交互,将PHP那段代码取消注释,并将php扩展解析文件路径(fastcgi_param那行)修改为如下代码:

fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;实验——实现基于LNMP的电子商务平台架构_第7张图片

修改完毕,保存退出,然后可以使用nginx -t查看是否有语法错误33f2d0a372b3de6be2c7cf0cb3b3a57e.png

它显示warn警告说连接数设置的有些大,超过了1024

于是我们修改一下允许打开的最大文件数:

     实验——实现基于LNMP的电子商务平台架构_第8张图片

然后再测一下,没有语法错误了8b76335d807d4ee9b7b0c6565d75c630.png

然后使用systemctl start nginx启动一下服务

2、 修改PHP.ini中功能配置

编辑配置文件

     f12182f3f15054e20f76ec2bb97041f9.png

修改时钟配置 date.timezone = Asia/Shanghai

实验——实现基于LNMP的电子商务平台架构_第9张图片

设置short_open_tag = On

     0fe1bf9b1228cfb647ae0f7c424a4e53.png

然后保存退出,使用systemctl start php-fpm启动一下服务

同样,使用systemctl start mariadb启动一下数据库服务

修改好之后我们可以先验证一下,看看之前设置的路径是否正确,我们就在/data/web/下建一个test.html文件

d9b6331dfe081017a2e8b952192cd552.png

然后访问一下

实验——实现基于LNMP的电子商务平台架构_第10张图片

访问成功,说明路径设置正确了。


四、网站部署和验证

登录数据库,创建一个新的数据库,起名叫xiaomi实验——实现基于LNMP的电子商务平台架构_第11张图片

exit退出数据库。

我们发现php程序的用户是apache,但是我们nginx程序之前设置的只有nobody才能写进去实验——实现基于LNMP的电子商务平台架构_第12张图片

于是我们要修改php的配置文件

     d4db63819e2b1f90f74de29560a6173b.png

这里用户和组都是apache 

     c0aee8e5d209a941631dd13e85554576.png

我们将它改为nobody

     8ac95c07fc34826aa28aa0b05bb4d647.png

使用systemctl restart php-fpm重启服务

然后我们就可以去浏览器上访问IP/ebak/index.php实验——实现基于LNMP的电子商务平台架构_第13张图片

用户名为admin,密码为123456,登陆

登陆之后点击参数设置,然后写上参数:实验——实现基于LNMP的电子商务平台架构_第14张图片

点击提交,就将配置文件修改成功了。如果网站方法无法使用,可以手动去改配置文件,方法如下:

找到配置文件,在/data/web/data下,有一个config.php文件实验——实现基于LNMP的电子商务平台架构_第15张图片

将数据库名称改为xiaomi,密码改成空实验——实现基于LNMP的电子商务平台架构_第16张图片

然后就可以恢复数据了,点击“恢复数据”:实验——实现基于LNMP的电子商务平台架构_第17张图片

点击“选择目录”

     实验——实现基于LNMP的电子商务平台架构_第18张图片

选择database_20170529184126实验——实现基于LNMP的电子商务平台架构_第19张图片

选择要导入的数据库为xiaomi

    实验——实现基于LNMP的电子商务平台架构_第20张图片

点击开始恢复

     实验——实现基于LNMP的电子商务平台架构_第21张图片

恢复完成

     实验——实现基于LNMP的电子商务平台架构_第22张图片

然后我们就可以访问啦!输入IP/index.php实验——实现基于LNMP的电子商务平台架构_第23张图片

访问成功!!

五、后台管理

先要把/var/lib/nginx/下的tmp文件夹的属主属组也修改成nobody

    实验——实现基于LNMP的电子商务平台架构_第24张图片

因为nginx里很多默认安装路径都是/var/lib/nginx/下的tmp,所以以后会有修改此文件夹下的内容,需要给nobody权限实验——实现基于LNMP的电子商务平台架构_第25张图片


编辑nginx的配置文件

     a9041201ff781c84d68421a5c62cd757.png

添加一个index.php

     实验——实现基于LNMP的电子商务平台架构_第26张图片

检测一下,没有问题b7d72127944bae08342490644092e39b.png

使用systemctl restart nginx重启服务

访问一下IP/admin(因为刚才改过配置文件,所以其实它自动去找admin下的index.php页面去访问的,如果你不想改配置文件,那么输入IP/admin/index.php也可以访问)实验——实现基于LNMP的电子商务平台架构_第27张图片

输入账号admin,密码为admin888

就可以开始管理了实验——实现基于LNMP的电子商务平台架构_第28张图片



配置Nginx状态监控页面

#Nginx运行状态,StubStatus模块获取Nginx自启动的工作状态(编译时要开启对应功能)

首先编辑nginx配置文件

     6280da47a88cb0d6227d530c523c5ca6.png

开启模块功能

 实验——实现基于LNMP的电子商务平台架构_第29张图片

保存退出,nginx -t检测是否有错,然后systemctl restart nginx重启服务

然后访问页面IP/status

     实验——实现基于LNMP的电子商务平台架构_第30张图片

出来状态页面了。

     实验——实现基于LNMP的电子商务平台架构_第31张图片

我们也可以给它加个日志,然后也可以再加个密码

同样,编辑nginx配置文件/etc/nginx/nginx.conf

 实验——实现基于LNMP的电子商务平台架构_第32张图片

保存退出,用nginx -t检查一下没有错误。然后systemctlrestart nginx重启服务。

然后进入/etc/nginx目录,敲htpasswd命令,生成htpasswd文件,给nginx用户设置密码

     实验——实现基于LNMP的电子商务平台架构_第33张图片

然后再次访问status页面的时候就需要输入用户名和密码了~实验——实现基于LNMP的电子商务平台架构_第34张图片


Nginx实现路由-URL重定向

rewrite功能就是,使用nginx提供的全局变量或自己设置的变量,结合正则表达式和标志位实现url重写以及重定向。rewrite只能放在server{},location{},if{}中,并且只能对域名后边的除去传递的参

数外的字符串起作用

举例:http://www.magedu.com/index.php =>http://www.magedu.com/new/index.php

 

表明看rewritelocation功能有点像,都能实现跳转,主要区别在于rewrite是在同一域名内更改获取资源的路径,而location是对一类路径做控制访问或反向代理,可以proxy_pass到其他机器。很多情况下rewrite也会写在location里,它们的执行顺序是:

1执行server块的rewrite指令

2执行location匹配

3执行选定的location中的rewrite指令

 

如果其中某步URI被重写,则重新循环执行1-3直到找到真实存在的文件;循环超过10次,则返回500Internal Server Error错误。

语法rewrite regexreplacement [flag];

 实验——实现基于LNMP的电子商务平台架构_第35张图片

flag标志位

last: 相当于Apache[L]标记,表示完成rewrite

break: 停止执行当前虚拟主机的后续rewrite指令集

redirect: 返回302临时重定向,地址栏会显示跳转后的地址

permanent: 返回301永久重定向,地址栏会显示跳转后的地址

因为301302不能简单的只返回状态码,还必须有重定向的URL

这就是return指令无法返回301,302的原因了。这里 last break区别有点难以理解:

 

last一般写在serverif中,而break一般使用在location

last不终止重写后的url匹配,即新的url会再从server走一遍匹配流程,而break终止重写后的匹配breaklast都能组织继续执行后面的rewrite指令

 

 

if判断指令

语法为if(condition){...},对给定的条件condition进行判断。如果为真,大括号内的rewrite指令将被执行,if条件(conditon)可以是如下任何内容:

当表达式只是一个变量时,如果值为空或任何以0开头的字符串都会当做false直接比较变量和内容时,使用=!=

~正则表达式匹配, ~*不区分大小写的匹配, !~区分大小写的不匹配

-f!-f用来判断是否存在文件

-d!-d用来判断是否存在目录

-e!-e用来判断是否存在文件或目录

-x!-x用来判断文件是否可执行

 

常见全局变量

$host 请求主机头字段,否则为服务器名称。

$http_user_agent 客户端agent信息

$http_cookie 客户端cookie信息

$limit_rate 这个变量可以限制连接速率。

$request_method 客户端请求的动作,通常为GETPOST

$remote_addr 客户端的IP地址。

$request_filename 当前请求的文件路径,rootalias指令与URI

求生成。

$scheme HTTP方法(如http https

$server_protocol 请求使用的协议,通常是HTTP/1.0HTTP/1.1

$server_addr 服务器地址,在完成一次系统调用后可以确定这个值。

$server_name 服务器名称。

$server_port 请求到达服务器的端口号。

$request_uri 包含请求参数的原始URI不包含主机名,如:

/foo/bar.php?arg=baz

 

案例实验——实现基于LNMP的电子商务平台架构_第36张图片


实验

比如我们来配一个:如果是IE浏览器,就跳转到手机端界面(就是上面的案例1

编辑nginx配置文件

     b67f95139f570c35e8682d34ee328df9.png

    添加如下三行代码:

     实验——实现基于LNMP的电子商务平台架构_第37张图片

保存退出,检查语法错误,重启服务。

然后使用IE浏览器访问一下界面,果然变成手机版了。实验——实现基于LNMP的电子商务平台架构_第38张图片

类似的,如果改为如下代码的话

     2bd7d5114025110e4d9b979bc98e8d45.png

就是用IE浏览器访问界面,都会跳转到百度页面去。(redirect表示跳转)