返回顶部
首页 > 资讯 > 前端开发 > VUE >Nginx怎么配置location与rewrite规则
  • 149
分享到

Nginx怎么配置location与rewrite规则

2024-04-02 19:04:59 149人浏览 八月长安
摘要

这篇文章主要讲解了“Nginx怎么配置location与rewrite规则”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Nginx怎么配置location与

这篇文章主要讲解了“Nginx怎么配置location与rewrite规则”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Nginx怎么配置location与rewrite规则”吧!

location教程

示例:

location = / {
     # 精确匹配 /,主机名后面不能带任何字符串
     [ configuration A ]  
}

location / {
     # 因为所有的地址都以/开头,所有这条规则将匹配到所有请求
     # 但是正则和最长字符串会优先匹配
     [ configuration B ]
}

location /documents/ {
     # 匹配任何以/documents/开头的地址,匹配符合以后,还要继续往下搜索
     # 只有后面的正则表达式没有匹配到时,这一条才会采用
     [ configuration C ]
}

location ~ /documents/Abc {
     # 匹配任何以 /documents/开头的地址,匹配符合以后,还要继续往下搜索
     # 只有后面的正则表达式没有匹配到时,才会采用这一条  
     [ configuration CC ]
}

location ^~ /images/ {
     # 匹配任何以/images/开头的地址,匹配符合以后,停止往下搜索正则,采用这一条
     [ configuration D ]
}

location ~* \.(gif|jpg|jpeg)$ {
     # 匹配所有以gif,jpg或jpeg结尾的请求
     # 然而,苏朋友请求/images/下的图片会被config D处理,因为^~到达不了这一正则
     [ configuration E ]
}

location /images/ {
     # 字符匹配到 /images/,继续往下,会发现^~存在
     [ configuration F ]
}

location /images/abc {
     # 最长字符匹配到/images/abc,继续往下,会发现^~存在
     # F与G的放置顺序是没有关系的
     [ configuration G ]
}

location ~ /images/abc/ {
     # 只有去掉config D才有效:先最长匹配config G开头的地址,继续往下搜索,匹配到这一正则,采用
     [ configuration H ]
}

location ~* /js/.*/\.js
  • 以=开头表示精确匹配。如A中只匹配根目录结尾的请求,后面不能带任何字符串。

  • ^~开头表示uri以某个常规字符串开头,不是正则匹配

  • ~开头表示区分大小写的正则匹配

  • ~*开头表示不区分大小写的正则匹配

  • /通用匹配,如果没有其它匹配,任何请求都会匹配到

顺序 && 优先级

(location =)> (location 完整路径) > (location ^~路径) > (location ~,~*正则顺序) > (location 部分起始路径) > (/)

实际使用建议

#至少有三个匹配规则定义,如下:

#直接匹配网站根,通过域名访问网站首页比较频繁,使用这个会加速处理

#直接转发给后端应用服务器,也可以是一个静态首页

# 第一个必选规则

location = / {
     proxy_pass Http://Tomcat:8080/index
}

# 第二个必选规则是处理静态文件请求,nginx作为http服务器的强项

# 有两种配置模式,目录匹配或后缀匹配,任选其一或搭配使用

location ^~ /static/ {
     root /WEBroot/static/;
}

location ~* \.(gif|jpg|jpeg|png|CSS|js|ico)$ {
     root /webroot/res/;
}

# 第三个规则是通用规则,用来转发动态请求道后端应用服务器

location / {
     proxy_pass http://tomcat:8080/
}

Rewrite教程

功能:使用nginx提供的全局变量或自己设置的变量,结合正则表达式和标志位实现url重写以及重定向。rewrite只能放在server{},location{},if{}中,并且只能对域名后边的除去传递参数外的字符串起作用,例如http://seanlook.com/a/we/index.PHP?id=1&u=str只对/a/we/index.php重写

语法:rewrite regex replacement [flag];

如果想对域名或参数字符串起作用,可以使用全局变量匹配,也可以使用proxy_pass反向代理。

rewrite和location异同:同:都能实现跳转;异:rewrite是在同一域名内更改获取资源的路径,而location是对另一类路径做控制访问或反向代理,可以proxy_pass到其他机器。

执行顺序:

  • server块的rewrite指令

  • location匹配

  • 选定location中的rewrite指令,如果其中某步url被重写,则重写循环执行1-3,直到找到真是存在的文件;循环超过10次,则返回500 Internal Server Error错误

flag标志位
  • last:相当于Apache的[L]标记,表示完成rewrite

  • break:停止执行当前虚拟主机的后续rewrite指令集

  • redirect:返回302临时重定向,地址栏会显示跳转后的地址

  • permanent:返回301永久重定向,地址栏会显示跳转后的地址

因为301和302不能简单的只返回状态码,还必须有重定向的URL,这就是return指令无法返回301,302的原因

last和break的异同:

  • last一般写在server和if中,而break一般使用在location中

  • last不终止重写后的url匹配,即新的url会再从server走一遍匹配流程,而break终止重写后的匹配

  • break和last都能组织继续执行后面的rewrite指令

