Nginx Web架构

一、动态网站架构

资源文件识别语言框架
Index.php开源phpWindows/Linux+nginx+php+mysql
Index.py开源pythonWindows/Linux+apache+python+mysql
Index.jsp商业javaWindows/Linux+tomcat+JDK+Oracle(mysql)
Index.asp商业C#Windows/Linux+iis+asp.net+sql-server/Oracle/mogodb

二、LNMP动态网站环境部署

1、php部署

(1)安装启动:
在这里插入图片描述
· php-fpm:php接收动态请求的程序(就是连接nginx的)
· php-mysql:php链接mysgl的程序(就是连接数据库的)
· php-gd:图形库程序( GD库可以处理图片,或者生成图片)
启动php-fpm:
在这里插入图片描述
开启之后php程序端口号为9000:
在这里插入图片描述
(2)测试:
1)在nginx的默认网页目录下(usr/share/nginx/html)创建index.php的文件:
在这里插入图片描述
测试语句:
在这里插入图片描述
2)修改配置文件:(/etc/nginx/con.f/defalut):
在这里插入图片描述
在sever{}中的location{}中修改首页的优先级访问顺序:
在这里插入图片描述
这样就首先访问index.php文件,然会才是index.html
3)在server{}中添加(如果被注释掉请取消注释):
在这里插入图片描述
用户在访问网站时,当他的请求结尾带有“.php”结尾的请求时,将它推给127.0.0.1(本机):9000的php程序进行处理。
4)重启nginx服务:
在这里插入图片描述
5)使用真机在浏览器进行访问:
在这里插入图片描述测试成功!

2、部署mysql数据库:

· 可以选择mysql,也可以选择mariadb,选择一款即可,二者不要冲突
(1)安装mariadb-sevevr和mariadb:
在这里插入图片描述
·mariadb-server是它的主程序,用来存储数据;mariadb 是客户端,用来登录和输入sql语言来操作它的
(2)启动并设置开机自启:
在这里插入图片描述
(3)修改mariadb的root密码为‘123456’:
在这里插入图片描述
(4)登录:
在这里插入图片描述
(5)准备一个空库(ssb)用来存储应用程序数据:
在这里插入图片描述
(6)授权:
在这里插入图片描述
为phptest用户授权,授权的是我们本机,如果是分离部署,地址要写到php所安装的位置,如果输入IP地址创建失败,可以尝试输入“localhost”。
(7)刷新:
在这里插入图片描述
(8)测试:
1)修改/usr/share/nginx/html/index.php,改成连接mysql的语句:
在这里插入图片描述
2)访问:
Ok,成功
Ok,成功

3、业务上线:

(1)先删除测试文件(index.php):
在这里插入图片描述
(2)将workpress复制到/usr/share/nginx/html目录下并解压:
在这里插入图片描述
(3)将workpress目录下的所有全部移动到/usr/share/nginx/html目录下:
在这里插入图片描述
(4)修改/usr/share/nginx/htm目录下的用户和组:
在这里插入图片描述
(5)访问192.168.100.20即可:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
进入后台:
在这里插入图片描述

三、Fastcgi& php-fpm

1、模块:ngx_fastcgi_modul

· 处理动态请求的接口,nginx通过ngx_fastcgi_modul模块链接php-fpm处理动态请求。
Php-fpm:PHP-FPM(FastCGl Process Manager: FastCGl进程管理器)是一个PHP FastCGI管理器。
PHP通过php-fpm接收前台nginx的动态访问的请求,比如向后端Mysql进行查询请求后,将查询结果返回给前台nginx。

四、php-fpm初始化设置

1、了解php-fpm的相关配置文件:

(1)核心配置文件:
在这里插入图片描述
在这里插入图片描述
· date.timezone=PRC:设置PHP时区
在这里插入图片描述
·Open_basedir:设置PHP脚本允许访问的目录。open_basedir将PHP所能打开的文件限制在指定的目录树中,包括文件本身。当程序要使用例如fopen()或file_get_contents()打开一个文件时,这个文件的位置将会被检查。当文件在指定的目录树之外,程序将拒绝打开。
(以上的配置都会默认配置)
(2)全局配置文件:
在这里插入图片描述
· pid = /run/php-fpm/php-fpm.pid:pid存放路径
· error_log = log/php-fpm.log:错误日志存放路径
· log_level= notice:日志等级
· process.max =3:默认没设置。控制子进程最大数的全局变量,后边的设置子进程数量的指令受到这个值的限制,0表示无限制
· daemonize = yes:守护进程

