nginx 发请求地址地址 去掉部分路径 {#articleContentId}
案例1:
例如如果你想将以 "/api" 开头的请求代理转发到 http://127.0.0.1,但去掉 "/api" 部分,你可以使用 Nginx 的 rewrite 指令。以下是相应的配置:
location /api {
# 重写请求,去掉 "/api" 部分
rewrite ^/api(.*)$ $1 break;
# 使用代理转发请求
proxy_pass http://127.0.0.1;
}
案例2:
比如 请求 /aip/v3/upgrade , 代理后为, xx/v3/upgrade
Nginx的rewrite指令_nginx rewrite 'api-CSDN博客
server {
listen 80;
server_name api.leyou.com;
proxy_set_header X-Forwarded-Host $host;
proxy_set_header X-Forwarded-Server $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
# 上传路径的映射
location /api/upload {
proxy_pass http://127.0.0.1:8082;
proxy_connect_timeout 600;
proxy_read_timeout 600;
rewrite "^/api/(.*)$" /$1 break;
}
location / {
proxy_pass http://127.0.0.1:10010;
proxy_connect_timeout 600;
proxy_read_timeout 600;
}
}
首先,我们映射路径是/api/upload,而下面一个映射路径是 / ,根据最长路径匹配原则,/api/upload优先级更高。也就是说,凡是以/api/upload开头的路径,都会被第一个配置处理
proxy_pass:反向代理,这次我们代理到8082端口,也就是upload-service服务
rewrite "^/api/(.*)$" /$1 break,路径重写:
"^/api/(.*)$":匹配路径的正则表达式,用了分组语法,把/api/以后的所有部分当做1组
/$1:重写的目标路径,这里用$1引用前面正则表达式匹配到的分组(组编号从1开始),即/api/后面的所有。这样新的路径就是除去/api/以外的所有,就达到了去除/api前缀的目的
break:指令,常用的有2个,分别是:last、break
last:重写路径结束后,将得到的路径重新进行一次路径匹配
break:重写路径结束后,不再重新匹配路径。
我们这里不能选择last,否则以新的路径/upload/image来匹配,就不会被正确的匹配到8082端口了
案例3:
下面是一个简单的例子,它将所有以/old开头的URL重写为以/new开头的URL:
server {
listen 80;
server_name example.com;
location /old {
rewrite ^/old(.*)$ /new$1 last;
}
location /new {
# 处理新URL的配置
}
}
如果你想要永久重定向(返回状态码301),可以使用permanent标志:
server {
listen 80;
server_name example.com;
location /old {
rewrite ^/old(.*)$ /new$1 permanent;
}
}
$的意思
^ :匹配输入字符串的起始位置
$ :匹配输入字符串的结束位置^ :匹配输入字符串的起始位置
先看一个案例:
rewrite ^/(user_\d)/(\d).html$ https://$host/?$1 permanent;
上面是我写的重写规则,先说$代表的是参数,所以一定是 () 包含的
() : 用于匹配括号之间的内容,通过$1、$2调用
$1 就是 user_\d
$2 就是 \d
正则表达式汇总 nginx :连接
举个例子
https://www.example.com/user_1/2.html
这里$1 就是 user_1
$2就是2