实验——实现基于LNMP的电子商务平台架构

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了实验——实现基于LNMP的电子商务平台架构相关的知识,希望对你有一定的参考价值。

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

二、 安装步骤:

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

技术分享

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

3yum方式安装mariadbmariadb-server php-mysql php php-fpm 技术分享

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

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

     技术分享

发现所有文件的属主属组都是root,权限太大技术分享

于是我们将它改为nobody技术分享


三、 修改配置文件:

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

将模板复制为配置文件技术分享

修改配置文件

     技术分享

用户为nobody

     技术分享

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

     技术分享

连接数改大一点,改为65535

     技术分享

    将日志去掉注释,并修改存放路径技术分享

设置其他属性

     技术分享

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

     技术分享

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

     技术分享

删掉后如下:

     技术分享

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

fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;技术分享

修改完毕,保存退出,然后可以使用nginx -t查看是否有语法错误技术分享

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

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

     技术分享

然后再测一下,没有语法错误了技术分享

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

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

编辑配置文件

     技术分享

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

技术分享

设置short_open_tag = On

     技术分享

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

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

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

技术分享

然后访问一下

技术分享

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


四、网站部署和验证

登录数据库,创建一个新的数据库,起名叫xiaomi技术分享

exit退出数据库。

我们发现php程序的用户是apache,但是我们nginx程序之前设置的只有nobody才能写进去技术分享

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

     技术分享

这里用户和组都是apache 

     技术分享

我们将它改为nobody

     技术分享

使用systemctl restart php-fpm重启服务

然后我们就可以去浏览器上访问IP/ebak/index.php技术分享

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

登陆之后点击参数设置,然后写上参数:技术分享

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

找到配置文件,在/data/web/data下,有一个config.php文件技术分享

将数据库名称改为xiaomi,密码改成空技术分享

然后就可以恢复数据了,点击“恢复数据”:技术分享

点击“选择目录”

     技术分享

选择database_20170529184126技术分享

选择要导入的数据库为xiaomi

    技术分享

点击开始恢复

     技术分享

恢复完成

     技术分享

然后我们就可以访问啦!输入IP/index.php技术分享

访问成功!!

五、后台管理

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

    技术分享

因为nginx里很多默认安装路径都是/var/lib/nginx/下的tmp,所以以后会有修改此文件夹下的内容,需要给nobody权限技术分享


编辑nginx的配置文件

     技术分享

添加一个index.php

     技术分享

检测一下,没有问题技术分享

使用systemctl restart nginx重启服务

访问一下IP/admin(因为刚才改过配置文件,所以其实它自动去找admin下的index.php页面去访问的,如果你不想改配置文件,那么输入IP/admin/index.php也可以访问)技术分享

输入账号admin,密码为admin888

就可以开始管理了技术分享



配置Nginx状态监控页面

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

首先编辑nginx配置文件

     技术分享

开启模块功能

 技术分享

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

然后访问页面IP/status

     技术分享

出来状态页面了。

     技术分享

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

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

 技术分享

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

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

     技术分享

然后再次访问status页面的时候就需要输入用户名和密码了~技术分享


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];

 技术分享

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

 

案例技术分享


实验

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

编辑nginx配置文件

     技术分享

    添加如下三行代码:

     技术分享

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

然后使用IE浏览器访问一下界面,果然变成手机版了。技术分享

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

     技术分享

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


本文出自 “Ty_endless” 博客,请务必保留此出处http://tyendless.blog.51cto.com/12435756/1978990

以上是关于实验——实现基于LNMP的电子商务平台架构的主要内容,如果未能解决你的问题,请参考以下文章

实现基于小米的电子商务平台架构

实验----实现基于LNMP的电子商务网站

实现基于LNMP的小米电子商务网站平台

实现基于LNMP 的电子商务网站

实现基于Keepalived+Haproxy+Varnish+LNMP企业级架构

Nginx