(3)扩展配置文件:
在这里插入图片描述
· start_servers=5 :最初开启多少进程
· min_spare_server =5 :最小的多余进程数。最少空闲。用户访问会消耗掉进程。然后为了满足后续游湖随时随地开启进程保持空闲数为5。
· max_children=50:最大进程数
是PHP-FPM Pool最大的子进程数,他数值取决于你的服务器内存。假设你打算给10G内存给当前配置的PHP-FPM Pool,一般一个PHP请求占用内存10M-40M,我们按站点每个PHP请求占用内存25M ,这样max_children= 10G/ 25M=409,所以,这个值可以根据情况算出来
· max_spare_servers=10 :最大的多余进程。大规模断开后,高并发访问过后,还剩多少。
· max_requests = 500 : 每个子进程能响应的请求数量,到达此数字,该PHP进程就被释放掉了。
· listen.allowed_dients = 127.0.0.1:允许访问FastCGl进程的IP,设置any为不限制IP,如果要设置其他主机的ngirx也能访问这台机器。
· listen = 127.0.0.1:9000:fpm监听端口,即nginx中php处理的地址,一般默认值即可。可用格式为:‘ip:port’
· slowlog =/var/log/php-fpm/$pool-slow.log:开启慢日志

2、初始化php-fpm:

(1)修改php扩展配置文件:
在这里插入图片描述
(2)需要初始化的配置:
在这里插入图片描述
(3)修改完成之后重启php-fpm:
在这里插入图片描述

3、启动php状态监控页面功能:

(1)启动测试页功能
· php提供了一个web页面,访问php服务器,就可以看到它的实时状态了
1)打开php的扩展配置文件:
在这里插入图片描述
2)将pm.startus_path前的“;”注释去掉就可以了
在这里插入图片描述
(2)Nginx配置页面转发
1)进入nginx的子配置文件:
在这里插入图片描述
2)在server{}中添加:
在这里插入图片描述
·这样配置之后,如果有用户想看/status的时候,就将它推送给9000来处理。
3)重启nginx和php-fpm:
在这里插入图片描述
(3)访问测试页:
在这里插入图片描述

五、Nginxlocation

1、配置文件当中http{}模块、server{}模块、location{}模块的作用

· http{}:整个服务器;
· server{}:本虚拟主机;
· location{}:一个页面;

2、语法规则:在这里插入图片描述

=   	表示精确匹配,优先级也是最高的
~		区分大小写的正则匹配
~*		不区分大小写的正则匹配
/		通用匹配,任何请求都会匹配到
^~		以某些字符串开头
!~		非(区分大小写匹配的正则)
!~*	非(不区分大小写匹配的正则)

3、location的优先级:

=    >    ^~    >    ~|~*|!~|!~*    >    /

六、NginxRewrite(url重写)

1、什么是rewrite:

(1)、URLRewrite最常见的应用是URL伪静态化,是将动态页面显示为静态页面方式的一种技术。比如:http:/www.123.com/news/index.php?id=123使用URLRewrite转换后可以显示为 http://www.123
.com/news/123html对于追求完美主义的网站设计师,就算是网页的地址也希望看起来尽量简洁明快。理论上,搜索引擎更喜欢静态页面形式的网页,搜索引擎对静态页面的评分-般要高于动态页面。所以,urlRewrite可以让我们网站的网页更容易被搜索引擎所收录。
(2)、从安全角度上讲,如果在URL中暴露太多的参数,无疑会造成一定量的信息泄漏,可能会被一些黑客利用,对你的系统造成一定的破坏,所以静态化的URL地址可以给我们带来更高的安全性。
(3)、实现网站地址跳转,例如用户访间360buy.com,将其跳转到jd.com4。

