欢迎您访问 最编程 本站为您分享编程语言代码,编程技术文章!
您现在的位置是: 首页

nginx反向代理替换URL

最编程 2024-07-11 20:17:08
...

nginx提供反向代理服务,日常开发过程中有时候我们需要使用nginx作为代理服务根据url的不同去访问不同的服务器或者不同端口,如下提供两种方案。

1.直接替换location匹配部分

a.proxy_pass的目标地址,默认不带/,表示只代理域名,url和参数部分不会变(把请求的path拼接到proxy_pass目标域名之后作为代理的URL)

例如:​​http://localhost/api/tree​

把/api/tree拼接到proxy_pass地址的localhost:8081之后

实际代理的目标url是​​https://www.shopping.com/api/api/tree​

  server {
listen 8081;
server_name localhost;
location /api {
proxy_pass https://www.shopping.com/api;
}
}

b.如果在目标地址后增加/,则表示把path中location匹配成功的部分剪切掉之后再拼接到proxy_pass目标地址

例如:​​http://localhost/tree​

把/api/tree去掉匹配到的location /api拼接到proxy_pass 地址的localhost:8081之后

实际代理的目标url是​​https://www.shopping.com/api/tree​

# proxy_pass  以/结尾
server {
listen 8081;
server_name localhost;
location /api {
proxy_pass https://www.shopping.com/api/;
}
}

2.使用nginx的rewrite模块

rewrite是实现URL重写的关键指令,根据regex(正则表达式)部分内容,重定向到replacement,结尾是flag标记。

格式
rewrite <regex> <replacement> [flag];

关键字 正则 替代内容 flag标记

关键字:其中关键字error_log不能改变
正则:perl兼容正则表达式语句进行规则匹配
替代内容:将正则匹配的内容替换成replacement
flag标记:rewrite支持的flag标记

flag标记说明:

last #本条规则匹配完成后,继续向下匹配新的location URI规则
break #本条规则匹配完成即终止,不再匹配后面的任何规则
redirect #返回302临时重定向,浏览器地址会显示跳转后的URL地址
permanent #返回301永久重定向,浏览器地址栏会显示跳转后的URL地址

例子:

把到本服务的所有请求转发到www.shopping.com
rewrite ^/(.*) ​​​http://www.shopping.com/$1​​ break;

把到本服务器的所有请求路径中以/api开头的请求 替换成不带api的,例如http://localhost/api/tree ,匹配后地址变成 ​​http://www.shopping.com/tree​​ rewrite ^/api/(.*) /$1 break;

说明:

rewrite为固定关键字,表示开始进行rewrite匹配规则

regex部分是 ^/(.*) ,这是一个正则表达式,匹配完整的域名和后面的路径地址

replacement部分是http://www.shopping.com/$1 $1是取自regex部分()里的内容。匹配成功后跳转到的URL。

flag部分 break表示停止匹配,然后跳转到新的 ​​http://www.shopping.com/$1​​ 地址上。

例如前面加'/'与不加'/'的问题,不加'/'的话,我们就可以用这个rewrite来替代。

访问​​http://localhost:8081/api/pen​​​,实际访问就是​​http://www.shopping.com/pen​

server {
listen 8081;
server_name localhost;
#charset koi8-r;
#access_log logs/host.access.log main;
location /api{
proxy_pass http://www.shopping.com;
rewrite ^/api/(.*) /$1 break;
}
}

箴言:因为这些东西是非常简单的。不要抱怨自己学不会,那是因为你没有足够用心。



推荐阅读