沃梦达 / IT编程 / 服务器 / 正文

关于nginx 反向代理 URL替换方案

这篇文章主要介绍了nginx 反向代理 URL替换方案,本文给大家代理两种方法一种是直接替换location匹配部分,第二种是使用nginx 的rewrite 模块,本文给大家介绍的非常详细,需要的朋友可以参考下

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

1.直接替换location  匹配部分

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

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

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标记。

  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 地址上。

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 常用正则表达式说明

IiBzcmM9

rewrite 企业应用场景

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

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

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

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

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

到此这篇关于nginx 反向代理 URL替换方案的文章就介绍到这了,更多相关nginx 反向代理替换URL内容请搜索编程学习网以前的文章希望大家以后多多支持编程学习网!

本文标题为:关于nginx 反向代理 URL替换方案