Nginx核心配置文件nginx.conf:Rewrite功能;Rewrite的相关命令;Rewrite的应用场景;set指令;常用全局变量;if指令;break指令;return指令;rewrite指令;rewrite_log指令;Rewrite的案例

Rewrite功能配置

复制代码
Rewrite功能;Rewrite的相关命令;Rewrite的应用场景
===========================================================================================
Rewrite是Nginx服务器提供的一个重要基本功能,主要的作用是用来实现URL的重写。
Nginx服务器的Rewrite功能的实现依赖于PCRE的支持,因此在编译安装Nginx服务器之前,需要安装PCRE库。Nginx使用的是ngx_http_rewrite_module模块来解析和处理Rewrite功能的相关配置。

---------------------------------------------------------------------------------------------
Rewrite的相关命令
    set指令
    if指令
    break指令
    return指令
    rewrite指令
    rewrite_log指令

Rewrite的应用场景
    域名跳转
    域名镜像
    独立域名
    目录自动添加"/"
    合并目录
    防盗链的实现
Rewrite功能;Rewrite的相关命令;Rewrite的应用场景
复制代码

 

复制代码
set指令;常用全局变量;if指令;break指令;return指令;rewrite指令;rewrite_log指令;Rewrite的案例
=================================================================================================
set指令:该指令用来设置一个新的变量。
    语法      set $variable value;
    默认值    —
    位置      server、location、if

    变量                    说明
    $args                    请求中的参数,如[www.123.com/1.php?a=1&b=2的KaTeX parse error: Expected 'EOF', got '&' at position 10: args就是a=1&̲b=2](http://www…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的KaTeX parse error: Expected 'EOF', got '&' at position 50: …3.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可以指定

---------------------------------------------------------------------------------------------
if指令:该指令用来支持条件判断,并根据条件判断结果选择不同的Nginx配置。
    语法      if (condition){...}
    默认值    —
    位置      server、location

    condition为判定条件,可以支持以下写法:
    1. 变量名。如果变量名对应的值为空字符串或"0",if都判断为false,其他条件为true。
    2. 使用"=""!="比较变量和字符串是否相等,满足条件为true,不满足为false
    3. 使用正则表达式对变量进行匹配,匹配成功返回true,否则返回false。变量与正则表达式之间使用"~","~*","!~","!~*"来连接。
        "~"代表匹配正则表达式过程中区分大小写,
        "~*"代表匹配正则表达式过程中不区分大小写
        "!~""!~*"刚好和上面取相反值,如果匹配上返回false,匹配不上返回true

    4. 判断请求的文件是否存在使用"-f""!-f",
    5. 判断请求的目录是否存在使用"-d""!-d"
    6. 判断请求的目录或者文件是否存在使用"-e""!-e"
    7. 判断请求的文件是否可执行使用"-x""!-x"

---------------------------------------------------------------------------------------------
break指令:该指令用于中断当前相同作用域中的其他Nginx配置。与该指令处于同一作用域的Nginx配置中,位于它前面的指令配置生效,位于后面的指令配置无效。并且break还有另外一个功能就是终止当前的匹配并把当前的URI在本location进行重定向访问处理。
    语法      break;
    默认值    —
    位置      server、location、if

---------------------------------------------------------------------------------------------
return指令:该指令用于完成对请求的处理,直接向客户端返回。在return后的所有Nginx配置都是无效的。
    语法1     return code [text];
    语法2     return code URL;
    语法3     return URL;
    默认值    —
    位置      server、location、if

    code:为返回给客户端的HTTP状态代理。可以返回的状态代码为0~999的任意HTTP状态代理
    text:为返回给客户端的响应体内容,支持变量的使用
    URL:为返回给客户端的URL地址

---------------------------------------------------------------------------------------------
rewrite指令:该指令通过正则表达式的使用来改变URI。可以同时存在一个或者多个指令,按照顺序依次对URL进行匹配和处理。
    语法      rewrite regex replacement [flag];
    默认值    —
    位置      server、location、if

    regex:用来匹配URI的正则表达式
    replacement:匹配成功后,用于替换URI中被截取内容的字符串。如果该字符串是以"http://"或者"https://"开头的,则不会继续向下对URI进行其他处理,而是直接返回重写后的URI给客户端。
    flag:用来设置rewrite对URI的处理行为,可选值有如下:
        last:终止继续在本location块中处理接收到的URI,并将此处重写的URI作为一个新的URI,使用各location块进行处理。该标志将重写后的URI重写在server块中执行,为重写后的URI提供了转入到其他location块的机会。
        break:将此处重写的URI作为一个新的URI,在本块中继续进行处理。该标志将重写后的地址在当前的location块中执行,不会将新的URI转向其他的location块。
        redirect:将重写后的URI返回给客户端,状态码为302,指明是临时重定向URI,主要用在replacement变量不是以"http://"或者"https://"开头的情况。
        permanent:将重写后的URI返回给客户端,状态码为301,指明是永久重定向URI,主要用在replacement变量不是以"http://"或者"https://"开头的情况。

---------------------------------------------------------------------------------------------
rewrite_log指令:该指令配置是否开启URL重写日志的输出功能。
    语法      rewrite_log on|off;
    默认值    rewrite_log off;
    位置      http、server、location、if


---------------------------------------------------------------------------------------------
Rewrite的案例详见《Nginx_day03.pdf》
set指令;常用全局变量;if指令;break指令;return指令;rewrite指令;rewrite_log指令;Rewrite的案例
复制代码

 

posted @   雲淡風輕333  阅读(110)  评论(0编辑  收藏  举报
(评论功能已被禁用)
相关博文:
阅读排行:
· DeepSeek “源神”启动!「GitHub 热点速览」
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· C# 集成 DeepSeek 模型实现 AI 私有化(本地部署与 API 调用教程)
· DeepSeek R1 简明指南:架构、训练、本地部署及硬件要求
· NetPad:一个.NET开源、跨平台的C#编辑器
点击右上角即可分享
微信分享提示