一、 环境准备: centos系统、nginx源码、 yum源(安装mysql与php-fpm)
二、 安装步骤:
1、先确定一下防火墙都清空了
2、安装nginx(推荐源码编译安装)
3、yum方式安装mariadb、mariadb-server、 php-mysql、 php、 php-fpm
4、下载小米商城源码, 解压缩到/data/web目录, 修改权限为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文件
然后访问一下
访问成功,说明路径设置正确了。
四、网站部署和验证
exit退出数据库。
我们发现php程序的用户是apache,但是我们nginx程序之前设置的只有nobody才能写进去
于是我们要修改php的配置文件
这里用户和组都是apache
我们将它改为nobody
使用systemctl restart php-fpm重启服务
然后我们就可以去浏览器上访问IP/ebak/index.php了
用户名为admin,密码为123456,登陆
点击提交,就将配置文件修改成功了。如果网站方法无法使用,可以手动去改配置文件,方法如下:
找到配置文件,在/data/web/data下,有一个config.php文件
点击“选择目录”
选择要导入的数据库为xiaomi
点击开始恢复
恢复完成
访问成功!!
五、后台管理
先要把/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
表明看rewrite和location功能有点像,都能实现跳转,主要区别在于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永久重定向,地址栏会显示跳转后的地址
因为301和302不能简单的只返回状态码,还必须有重定向的URL,
这就是return指令无法返回301,302的原因了。这里 last 和 break区别有点难以理解:
last一般写在server和if中,而break一般使用在location中
last不终止重写后的url匹配,即新的url会再从server走一遍匹配流程,而break终止重写后的匹配break和last都能组织继续执行后面的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 :客户端请求的动作,通常为GET或POST。
$remote_addr :客户端的IP地址。
$request_filename :当前请求的文件路径,由root或alias指令与URI请
求生成。
$scheme : HTTP方法(如http, https)。
$server_protocol :请求使用的协议,通常是HTTP/1.0或HTTP/1.1。
$server_addr :服务器地址,在完成一次系统调用后可以确定这个值。
$server_name :服务器名称。
$server_port :请求到达服务器的端口号。
$request_uri :包含请求参数的原始URI,不包含主机名,如:
”/foo/bar.php?arg=baz”
实验
比如我们来配一个:如果是IE浏览器,就跳转到手机端界面(就是上面的案例1)
编辑nginx配置文件
添加如下三行代码:
保存退出,检查语法错误,重启服务。
类似的,如果改为如下代码的话
就是用IE浏览器访问界面,都会跳转到百度页面去。(redirect表示跳转)