关于nginx 反向代理 URL替换方案
作者:皮卡车厘子
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 常用正则表达式说明
rewrite 企业应用场景
Nginx的rewrite功能在企业里应用非常广泛:
u 可以调整用户浏览的URL,看起来更规范,合乎开发及产品人员的需求。
u 为了让搜索引擎搜录网站内容及用户体验更好,企业会将动态URL地址伪装成静态地址提供服务。
u 网址换新域名后,让旧的访问跳转到新的域名上。例如,访问京东的360buy.com会跳转到jd.com
u 根据特殊变量、目录、客户端的信息进行URL调整等
到此这篇关于nginx 反向代理 URL替换方案的文章就介绍到这了,更多相关nginx 反向代理替换URL内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!