00.课程介绍部分
1.nginx服务location 匹配URI
2.nginx服务rewrite配置 跳转
a 可以实现URI信息跳转
b 可以实现URL信息跳转
c 可以实现协议信息跳转
d 可以实现伪静态配置
3.网站LNMP架构
01.课程知识回顾
1.nginx服务访问的流量控制
a 基于ip地址连接数进行控制
在配置文件中添加
limit_conn_zone $binary_remote_addr zone=xxxx(name):xM(size);
limit_conn xxxx(name) x(数量);
b 基于用户访问频次进行控制
在配置文件中添加
limit_req_zone $binary_remote_addr zone=xxxx(name):(xM)size rate=1r/s(请求一秒一个);
limit_req zone=xxxx(name) burst=10;
burst=number: 最大的请求阈值, 超过阈值请求都会进行控制
2.nginx服务日志说明
a 访问日志
log_forman main "xxxxxxx" 定义日志格式
access_log /var/log/nginx/access.log main; 定义保存路径
b 错误日志
error_log var/log/nginx/error.log warn; 定义保存路径
记录日志的级别
一般配 warn 或 error
02.nginx程序location配置方法
作用:匹配指定的URI信息,可以根据访问不同的URI信息,做出不同处理方案
举例:
访问/oldboy目录时, 禁止10.0.0.0/24 网段访问
访问/oldgirl目录时,禁止172.16.1.0/24 网段访问
访问站点下面其他目录,没有任何限制
如何匹配URI信息:
Syntax: location [ = | ~ | ~* | ^~ ] uri { ... }
Default: —
Context: server, location
= 精确匹配指定URI信息
~ 模糊匹配指定URI信息(区分信息大小写)
~* 模糊匹配指定URI信息(不区分大小写)
^~ 进行优先匹配/不识别扩展正则信息
location = / {
[ configuration A ]
}
location / { ---进行默认匹配
[ configuration B ]
}
location /documents/ { ---根据资源目录信息进行匹配
[ configuration C ]
}
location ^~ /images/ { ---进行优先匹配/images/目录
[ configuration D ]
}
location ~* \.(gif|jpg|jpeg)$ { ---模糊匹配
[ configuration E ]
}
实践配置:
第一步:编写配置文件
[root@web02 conf.d]# cat www.conf
server {
listen 80;
server_name www.oldboy.com;
# www.oldboy.com / --> index.html
location / { --- 默认匹配
root /html/www;
index index.html;
}
# www.oldboy.com / --> oldboy.html --- 精确匹配的location 会最优先 01
location = / {
root /html/www;
index oldboy.html;
}
# www.oldboy.com/documents/ --> oldgirl.html --- 匹配指定目录,显示目录下面的首页文件信息
location /documents/ {
root /html/www;
index oldgirl.html;
}
# www.oldboy.com/images/ --> oldboy.jpg --- 优先匹配 02
location ^~ /images/ {
root /html/www;
index oldboy.jpg;
}
# www.oldboy.com/xxxx.jpg --> xxx.jpg ---模糊匹配
location ~* \.(jpg|png|gif)$ {
root /html/www;
}
}
测验:
oldboy.jpg ---> /html/www/oldboy/ www.oldboy.com/meinv01.html 显示 oldboy.jpg 图片
oldgirl.jpg ---> /html/www/oldgirl/ www.oldboy.com/meinv02.html 显示 oldgirl.jpg 图片
编辑配置文件:
server {
listen 80;
server_name www.oldboy.com;
root /html/www;
location / {
return 301 http://www.oldboy.com/oldboy/oldboy.jpg
}
}
总结:
1.配置多个location时,需要有个默认的location
2.访问的URI文件信息必须存在
3.访问指定资源不存在,可以利用return功能进行跳转访问
03.nginx程序rewrite跳转功能
用户浏览器 属于域名地址A -- web服务器 -- 自动处理 --访问域名地址信息B
Syntax: rewrite regex replacement [flag];
Default: —
Context: server, location, if
regex: 正则匹配的信息(URL/URI)
replacement: 替换成什么信息/跳转成什么地址信息
[flag]: 指定进行跳转的方式
方式一:last 用户访问网站,进行跳转之后,会重启再次发起访问
方式二:break 用户访问网站,进行跳转之后,会直接访问跳转后的资源信息
实践说明:
server {
listen 80;
server_name www.oldboy.com;
root /html/www;
# www.oldboy.com/break/ -- 跳转(break) -- www.oldboy.com/test/
location ~ ^/break/ {
rewrite ^/break/ /test/ break;
}
# www.oldboy.com/last/ -- 跳转(last) -- www.oldboy.com/test/
location ~ ^/last/ {
rewrite ^/last/ /test/ last;
}
}
方式三:redirect(临时跳转) 将地址url/uri信息进行跳转变化
方式四:permanent(永久跳转) 将地址url/uri信息进行跳转变化
临时跳转:不会让浏览器记录跳转信息 (URI信息跳转经常用)
永久跳转:让浏览器记录跳转信息 (URL信息跳转经常用)
server {
listen 80;
server_name www.oldboy.com;
# www.oldboy.com/xxxx/ -- 跳转(redirect) -- www.oldboy.com/test/
location ~ ^/break/ {
root /html/www;
index index.html;
rewrite ^/break/ /test/ redirect;
}
# www.oldboy.com/last/ -- 跳转(permanment) -- www.oldboy.com/test/
location ~ ^/last/ {
root /html/www;
index index.html;
rewrite ^/last/ /test/ permanent;
}
uri地址跳转练习:
例1: 用户访问www.oldboy.com/abc/1.html 实际上真实访问是/ccc/bbb/2.html
http://www.oldboy.com/abc/1.html ==> http://www.oldboy.com/ccc/bbb/2.html A -> B
第一步: 创建跳转后环境:
mkdir /html/www/ccc/bbb -p; echo oldboy >/html/www/ccc/bbb/2.html
第二步:编写配置文件
server {
listen 80;
server_name www.oldboy.com;
root /html/www;
index index.html;
location /abc/ {
rewrite /abc/1.html /ccc/bbb/2.html redirect;
}
}
例2:用户访问www.oldboy.com/2014/ccc/bbb/2.html 实际上真实访问是/2018/ccc/bbb/2.html AB --> CB A(.*) -- C(\1)
#http://www.oldboy.com/2014/ccc/bbb/2.html ==> http://www.oldboy.com/2018/ccc/bbb/2.html
第一步: 创建站点目录环境信息
跳转后环境: mkdir /html/www/2018/ccc/bbb/ -p; echo 2018 >/html/www/2018/ccc/bbb/2.html
第二步:编辑配置文件
server {
listen 80;
server_name www.oldboy.com;
root /html/www;
index index.html;
location /2014/ {
rewrite /2014(.*) /2018$1 redirect;
}
}
04.课程知识总结
1.nginx的location指定配置方法
location匹配URI的方式 /xx/ ~ ~* ^~ = \.jpg$
2.nginx的rewrite指定配置方式
last/break/redirect(临时跳转)/permanent(永久跳转)
3.练习 URI跳转
作业:
01. 用户访问www.oldboy.com/test/oldboy.jpg 目录下任何内容, 实际上真实访问是http://www.oldboy.com
www.oldboy.com/test/oldboy.jpg ==> www.oldboy.com/oldboy.jpg
server {
listen 80;
server_name www.oldboy.com;
root /html/www;
index index.html;
location /test/ {
rewrite /test/(.*) /$1 redirect;
}
}
02. 用户访问course-11-22-33.html实际上真实访问是/course/11/22/33/course_33.html
#http://www.oldboy.com/course-11-22-33.html ==> http://www.oldboy.com/course/11/22/33/course_33.html
server {
listen 80;
server_name www.oldboy.com;
root /html/www;
location ^~/ {
rewrite /course-11-22-33.html /course/11/22/33/course_33.html last;
}
}
rewrite /(.*)-(.*)-(.*)-(.*)\.(.*) /$1/$2/$3/$4/$1_$4.$5 last;
03. 用户访问 www.jd.com 跳转成 www.oldboy.com (难点) -- 无限跳转
方式一:
# cat bbs.conf jd.conf
server {
listen 80;
server_name bbs.oldboy.com;
root /html/bbs;
index index.html;
}
server {
listen 80;
server_name www.jd.com;
location / {
rewrite ^/(.*)$ http://bbs.oldboy.com/$1 permanent;
}
}
方式二:
server {
listen 80;
server_name www.oldboy.com www.jd.com;
root /html/www;
index index.html;
location / {
if ($http_host ~* ^www.jd.com$) {
rewrite ^/(.*) http://www.oldboy.com/$1 permanent;
}
}
}
curl -v --显示详细访问过程
curl -L --追踪跳转过程,显示页面信息