if指令与全局变量
if判断指令

语法:if(condition){...},对给定的条件condition进行判断。如果为真,大括号内的rewrite指令将被执行,if条件(condition)可以是如下任何内容:

当表达式只是一个变量时,如果值为空或任何以0开头的字符串都会当做false

直接比较变量和内容是,使用=或!=

~ 正则表达式匹配,~* 不区分大小写的匹配,!~ 区分大小写的不匹配

  • -f  和!-f 用来判断是否存在文件

  • -d 和 !-d 用来判断是否存在目录

  • -e 和 !-e 用来判断是否存在文件或目录

  • -x 和 !-x 用来判断文件是否可以执行

例如:

if ($http_user_agent ~ MSIE) {
     rewrite ^(.*)$ /msie/$1 break;
} #如果UA包含”MSIE“,rewrite请求到/msie/目录下

if ($http_cookie ~* "id=([^;]+)(?:;|$)") {
    set $id $1;
} #如果cookie匹配正则,设置变量$id等于正则引用部分

if ($request_method =POST) {
    return 405;
} #如果提及方法为POST,则返回状态405(Method not allowed)。return不能返回301,302

if ($slow) {
    limit_rate 10k;
} #限速,$slow可以通过set指令设置

if (!-f $request_filename){
    break;
    proxy_pass  http://127.0.01;
} #如果请求的文件名不存在,则反向代理到localhost。这里的break也是停止rewrite检查

if ($args ~ post=140){
    rewrite ^ http://example.com/ permanent;
} # 如果query string中包含”post=140“,永久重定向到example.com

location ~* \.(gif|jpg|png|swf|flv)$ {
      valid_referers none blocked www.jefflei.com www.leizhenfang.com;
      if ($invalid_referer) {
          return 404;
      } #防盗链
}

全局变量

