nginx全局变量及rewrite实战
admin
2023-02-23 08:40:04
0

Rwrite相关全局变量
coding.net/u/aminglinux/p/nginx/git/blob/master/rewrite/variable.md
Rwrite实战
coding.net/u/aminglinux/p/nginx/git/blob/master/rewrite/example.md

nginx 常用全局变量
变量 说明
$args 请求中的参数,如www.123.com/1.php?a=1&b=2的$args就是a=1&b=2
$content_length HTTP请求信息里的"Content-Length"
$conten_type HTTP请求信息里的"Content-Type"
$document_root nginx虚拟主机配置文件中的root参数对应的值
$document_uri 当前请求中不包含指令的URI,如www.123.com/1.php?a=1&b=2的$document_uri就是1.php,不包含后面的参数 #常用
$host 主机头,也就是域名 #常用
$http_user_agent 客户端的详细信息,也就是浏览器的标识,用curl -A可以指定 #常用
$http_cookie 客户端的cookie信息
$limit_rate 如果nginx服务器使用limit_rate配置了显示网络速率,则会显示,如果没有设置, 则显示0
$remote_addr 客户端的公网ip
$remote_port 客户端的port
$remote_user 如果nginx有配置认证,该变量代表客户端认证的用户名
$request_body_file 做反向代理时发给后端服务器的本地资源的名称
$request_method 请求资源的方式,GET/PUT/DELETE等
$request_filename 当前请求的资源文件的路径名称,相当于是$document_root/$document_uri的组合
$request_uri 请求的链接,包括$document_uri和$args #常用
$scheme 请求的协议,如ftp,http,https
$server_protocol 客户端请求资源使用的协议的版本,如HTTP/1.0,HTTP/1.1,HTTP/2.0等
$server_addr 服务器IP地址
$server_name 服务器的主机名
$server_port 服务器的端口号
$uri 和$document_uri相同 #常用
$http_referer 客户端请求时的referer,通俗讲就是该请求是通过哪个链接跳过来的,用curl -e可以指定 #常用

Rewrite实战

本部分内容为nginx生产环境中使用的场景示例。

域名跳转(域名重定向)

示例1(不带条件的):
server{
listen 80;
server_name www.aminglinux.com;
rewrite /(.*) http://www.aming.com/$1 permanent;
.......

}

示例2(带条件的):
server{
listen 80;
server_name www.aminglinux.com aminglinux.com;
if ($host != 'www.aminglinux.com')
{
rewrite /(.*) http://www.aminglinux.com/$1 permanent;
}
.......

}
示例3(http跳转到https):
server{
listen 80;
server_name www.aminglinux.com;
rewrite /(.*) https://www.aminglinux.com/$1 permanent;
.......

}
示例4(域名访问二级目录)
server{
listen 80;
server_name bbs.aminglinux.com;
rewrite /(.*) http://www.aminglinux.com/bbs/$1 last;
.......

}
示例5(静态请求分离)
server{
listen 80;
server_name www.aminglinux.com;
location ~ ^.+.(jpg|jpeg|gif|css|png|js)$
{
rewrite /(.
) http://img.aminglinux.com/$1 permanent;
}

.......

}
或者:
server{
listen 80;
server_name www.aminglinux.com;
if ( $uri ~ 'jpg|jpeg|gif|css|png|js$')
{
rewrite /(.
) http://img.aminglinux.com/$1 permanent;
}

.......

}

防盗链

示例6
server{
listen 80;
server_name www.aminglinux.com;
location ~ ^.+.(jpg|jpeg|gif|css|png|js|rar|zip|flv)$
{
#白名单 空 blocked 域名
valid_referers none blocked server_names
.aminglinux.com aminglinux.com .aming.com aming.com;
if ($invalid_referer) #黑名单
{
rewrite /(.
) http://img.aminglinux.com/images/forbidden.png;
}
}

.......

}
说明:这里是通配,跟正则里面的不是一个意思,none指的是referer不存在的情况(curl -e 测试),
blocked指的是referer头部的值被防火墙或者代理服务器删除或者伪装的情况,
该情况下,referer头部的值不以http://或者https://开头(curl -e 后面跟的referer不以http://或者https://开头)。
或者:
location ~ ^.+.(jpg|jpeg|gif|css|png|js|rar|zip|flv)$
{
valid_referers none blocked server_names
.aminglinux.com *.aming.com aminglinux.com aming.com;
if ($invalid_referer)
{
return 403;
}
}

伪静态

示例7(discuz伪静态):
location / {
rewrite ^([^.])/topic-(.+).html$ $1/portal.php?mod=topic&topic=$2 last;
rewrite ^([^.]
)/forum-(\w+)-([0-9]+).html$ $1/forum.php?mod=forumdisplay&fid=$2&page=$3 last;
rewrite ^([^.])/thread-([0-9]+)-([0-9]+)-([0-9]+).html$ $1/forum.php?mod=viewthread&tid=$2&extra=page%3D$4&page=$3 last;
rewrite ^([^.]
)/group-([0-9]+)-([0-9]+).html$ $1/forum.php?mod=group&fid=$2&page=$3 last;
rewrite ^([^.])/space-(username|uid)-(.+).html$ $1/home.php?mod=space&$2=$3 last;
rewrite ^([^.]
)/(fid|tid)-([0-9]+).html$ $1/index.php?action=$2&value=$3 last;
}

rewrite多个条件的并且

示例8:
location /{
set $rule 0; #定义一个变量
if ($document_uri !~ '^/abc')
{
set $rule "${rule}1"; # 01
}
if ($http_user_agent ~ 'ie6|firefox')
{
set $rule "${rule}2"; #02
}
if ($rule = "012")
{
rewrite /(.
) /abc/$1 redirect;
}
}

相关内容

热门资讯

终于了解“微乐三打一.可以开挂... 家人们!今天小编来为大家解答微乐三打一透视挂怎么安装这个问题咨询软件客服徽4282891的挂在哪里买...
【第一财经】“同城游比鸡.究竟... 您好:同城游比鸡这款游戏可以开挂,确实是有挂的,需要了解加客服微信【9784099】很多玩家在这款游...
我来教教您“佛手在线.开挂器?... 我来教教您“佛手在线.开挂器?”太坑了原来有挂您好,佛手在线这个游戏其实有挂的,确实是有挂的,需要了...
【第一资讯】“十三十三水经典比... 有 亲,根据资深记者爆料十三十三水经典比鸡是可以开挂的,确实有挂(咨询软...
今日重磅消息“大富豪app.是... 您好:大富豪app这款游戏可以开挂,确实是有挂的,需要了解加客服微信【4282891】很多玩家在这款...
今日重大通报“爱来掌中宝.有挂... 今日重大通报“爱来掌中宝.有挂吗?”外卦神器下载您好,爱来掌中宝这个游戏其实有挂的,确实是有挂的,需...
玩家最新攻略“皇豪互娱牛牛.辅... 您好:皇豪互娱牛牛这款游戏可以开挂,确实是有挂的,需要了解加客服微信【9752949】很多玩家在这款...
【第一消息】“山西扣点.辅助开... 有 亲,根据资深记者爆料山西扣点是可以开挂的,确实有挂(咨询软件无需打开...
“从羊吃人到房子吃人到AI吃人... 【文/观察者网专栏作者 周德宇】通过“牢A”的出圈,想必今年很多人都了解到了美国西雅图这个城市中,底...
终于明白“棋乐麻将.可以开挂吗... 家人们!今天小编来为大家解答棋乐麻将透视挂怎么安装这个问题咨询软件客服徽9784099的挂在哪里买很...