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

1.直接替换location  匹配部分

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

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


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

例如: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. rewrite <regex> <replacement> [flag];
  2. 关键字 正则 替代内容 flag标记
  3. 关键字:其中关键字error_log不能改变
  4. 正则:perl兼容正则表达式语句进行规则匹配
  5. 替代内容:将正则匹配的内容替换成replacement
  6. flag标记:rewrite支持的flag标记
  7. flag标记说明:
  8. last #本条规则匹配完成后,继续向下匹配新的location URI规则
  9. break #本条规则匹配完成即终止,不再匹配后面的任何规则
  10. redirect #返回302临时重定向,浏览器地址会显示跳转后的URL地址
  11. 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. server {
  2. listen 80;
  3. server_name localhost;
  4. #charset koi8-r;
  5. #access_log logs/host.access.log main;
  6. location / {
  7. #/data/manager可以存放静态页面
  8. root /data/manager;
  9. index index.html index.htm;
  10. }
  11. location /system {
  12. proxy_pass http://127.0.0.1:8080;
  13. proxy_redirect off;
  14. proxy_set_header Host $host;
  15. proxy_set_header X-Real-IP $remote_addr;
  16. proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
  17. rewrite ^/system/(.*) /$1 break;
  18. }
  19. }

regex 常用正则表达式说明

字符

描述

\

将后面接着的字符标记为一个特殊字符或一个原义字符或一个向后引用。如“\n”匹配一个换行符,而“\$”则匹配“$”

^

匹配输入字符串的起始位置

$

匹配输入字符串的结束位置

*

匹配前面的字符零次或多次。如“ol*”能匹配“o”及“ol”、“oll”

+

匹配前面的字符一次或多次。如“ol+”能匹配“ol”及“oll”、“oll”,但不能匹配“o”

?

匹配前面的字符零次或一次,例如“do(es)?”能匹配“do”或者“does”,"?"等效于"{0,1}"

.

匹配除“\n”之外的任何单个字符,若要匹配包括“\n”在内的任意字符,请使用诸如“[.\n]”之类的模式。

(pattern)

匹配括号内pattern并可以在后面获取对应的匹配,常用$0...$9属性获取小括号中的匹配内容,要匹配圆括号字符需要Content

rewrite 企业应用场景

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

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

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

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

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

</article>

