当前位置 主页 > 服务器问题 > nginx问题汇总 >

    如何将 Nginx 配置为Web服务器的方法(4)

    栏目:nginx问题汇总 时间:2018-09-21 16:32

    以下示例将 rewrite 指令与 return 指令结合使用:

    server { ... rewrite ^(/download/.*)/media/(.*)\..*$ $1/mp3/$2.mp3 last; rewrite ^(/download/.*)/audio/(.*)\..*$ $1/mp3/$2.ra last; return 403; ...}

    诸如 /download/some/media/file 的 URI 被改为 /download/some/mp3/file.mp3 。 由于 last 标志,后续指令(第二个 rewrite 指令和 return 指令)被跳过,但 Nginx 继续以更改后的 URI 处理请求。 类似地,诸如 /download/some/audio/file 的 URI 被替换为/download/some/mp3/file.ra。 如果 URI 不匹配 rewrite 指令,Nginx 将403 错误代码返回给客户端。

    last 与 break的区别是:

    last : 在当前 server 或 location 上下文中停止执行 rewrite 指令,但是 Nginx 继续搜索与重写的URI匹配的 location,并应用新 location 中的任何 rewrite 指令(这意味着 URI 可能再次改变)。 break :停止当前上下文中 rewrite 指令的处理,并取消搜索与新 URI 匹配的 location。 不会执行新 location中的 rewrite 指令。

    附录

    常用正则

    . : 匹配除换行符以外的任意字符 ? : 重复0次或1次 + : 重复1次或更多次 *: 重复0次或更多次 \d :匹配数字 ^ : 匹配字符串的开始 $ : 匹配字符串的结束 {n} : 重复n次 {n,} : 重复n次或更多次 [c] : 匹配单个字符c [a-z]: 匹配a-z小写字母的任意一个

    全局变量

    $args : #这个变量等于请求行中的参数,同$query_string $content_length : 请求头中的Content-length字段。 $content_type : 请求头中的Content-Type字段。 $document_root : 当前请求在root指令中指定的值。 $host : 请求主机头字段,否则为服务器名称。 $http_user_agent : 客户端agent信息 $http_cookie : 客户端cookie信息 $limit_rate : 这个变量可以限制连接速率。 $request_method : 客户端请求的动作,通常为GET或POST。 $remote_addr : 客户端的IP地址。 $remote_port : 客户端的端口。 $remote_user : 已经经过Auth Basic Module验证的用户名。 $request_filename : 当前请求的文件路径,由root或alias指令与URI请求生成。 $scheme : HTTP方法(如http,https)。 $server_protocol : 请求使用的协议,通常是HTTP/1.0或HTTP/1.1。 $server_addr : 服务器地址,在完成一次系统调用后可以确定这个值。 $server_name : 服务器名称。 $server_port : 请求到达服务器的端口号。 $request_uri : 包含请求参数的原始URI,不包含主机名,如:/foo/bar.php?arg=baz。 $uri : 不带请求参数的当前URI,$uri不包含主机名,如/foo/bar.html。 $document_uri : 与$uri相同。

    例如请求:http://localhost:88/test1/test2/test.PHP

    $host:localhost

    $server_port:88

    $request_uri:/test1/test2/test.php

    $document_uri:/test1/test2/test.php

    $document_root:/var/www/html

    $request_filename:/var/www/html/test1/test2/test.php

    IIS7站长之家提示您:这篇文章你看完了!