Nginx URI匹配规则

本文介绍了一种使用Nginx进行高效的HTTP请求路由配置的方法。通过具体的例子展示了如何利用精确匹配和正则表达式来转发请求到后端服务器。这不仅有助于理解Nginx的工作原理,还能学习到如何灵活地配置Nginx以满足复杂的应用场景。

server {
        listen       80;
        server_name  kevin.com;
        access_log  logs/book_access.log;
        error_log   logs/book_error.log;

        #精确匹配
        #访问事例:http://kevin.com/mr/?name=kevin&age=18&man=1
        #实际获取参数为:{age=18, name=kevin, code=kevin, man=1} 
        location = /mr/ {
            #proxy_set_header Host $host;
            #proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_pass http://dev1/admin/doc/show.jsp?code=kevin&$args;
        }

        #正则
        #访问事例:http://kevin.com/api/mr/00/kevin.do?name=kebi
        #实际获取参数为:{name=kebi, code=00} 
        location ~ /api/mr/([0-9]+)/kevin.do$ {
            #proxy_set_header Host $host;
            #proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_pass http://dev1/admin/doc/show.jsp?code=$1&$args;
        }
    }
Nginx 中,URI 配置主要用于定义如何处理客户端请求,包括路径匹配、重定向、代理转发等操作。URI 配置主要通过 `location` 指令实现,它允许根据请求的 URI 来选择不同的处理逻辑。 ### URI 配置的基本语法 `location` 指令的语法如下: ```nginx location [modifier] uri { # 配置内容 } ``` 其中,`modifier` 是可选的匹配修饰符,用于定义 URI 匹配的类型,如精确匹配、前缀匹配、正则表达式匹配等。 #### 匹配类型 1. **无修饰符**:表示前缀匹配。例如,`location /images/` 会匹配所有以 `/images/` 开头的 URI。 2. **=**:表示精确匹配。例如,`location = /index.html` 只匹配 `/index.html`,不匹配 `/index.php` 或其他路径。 3. **~**:表示区分大小写的正则表达式匹配。例如,`location ~ ^/user/\d+$` 匹配 `/user/123`。 4. **~***:表示不区分大小写的正则表达式匹配。例如,`location ~* \.(jpg|jpeg)$` 匹配 `.jpg` 和 `.JPG` 文件。 5. **^~**:表示前缀匹配,但优先于正则表达式匹配。例如,`location ^~ /static/` 会优先匹配 `/static/` 路径[^2]。 ### URI 匹配顺序 Nginx匹配 `location` 时遵循以下顺序: 1. 精确匹配(`=`)。 2. 前缀匹配(`^~`)。 3. 正则表达式匹配(`~` 或 `~*`)。 4. 普通前缀匹配(无修饰符)。 如果多个 `location` 匹配成功,Nginx 会优先选择优先级最高的规则。 ### URI 重写与重定向 Nginx 支持通过 `rewrite` 指令对 URI 进行重写或重定向。`rewrite` 指令的基本语法如下: ```nginx rewrite regex replacement [flag]; ``` - `regex` 是一个正则表达式,用于匹配请求的 URI。 - `replacement` 是新的 URI 或路径。 - `flag` 是可选标志,如 `last`、`break`、`redirect`、`permanent` 等。 例如,以下配置将 `/old-page` 重定向到 `/new-page`: ```nginx rewrite ^/old-page$ /new-page permanent; ``` ### 示例配置 以下是一个典型的 `location` 配置示例: ```nginx server { listen 80; server_name example.com; location / { root /var/www/html; index index.html; } location /api/ { proxy_pass http://backend_server; } location ~ \.php$ { include snippets/fastcgi-php.conf; fastcgi_pass unix:/run/php/php7.4-fpm.sock; } } ``` 在这个配置中: - `location /` 处理根请求,使用 `/var/www/html` 作为文档根目录。 - `location /api/` 将所有 `/api/` 路径的请求代理到后端服务器。 - `location ~ \.php$` 处理 PHP 文件请求,使用 FastCGI 处理 PHP 脚本[^2]。 ### URI 与变量的使用 Nginx 支持在配置中使用变量,变量可以通过 `$` 符号引用。例如,`$uri` 变量表示当前请求的 URI,`$args` 表示请求的参数。 以下是一个使用变量的示例: ```nginx location /redirect { set $target http://example.com; rewrite ^/redirect/(.*)$ $target/$1 permanent; } ``` 在这个配置中,`set` 指令定义了一个变量 `$target`,`rewrite` 指令将 `/redirect/path` 重定向到 `http://example.com/path`[^2]。 ### 总结 NginxURI 配置通过 `location` 指令实现,支持多种匹配类型和重写规则。通过灵活的配置,可以实现路径匹配、重定向、代理转发等功能。 ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

半山猿

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值