[转帖]nginx 反向代理 URL替换方案的更多相关文章

  1. 跨域问题,解决方案-Nginx反向代理

    跨域问题,解决之道 跨域问题,在日常开发过程中,是一个非常熟悉的名词.今天的话题,结合我之前的项目场景,讨论下<跨域问题,解决之道>. 跨域是什么 跨域问题,是由于JavaScript出于 ...

  2. CORS跨域与Nginx反向代理跨域优劣对比

    最近写了一些关于前后端分离项目之后,跨域相关方案的基本原理和常见误区的帖子,主要包括CORS和Nginx反向代理.这两种方案项目中都有在用,各有优缺,关于具体使用哪种方案,大家的观点也不大一致,本文主 ...

  3. nginx反向代理+负载均衡+url重写+ssl认证

      Nginx (engine x) 是一个高性能的HTTP和反向代理服务器,也是一个IMAP/POP3/SMTP服务器.Nginx是由伊戈尔·赛索耶夫为俄罗斯访问量第二的Rambler.ru站点(俄 ...

  4. Nginx 反向代理、负载均衡、页面缓存、URL重写及读写分离详解

    转载:http://freeloda.blog.51cto.com/2033581/1288553 大纲 一.前言 二.环境准备 三.安装与配置Nginx 四.Nginx之反向代理 五.Nginx之负 ...

  5. Nginx反向代理、负载均衡、页面缓存、URL重写及读写分离详解

    大纲 一.前言 二.环境准备 三.安装与配置Nginx 四.Nginx之反向代理 五.Nginx之负载均衡 六.Nginx之页面缓存 七.Nginx之URL重写 八.Nginx之读写分离 注,操作系统 ...

  6. nginx反向代理+缓存开启+url重写+负载均衡(带健康探测)的部署记录

    在日常运维工作中,运维人员会时常使用到nginx的反向代理,负载均衡以及缓存等功能来优化web服务性能. 废话不多说,下面对测试环境下的nginx反向代理+缓存开启+url重写+负载均衡(带健康探测) ...

  7. Nginx 反向代理、负载均衡、页面缓存、URL重写、读写分离及简单双机热备详解

    大纲 一.前言 二.环境准备 三.安装与配置Nginx  (windows下nginx安装.配置与使用) 四.Nginx之反向代理 五.Nginx之负载均衡  (负载均衡算法:nginx负载算法 up ...

  8. Nginx反向代理 负载均衡 页面缓存 URL重写及读写分离

    大纲 一.前言 二.环境准备 三.安装与配置Nginx 四.Nginx之反向代理 五.Nginx之负载均衡 六.Nginx之页面缓存 七.Nginx之URL重写 八.Nginx之读写分离 注,操作系统 ...

  9. [转载]Nginx 反向代理、负载均衡、页面缓存、URL重写及读写分离详解

    大纲 一.前言 二.环境准备 三.安装与配置Nginx 四.Nginx之反向代理 五.Nginx之负载均衡 六.Nginx之页面缓存 七.Nginx之URL重写 八.Nginx之读写分离 注,操作系统 ...

  10. (转)Nginx 反向代理、负载均衡、页面缓存、URL重写及读写分离详解

    原文:http://blog.51cto.com/freeloda/1288553 大纲 一.前言 二.环境准备 三.安装与配置Nginx 四.Nginx之反向代理 五.Nginx之负载均衡 六.Ng ...

随机推荐

  1. vue-admin-template动态菜单后台获取菜单

    vue-admin-template.vue-element-admin配置动态菜单,菜单数据从后台获取. 我在网上search了几个小时也没有找到想要的emm,翻官网也没有说明,只说明了路由覆盖.只 ...

  2. docker: 'buildx' is not a docker command

    解决方法 sudo apt install docker-buildx-plugin

  3. vue缓存数据

    1,本地缓存(一直存在) localStorage.setItem('key', 'value'); const data = localStorage.getItem('key'); 2,会话缓存( ...

  4. Spring Boot 应用部署流程

    在本机操作,执行以下步骤启动项目 1.从Github上下载源码 git clone https://github.com/ChinaSilence/any-video.git 2.在数据库中建库,建表 ...

  5. EDS从小白到专家丨打造数据交换的六边形卫士,让你的数据你做主

    本文分享自华为云社区<[EDS从小白到专家]第4期:打造数据交换的六边形卫士,让你的数据你做主>,作者: 开天aPaaS小助手 . 你还在担心数据共享后一旦"失控"将爆 ...

  6. 火山引擎 ByteHouse:双十一即将到来,如何用数据分析提升电商平台销售转化?

    更多技术交流.求职机会,欢迎关注字节跳动数据平台微信公众号,回复[1]进入官方交流群 "双十一"电商大促脚步渐近,各大平台的战火又将燃起.直播电商以低成本.高转化率等优势备受商家青 ...

  7. 揭秘字节跳动云原生Spark History 服务 UIService

    本文是字节跳动数据平台数据引擎SparkSQL团队针对 Spark History Server (SHS) 的优化实践分享. 文 | 字节跳动数据平台-数据引擎-SparkSQL团队 在字节跳动内部 ...

  8. DataLeap的全链路智能监控报警实践(一):常见问题

    随着字节跳动业务的快速发展,大数据开发场景下需要运维管理的任务越来越多,然而普通的监控系统只支持配置相应任务的监控规则,已经不能完全满足当前需求,在日常运维中开发者经常会面临以下几个问题: 任务多,依 ...

  9. 火山引擎DataLeap数据调度实例的 DAG 优化方案(三):技术实现

    在原始数据中,是以一个数组的形式返回节点信息及依赖关系.所以,需要对数据进行处理形成图所需要的数据,同时,利用多个 map 对数据进行存储,方便后续对数据进行检索,减少时间复杂度. 实例节点的样式需要 ...

  10. C# 跳过值班时间代码逻辑

    /// <summary> /// 当前时间是否是值班时间 /// </summary> private bool IsDutyTime { get { var dutyTim ...