小知识:关于nginx 反向代理 URL替换方案

目录 1.直接替换location  匹配部分 2.使用nginx 的rewrite 模块  rewrite 企业应用场景

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

1.直接替换location  匹配部分

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

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

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
server {
listen       80;
server_name  localhost;
location /system {          
proxy_pass        http://127.0.0.1:8080;
proxy_redirect    off;
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_pass  以/结尾
location /system {          
proxy_pass        http://127.0.0.1:8080/;
proxy_redirect    off;
proxy_set_header  Host  $host;
proxy_set_header  X-Real-IP  $remote_addr;
proxy_set_header  X-Forwarded-For $proxy_add_x_forwarded_for;          
}
}

例如:http://192.168.25.132/system/sysMenu/tree

如上两个匹配成功后,实际代理的目标url分别是

http://127.0.0.1:8080/system/sysMenu/tree (把/system/sysMenu/tree拼接到proxy_pass 地址的127.0.0.1:8080之后)

http://127.0.0.1:8080/sysMenu/tree (把/system/sysMenu/tree去掉匹配到的location /system拼接到proxy_pass 地址的127.0.0.1:8080之后)

2.使用nginx 的rewrite 模块 

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

?
1
2
3
4
5
6
7
8
9
10
11
12
rewrite    <regex>    <replacement>    [flag];
关键字      正则        替代内容          flag标记
关键字:其中关键字error_log不能改变
正则:perl兼容正则表达式语句进行规则匹配
替代内容:将正则匹配的内容替换成replacement
flag标记:rewrite支持的flag标记
flag标记说明:
last  #本条规则匹配完成后,继续向下匹配新的location URI规则
break  #本条规则匹配完成即终止,不再匹配后面的任何规则
redirect  #返回302临时重定向,浏览器地址会显示跳转后的URL地址
permanent  #返回301永久重定向,浏览器地址栏会显示跳转后的URL地址

把到本服务的所有请求转发到www.summer.com

rewrite ^/(.*) http://www.summer.com/$1 break;

把到本服务器的所有请求路径中以/system开头的请求 替换成不带system的,例如http://192.168.25.132/system/sysMenu/tree ,匹配后地址变成 http://127.0.0.1:8080/sysMenu/tree

rewrite ^/system/(.*) /$1 break;        

说明:                                        

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

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

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

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

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
server {
listen       80;
server_name  localhost;
#charset koi8-r;
#access_log  logs/host.access.log  main;
location / {
#/data/manager可以存放静态页面
root   /data/manager;
index  index.html index.htm;
}
location /system {          
proxy_pass        http://127.0.0.1:8080;
proxy_redirect    off;
proxy_set_header  Host  $host;
proxy_set_header  X-Real-IP  $remote_addr;
proxy_set_header  X-Forwarded-For $proxy_add_x_forwarded_for;
rewrite ^/system/(.*) /$1 break;       
}
}

regex 常用正则表达式说明

%小知识:关于nginx 反向代理 URL替换方案-猿站网-插图

rewrite 企业应用场景

Nginx的rewrite功能在企业里应用非常广泛:

u 可以调整用户浏览的URL,看起来更规范,合乎开发及产品人员的需求。

u 为了让搜索引擎搜录网站内容及用户体验更好,企业会将动态URL地址伪装成静态地址提供服务。

u 网址换新域名后,让旧的访问跳转到新的域名上。例如,访问京东的360buy.com会跳转到jd.com

u 根据特殊变量、目录、客户端的信息进行URL调整等

到此这篇关于nginx 反向代理 URL替换方案的文章就介绍到这了,更多相关nginx 反向代理替换URL内容请搜索服务器之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持服务器之家!

原文链接:https://blog.csdn.net/yk614294861/article/details/102688926

声明: 猿站网有关资源均来自网络搜集与网友提供,任何涉及商业盈利目的的均不得使用,否则产生的一切后果将由您自己承担! 本平台资源仅供个人学习交流、测试使用 所有内容请在下载后24小时内删除,制止非法恶意传播,不对任何下载或转载者造成的危害负任何法律责任!也请大家支持、购置正版! 。本站一律禁止以任何方式发布或转载任何违法的相关信息访客发现请向站长举报,会员发帖仅代表会员个人观点,并不代表本站赞同其观点和对其真实性负责。本网站的资源部分来源于网络,如有侵权烦请发送邮件至:2697268773@qq.com进行处理。
建站知识

小知识:linux新文件权限设置之umask的深入理解

2023-3-19 2:12:26

建站知识

小知识:linux查看磁盘使用情况方法

2023-3-19 2:20:49

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索