nginx配置文件中location的写法

本文详细介绍了Nginx的基本配置方法,包括Location语法及其匹配规则、ReWrite与Redirect语法的应用等,并提供了多个实用配置示例。
Nginx Location 语法,与简单配置
一、介绍Nginx是俄罗斯人编写的十分轻量级的HTTP服务器,Nginx,它的发音为“engine X”, 是一个高性能的HTTP和反向代理服务器,同时也是一个IMAP/POP3/SMTP 代理服务器.
二、Location语法语法:location [=|~|~*|^~] /uri/ { … }
注:
1、~ 为区分大小写匹配
2、~* 为不区分大小写匹配
3、!~和!~*分别为区分大小写不匹配及不区分大小写不匹配
示例一:
location / { }
匹配任何查询,因为所有请求都以 / 开头。但是正则表达式规则将被优先和查询匹配。
示例二:
location =/ {}
仅仅匹配/
示例三:
location ~* \.(gif|jpg|jpeg)$ {
rewrite \.(gif|jpg)$ /logo.png;

注:不区分大小写匹配任何以gif,jpg,jpeg结尾的文件
三、ReWrite语法
last - 基本上都用这个Flag。
break - 中止Rewirte,不在继续匹配
redirect - 返回临时重定向的HTTP状态302
permanent - 返回永久重定向的HTTP状态301
1、下面是可以用来判断的表达式:
-f和!-f用来判断是否存在文件
-d和!-d用来判断是否存在目录
-e和!-e用来判断是否存在文件或目录
-x和!-x用来判断文件是否可执行
2、下面是可以用作判断的全局变量
例:http://localhost:88/test1/test2/test.php
$host:localhost
$server_port:88
$request_uri:http://localhost:88/test1/test2/test.php
$document_uri:/test1/test2/test.php
$document_root:D:\nginx/html
$request_filename:D:\nginx/html/test1/test2/test.php
四、Redirect语法
server {
listen 80;
server_name start.igrow.cn;
index index.html index.php;
root html;
if ($http_host !~ "^star\.igrow\.cn$&quot {
rewrite ^(.*) http://star.igrow.cn$1 redirect;
}
}
五、防盗链location ~* \.(gif|jpg|swf)$ {
valid_referers none blocked start.igrow.cn sta.igrow.cn;
if ($invalid_referer) {
rewrite ^/ http://$host/logo.png;
}
}
六、根据文件类型设置过期时间
location ~* \.(js|css|jpg|jpeg|gif|png|swf)$ {
if (-f $request_filename) {
expires 1h;
break;
}
}
七、禁止访问某个目录
location ~* \.(txt|doc)${
root /data/www/wwwroot/linuxtone/test;
deny all;
}

转:http://www.phpchina.com/html/70/t-162870.html,http://idev.yo2.cn/go/19761.html
Nginx 配置文件中,`location /api/` 是一个 **用于匹配客户端请求 URI 的指令块**,它定义了所有以 `/api/` 开头的请求应该如何被处理。 --- ## ✅ `location /api/` 的基本含义 ```nginx location /api/ { # 这里的配置只对路径以 `/api/` 开头的请求生效 } ``` ### 🔍 示例说明: | 请求 URL | 是否匹配 `location /api/` | |--------|--------------------------| | `http://example.com/api/user` | ✅ 匹配 | | `http://example.com/api/v1/login` | ✅ 匹配 | | `http://example.com/api/` | ✅ 匹配 | | `http://example.com/apix` | ❌ 不匹配(不是 `/api/` 前缀) | | `http://example.com/admin/api/data` | ❌ 不匹配(前缀是 `/admin/`) | > 注意:`/api/` 后面有斜杠 `/`,所以它匹配的是 **以 `/api/` 为前缀的路径**,包括子路径。 --- ## 🧩 常见用途(典型场景) 通常 `/api/` 路径用于代理后端接口服务(如 Spring Boot、Node.js、Python 等),例如: ```nginx server { listen 80; server_name example.com; # 所有以 /api/ 开头的请求都转发到本地 8080 端口的服务 location /api/ { proxy_pass http://localhost:8080/; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; } # 其他静态资源或前端页面 location / { root /usr/share/nginx/html; index index.html; try_files $uri $uri/ /index.html; } } ``` ### 💡 解释: - 用户访问 `http://example.com/api/user` → Nginx 将其转发到 `http://localhost:8080/user` - 即:`/api/` 被替换为 `http://localhost:8080/` 后的新路径 #### ⚠️ 转发规则细节: ```nginx location /api/ { proxy_pass http://backend/; } ``` - 请求 `/api/v1/users` → 实际转发到 `http://backend/v1/users` - `proxy_pass` 后面是否有结尾 `/` 很关键! --- ## 🔍 `location` 匹配规则详解 Nginx 的 `location` 支持多种匹配方式,优先级如下: | 语法 | 含义 | 优先级 | |------|------|--------| | `location /api/` | 前缀匹配(普通) | 低 | | `location ^~ /api/` | 前缀匹配(精确前缀,不继续正则) | 中 | | `location ~ /api/[0-9]+` | 正则匹配(区分大小写) | 高 | | `location ~* /API/` | 正则匹配(不区分大小写) | 高 | ### 示例对比: ```nginx location /api/ { return 200 "Normal prefix match"; } location ^~ /api/admin { return 200 "High priority prefix"; } location ~ /api/\d+ { return 200 "Regex match for numbers"; } ``` - `/api/123` → 匹配正则 `~ /api/\d+` - `/api/admin/settings` → 匹配 `^~ /api/admin`(因为 `^~` 优先于正则) - `/api/user` → 匹配 `/api/` --- ## 🛠 实际应用建议 ### ✅ 推荐写法(带严格控制): ```nginx location /api/ { # 防止恶意大请求 client_max_body_size 10M; # 设置超时 proxy_connect_timeout 30s; proxy_send_timeout 60s; proxy_read_timeout 60s; # 代理设置 proxy_pass http://127.0.0.1:8080/; # 注意结尾斜杠 proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; # 可选:仅允许特定方法 # limit_except GET POST { deny all; } } ``` --- ## 📌 常见误区 | 错误写法 | 问题描述 | |--------|---------| | `location /api`(无末尾 `/`) | 会匹配 `/api`, `/apixyz` 等,可能导致意外行为 | | `proxy_pass http://backend;`(无 `/`) | 路径拼接错误,可能丢失路径信息 | | 忽略 `proxy_set_header` | 后端无法获取真实 IP 和协议 | --- ## ✅ 总结 `location /api/` 表示: > “所有以 `/api/` 开头的 HTTP 请求路径,交由这个 block 处理”。 它常用于: - 反向代理 API 接口服务 - 统一鉴权、限流、日志记录 - 分离前后端路由(如前端 SPA + 后端 API) --- ###
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值