2、rewrite相关指令:

(1)重定向:将用户的访问( url) ,更换成指定的文件。
(2)if语句:
应用环境: server,location
语法:if(condition){…}
(3)条件判断:

~* 				正则匹配(不区分大小写)~				非正则匹配(区分大小写)
!~*				非正则匹配(不区分大小写)
-f和!-f			用来判断是否存在文件
-d和!-d			用来判断是否存在目录
-e和!-e			用来判断是否存在文件或目录
-×和!-x			用来判断文件是否可执行

(4)全局变量:

$document_root 			针对当前请求的根路径设置值;
$remote_addr 			客户端地址;
$request_filename		当前请求的文件路径名(带网站的主目录/usr/local/
$request_uri 			当前请求的文件路径名(不带网站的主目录/images/a.jpg)
$server_name			请求到达的服务器名;
$scheme 				用的协议,比如http或者是https
$args 					请求中的参数;
$host 					请求信息中的""ost",如果请求中没有Host行,则等于设置的服务器名;

3、rewrit匹配参考案例:

· 例1
目的:当用户访问http://192.168.100.20/abcla/1.html地址时,
通过redirect重定向至http://192.168.100.20/ccc/bbb/2.html
(1)配置地址重写:
1)在/usr/share/nginx/html目录下创建以下目录:
在这里插入图片描述
在aaa目录下创建文件“1.html” :
在这里插入图片描述
在这里插入图片描述
在/usr/share/nginx/html目录下创建以下目录:
在这里插入图片描述
在bbb目录下创建文件“2.html”:
在这里插入图片描述
在这里插入图片描述
2)修改配置文件/etc/nginx/conf/default:
在server{}中添加:
在这里插入图片描述
·当用户访问/aaa时,将访问页面重定向到/bbb/2.html
3)重启nginx服务:
在这里插入图片描述
4)测试:
在这里插入图片描述
(注意:这样一来,就算删除aaa目录也还是会重定向到/bbb/2.html)
5)如果加上“permanent”会将地址显示为新的URL地址:
在这里插入图片描述
6)重启服务之后访问:
在这里插入图片描述
7)那加permanent和不加permanent有什么区别呢?
· 添加permanent:被替换生成两次请求。服务器只转换了url,客户端重新申请。
· 不添加permanent:url是老的,服务器内部转换请求。服务器内部转换URL,内部转换页面。
(一般情况下都是添加permanent的)
· 【注意】:用户访问如下URL ( http://192.168.100.10/cde/aaa/1.html)而我的配置文件中语句是这样写( location ~ /abc)也是会实现重定向的。那我们如何阻止这样的url重定向?只需将配置文件修改成:“location ~ ^/abc”
· 例2
将http://192.168.100.20/2016/a/b/c/1.html换http://192.168.100.20/2017/a/b/c/1.html
· 例3
目的:location { rewrite }只能替换url中的目录路径,使用if(){rewrite}可以替换协议主机目录全部能容。将http://www.qianfeng.com
换http:/jd.com
(1)修改配置文件/etc/nginx/conf/default:
在server{}中添加:
在这里插入图片描述
·host:调用主机地址
(2)重启nginx服务器:
在这里插入图片描述
(注意:这里要修改真机hosts文件,否则解析不到)
在这里插入图片描述
· 例4
延续上一个实验:在上一个试验中,不论输入的url中页面内容是什么: http://qianfeng.com/1.html
http://qianfeng.com/2.html
其结果。把主机地址由qianfeng.com换成cloud.com。$request全部都重定向至http://cloud.com/1.html主页。
http://cloud.com/2.html
(1)准备一个新网站(cloud.com)和新页面(bbb/ccc/2.html):
在这里插入图片描述
在这里插入图片描述
(2)重启nginx服务器:
在这里插入图片描述
(3)创建网站主目录(/cloud):
在这里插入图片描述
(4)创建主页(index.html):
在这里插入图片描述
在这里插入图片描述
保存退出!
(5)再在/cloud下创建一个更深的目录“ccc/bbb/”,等下要跳转进来:
在这里插入图片描述
(6)在/cloud/ccc/bbb目录下创建一个网页(2.html):
在这里插入图片描述
在这里插入图片描述
保存退出!
(7)确认已做好域名解析:
在这里插入图片描述
(8)修改配置文件/etc/nginx/conf/default.conf:
在这里插入图片描述
(9)重启nginx服务器:
在这里插入图片描述
(10)测试:
在这里插入图片描述
实验完成!

· 例5
在访问的url是目录时,在URL自动添加一个"/"(如果不是目录,则不加”/”)(但是先做个判断,是目录才需要加,不是目录就不加。)
当用户访问网站时,输入的URL不完整。
1.输入的URL是目录时,自动添加"/" http:/ /www.baidu.com/abc
2.输入的URL是文件时,不添加“http://www.baidu.com/abc/index.html
3.输入的URL是目录,但已经添加"/"时,不添加“/”http://www.baidu.com/abc/
(1)修改配置文件:/etc/nginx/conf/default:
在这里插入图片描述
·$request_filename:只判断用户输入路径的最后一个“/”后面的内容
(2)重启nginx服务器:
在这里插入图片描述
(3)测试:
在/usr/share/nginx/html目录下:
在这里插入图片描述
在这里插入图片描述
1)访问目录:
在这里插入图片描述
在这里插入图片描述
2)访问文件:
在这里插入图片描述
在这里插入图片描述
3)访问目录加“/”时:
在这里插入图片描述
在这里插入图片描述
OK,实验完成!
·注意:如果在访问时出现403报错,那么有可能为以下3种情况:
1、selinux未关闭;
2、权限问题;
3、缺少索引文件(index.html)

