千家信息网

nginx全局变量及rewrite实战

发表于:2025-12-02 作者:千家信息网编辑
千家信息网最后更新 2025年12月02日,Rwrite相关全局变量coding.net/u/aminglinux/p/nginx/git/blob/master/rewrite/variable.mdRwrite实战coding.net/u/
千家信息网最后更新 2025年12月02日nginx全局变量及rewrite实战

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

示例 客户 常用 服务器 服务 变量 域名 信息 端的 资源 主机 参数 客户端 就是 情况 条件 静态 配置 全局 实战 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 公安部机关网络安全违规 网络安全科普教育手抄报的字 山西erp软件开发诚信企业推荐 有服务器管理员权限 超市管理需要哪些数据库 数据库收缩什么原理 数据库磁盘排序 徐汇区无线网络技术售后保障 洛阳医疗行业软件开发招聘 获取服务器时间并付值 网咖网络安全证 服务器的作用和用途百度知道 my sql数据库入门 江苏语音网络技术服务工程 奇迹暖暖老玩家登哪个服务器 北京德惠众合软件开发 软件开发中测试和开发的占比 数据库 declare 太原服务器回收怎么样 speedtest测速服务器地址 网络安全保卫总队付茂琼 智能掌上办公请配置服务器地址 信阳天气预报软件开发 论文多长时间可以录入网络数据库 美国科技互联网公司排行榜 天津统一软件开发服务创意 上海通信网络技术结构设计 江苏语音网络技术服务工程 psv 代理服务器 公安部网络安全保卫局局长许
0