学习Nginx(八):rewrite、if、set

高分请问一下,学习Nginx(八):rewrite、if、set
最新回答
我不会写诗

2024-11-24 06:05:19

实现URL地址的重写与跳转。

rewrite指令可以在 server、location 和 if 上下文中使用。

将 /old-url/ 重写为 /new-url/ :

注意:虽然上面的示例使用了 if 指令,但通常尽可能避免在 nginx 配置中使用 if,因为它可能会导致性能问题。更好的方法可能是使用 try_files 指令或其他方法。

防止目录列表:

如果你不希望用户能够列出目录的内容,你可以使用 rewrite 指令来重定向到一个错误页面或另一个 URI:

官方说明: nginx.org/en/docs/http/...

根据特定的条件来执行相应的配重块。

if 指令在 server 和 location 上下文使用。

当请求的User-Agent头包含MSIE(Internet Explorer的旧版本)时,Nginx 会将请求重写为 /msie/ 加上原始请求的路径,并停止处理后续的重写规则(break标志)。

使用正则表达式从Cookie头中提取id的值。如果Cookie中包含形如id=some_value;或id=some_value的片段,那么变量$id将被设置为some_value。

如果请求的方法是 POST,Nginx 将返回405状态码(方法不允许)。这通常用于确保某个位置或服务器仅支持 GET 或其他 HTTP 方法,而不支持 POST。

如果变量 $slow 为真(需要在其他地方定义或根据其他条件设置),Nginx 将限制发送到客户端的响应速度为每秒10KB。用于防止在慢速连接上发送大量数据,或在某些条件下有意地限制带宽。

如果变量 $invalid_referer 为真(表示请求的 Referer 头无效或不存在,或者不符合某些预期的模式),Nginx 将返回 403 状态码(禁止访问)。常用于防止热链接、保护资源或实施其他基于 Referer 的访问控制策略。

用于设置变量。

set 指令 只能在 server 上下文中使用。

如果请求的 User-Agent 头包含 MSIE,则 $user_agent 变量将被设置为 "msie",否则它将保持为空字符串。然后,这个变量的值将被包含在返回的响应体中。