· 例6:
目的:引用原URL中的信息,重定向至目标URL
#http://alice.qianfeng.com > http:/www.qianfeng.com/ #http:/jack.qianfeng,com> http://www.qianfeng.com/jack
(1)修改/etc/nginx/conf/default,并在server{}中添加:
在这里插入图片描述
·set:定义变量
·$user:空变量
·$1:已有的位置变量( 就是上一行的(.*) )
(2)创建两个新目录
在这里插入图片描述
(3)分别创建主页:
在这里插入图片描述
在这里插入图片描述
(4)修改真机的hosts文件,添加jack.qianfeng.com、alice.qianfeng.com
在这里插入图片描述
(5)重启nginx服务器:
在这里插入图片描述
· 例7
目的:因为用户是能访问任何文件的,如果访问服务器中的特殊文件。如:.sh结尾的文件。则返回403操作拒绝错误
(1)修改配置文件,在server{}添加:(以下两种方式选择其一即可)

1)当用户访问以.sh结尾的文件时,直接返回用户403:
在这里插入图片描述
2)当用户访问以.sh结尾的文件时,重定向至主页:
在这里插入图片描述
(2)重启nginx服务器:
在这里插入图片描述
(3)在网页的主目录下创建一个“.sh”的文件:
在这里插入图片描述
(4)测试:
在这里插入图片描述
· 例8
目的:last标记
1、准备三个页面:
(1)先在/usr/share/nginx/html下创建一个目录test:
在这里插入图片描述
(2)在test目录下创建三个页面:
在这里插入图片描述
2、使用break和last标记:
(1)修改配置文件,在server中添加:
当用户访问break页面时,将它重定向至/test/break.html
在这里插入图片描述
·break:终止匹配
重启服务之后测试:
在这里插入图片描述
(2)修改配置文件,在server中添加:
当机器执行了last以后,不会显示当前的执行结果,而是去寻找下一个location去匹配:
在这里插入图片描述
重启服务之后测试:
在这里插入图片描述

七、平滑升级

1、平滑升级1.12版本到1.14版本:
(1)编译安装新版本的nginx,指定安装目录为新目录
(2)查看就的nginx的主进程号和工作进程号
在这里插入图片描述
在这里插入图片描述
(3)替换旧的执行程序
(4)给主进程发送USR2信号
(5)给进程发送WINCH信号
【注意】:要做平滑升级,必须是源码编译安装,因为源码安装它可以让我们的机器同时安装多个版本的程序,不支持yum直接在线升级。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值