下面是可用作if判断的全局变量

  • $args: 这个变量等于请求行中的参数,同$query_string

  • $content_length : 请求头中的Conten-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指令与URL请求生成

  • $scheme:HTTP方法(如http,https

  • $server_protocol:请求使用的协议,通常是HTTP/1.0或HTTP/1.1

  • $server_addr:服务器地址,在完成一次系统调用后可以确定这个值

  • $server_name:服务器名称

  • $server_port:请求到达服务器的端口号

  • $request_url:包含请求参数的原始url,不包含主机名,如“/foo/bar.php?arg=baz”

  • $url:不带请求参数的当前url,$url不包含主机名,如“/foo/bar.html

  • $document_url:与$url相同

示例:http://localhost:88/test1/test2/test.php

$host:localhost

$server_port:88

$request_url:http://localhost:88/test1/test2/test.php

$document_url:/test1/test2/test.php

$document_root:/var/www/html

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

常用正则
  • .:匹配除换行符以外的任意字符

  • ?:重复0次或1次

  • +:重复1次或更多次

  • *:重复1次或更多次

  • \d:匹配数字

  • ^:匹配字符串的开始

  • $:匹配字符的结尾

  • {n}:重复n次

  • {n,}:重复n次或更多次

  • [c]:匹配单个字符c

  • [a-z]:匹配a-z小写字母的任意一个小括号()之间匹配的内容,可以再后面通过$1来引用,$2表示的前面第二个()里的内容。正则中容易让人困惑的是\转义特殊字符

rewrite实例

例1:

http {     
     # 定义image日志格式
     log_fORMat imagelog '[$time_local] ' $image_file ' ' $image_type ' ' $body_bytes_sent ' ' $status;
     # 开启重写日志
     rewrite_log on;

     server {
           root /home/www;
  
           location / {
                   # 重写规则信息
                   error_log logs/rewrite.log notice;
                   # 注意这里要用''单引号引起来,避免{}
                   rewrite '^/images/([a-z]{2})/([a-z0-9]{5})/(.*)\.(png|jpg|gif)$' /data?file=$3.$4;
                   # 注意不能在上面这条规则后面加上”last“参数,否则下面的set指令不会执行
                   set $image_file $3;
                   set $image_type $4;
           }
           location /data {
                   # 指定针对图片的日志格式,来分析图片类型和大小
                   access_log logs/images.log main;
                   root /data/images;
                   # 应用前面定义的变量。首先判断文件在不在,不在再判断目录在不在,如果也不在酒跳转到最后一个url里
                   try_files /$arg_file /image404.html;
           }
           location = /image404.html {
                   # 图片不存在返回特定的信息
                   return 404 "image not found\n";
           }
}

对形如/images/ef/uh7b3/test.png的请求,重写到/data?file=test.png,于是匹配到location /data ,先看/data/images/test.png 文件存不存在,如果存在则正常响应,如果不存在则重写tryfiles到新的image404 location,直接返回404状态码。

例2:

rewrite ^/images/(.*)_(\d+)x(\d+)\.(png|jpg|gif)$ /resizer/$1.$4?width=$2&height=$3? last;

对形如/images/bla_500x400.jpg的文件请求,重写到/resizer/bla.jpg?width=500&height=400地址,并会继续尝试匹配location

感谢各位的阅读,以上就是“Nginx怎么配置location与rewrite规则”的内容了,经过本文的学习后,相信大家对Nginx怎么配置location与rewrite规则这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是编程网,小编将为大家推送更多相关知识点的文章,欢迎关注!

--结束END--

本文标题: Nginx怎么配置location与rewrite规则

本文链接: https://lsjlt.com/news/95600.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • Nginx怎么配置location与rewrite规则
    这篇文章主要讲解了“Nginx怎么配置location与rewrite规则”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Nginx怎么配置location与...
    99+
    2024-04-02
  • nginx多location怎么配置
    本文小编为大家详细介绍“nginx多location怎么配置”,内容详细,步骤清晰,细节处理妥当,希望这篇“nginx多location怎么配置”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。前言nginx ser...
    99+
    2023-07-06
  • Nginx——SeverName配置规则
    摘要 Nginx作为一个服务器,具有众多转发规则。工作中用到使用Nginx配置一个端口下多个路径转发到html下不同目录。目前知道的有三种方法可以实现,分别是使用root+location、alias、try_files。 一、同一端口的路...
    99+
    2023-09-02
    nginx 运维 服务器
  • Nginx反向代理location和proxy_pass配置规则详细总结
    目录一、location配置规则1.匹配模式及顺序举例2.location 是否以“/”结尾二、proxy_pass配置规则补充:Nginx配置proxy_p...
    99+
    2024-04-02
  • Nginx的location功能怎么配置
    本篇内容介绍了“Nginx的location功能怎么配置”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!Nginx location 1.1....
    99+
    2023-06-29
  • js Location对象的匹配规则是什么
    在JavaScript中,`Location`对象用于表示当前页面的URL。匹配规则是根据URL的各个部分进行匹配。`Locatio...
    99+
    2023-10-12
    js
  • nginx伪静态规则如何配置
    要配置nginx的伪静态规则,可以在nginx的配置文件中使用location指令来实现。例如,如果你想要将所有以.html结尾的U...
    99+
    2023-08-15
    nginx
  • 怎么在nginx中使用rewrite 配置伪静态
    本篇文章为大家展示了怎么在nginx中使用rewrite 配置伪静态,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。正则表达式匹配,其中: * ~ 为区分大小写匹配 * ~* 为不...
    99+
    2023-06-08
  • Nginx如何实现URL重写规则配置
    这篇文章主要介绍了Nginx如何实现URL重写规则配置,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。rewrite模块介绍nginx的重写模块是一个简单的正则表达式匹配与一个...
    99+
    2023-06-04
  • Nginx路径匹配规则是什么
    本篇内容介绍了“Nginx路径匹配规则是什么”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!1.路径配置的分类在nginx中,一共有4种不同的...
    99+
    2023-07-05
  • prometheus怎么配置告警规则
    要配置Prometheus的告警规则,需要编辑Prometheus的配置文件(通常是prometheus.yml),并在其中定义告警...
    99+
    2024-03-14
    prometheus
  • 怎么实现Nginx路由转发和反向代理location配置
    这篇文章主要讲解了“怎么实现Nginx路由转发和反向代理location配置”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“怎么实现Nginx路由转发和反向代理location配置”吧!Ngi...
    99+
    2023-06-25
  • nginx伪静态规则怎么定义
    这篇文章主要介绍了nginx伪静态规则怎么定义的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇nginx伪静态规则怎么定义文章都会有所收获,下面我们一起来看看吧。 1、ngin...
    99+
    2024-04-02
  • Ubuntu中Nginx怎么安装与配置
    本篇内容主要讲解“Ubuntu中Nginx怎么安装与配置”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Ubuntu中Nginx怎么安装与配置”吧!1.nginx...
    99+
    2024-04-02
  • Nginx怎么配置
    这篇文章给大家分享的是有关Nginx怎么配置的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。匹配到F,往下匹配到D,停止往下/images/abc/def -> config D最长匹配到G,往下匹配D,停止...
    99+
    2023-06-04
  • Docker nginx怎么安装与配置挂载
    这篇“Docker nginx怎么安装与配置挂载”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这...
    99+
    2024-04-02
  • windows防火墙入站规则端口怎么配置
    要配置Windows防火墙的入站规则端口,可以按照以下步骤进行操作: 打开“控制面板”,并点击“系统和安全”。 在“Windows...
    99+
    2023-10-26
    windows
  • 怎么安装与配置Nginx+MySQL+PHP环境
    这篇“怎么安装与配置Nginx+MySQL+PHP环境”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来...
    99+
    2024-04-02
  • Laradock中Laravel Octane与WebSocket的nginx怎么配置
    今天小编给大家分享一下Laradock中Laravel Octane与WebSocket的nginx怎么配置的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收...
    99+
    2023-07-05
  • wireshark过滤规则怎么设置
    要设置Wireshark的过滤规则,可以按照以下步骤进行操作:1. 打开Wireshark软件。2. 在“捕获”选项卡中选择要监视的...
    99+
    2023-09-20
    wireshark
软考高级职称资格查询
推荐阅读
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作