Nginx系列--转发请求的方法

摆地摊
• 阅读 435

原文网址:​​Nginx系列--转发请求的方法_IT利刃出鞘的博客-CSDN博客​

简介

说明

本文介绍Nginx转发请求的方法。

分享Java技术星球(自学精灵):​​https://learn.skyofit.com/​

需求

用户访问aaa.com/bbb时,实际访问的是bbb123.com。

方案1:return

方法

server {
    listen       8080;
    server_name  aaa.com;

    location /bbb {
        return 302 https://bbb123.com$request_uri;
    } 
}

![]()

说明

浏览器会直接跳转到https://bbb123.com,相当于直接location.href = ‘https://bbb123.com’ 。

方案2:rewrite

方法

法1:正则匹配所有的URI再去掉开头第一个/(反斜线)。

server {
    listen       80;
    server_name  aaa.com;
    rewrite ^/(.*)$ https://bbb123.com/$1 permanent;
}

法2: $request_uri变量匹配所有的URI。

server {
    listen       80;
    server_name  aaa.com;
    rewrite ^ https://bbb123.com$request_uri? permanent;
}

法3:与if结合

server {
    listen       80;
    server_name  aaa.com abc.com;
    if ($host = 'aaa.com' ) {
        rewrite ^/(.*)$ https://bbb123.com/$1 permanent;
    }
}

说明

浏览器会直接跳转到https://bbb123.com,相当于直接location.href = ‘https://bbb123.com’ 。

方案3:proxy_pass

方法

server {
    listen       80;
    server_name  aaa.com;
  
    location /aaa/ {
        proxy_pass https://bbb123.com;
    }
}

说明

浏览器显示的仍然是aaa.com/aaa,用户是不知道https://bbb123.com的存在的。

联合使用

上边三者是可以联合使用的,例如:

例1:rewrite带break

server {
    listen       80;
    server_name  localhost;
    
    location /abc {
        # 只保留/abc/后面的路径
        rewrite ^/abc/(.*)$ /proxy/$1 break;
        # 改写完之后, 再进行代理; 最终结果: http://www.proxy_pass.com/proxy/$1 
        proxy_pass http://www.proxy_pass.com;
    }
 
    location / {
        root   /usr/share/nginx/html;
        index  index.html index.htm index.php;
    }
}

访问:localhost/abc/aaa

实际访问:http://www.proxy_pass.com/abc/aaa(用户无感知)

例2:rewrite不带break

server {
    listen       80;
    server_name  localhost;
    
    location /abc {
        # 只保留/abc/后面的路径
        rewrite ^/abc/(.*)$ /proxy/$1;
        # 改写完之后, 再进行代理; 最终结果: http://www.proxy_pass.com/proxy/$1 
        proxy_pass http://www.proxy_pass.com;
    }
 
    location / {
        root   /usr/share/nginx/html;
        index  index.html index.htm index.php;
    }
}

访问:localhost/abc/aaa

实际访问:/usr/share/nginx/html/index.html(用户无感知)

点赞
收藏
评论区
推荐文章
美凌格栋栋酱 美凌格栋栋酱
7个月前
Oracle 分组与拼接字符串同时使用
SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(
虾米大王 虾米大王
3年前
java代码012
code012.jspInserttitlehere<%JSP内置对象1.request用于处理HTTP请求中的各项参数。如,删除可以通过request对象的getParameter()方法获取如,request.getParameter("id")在请求转发时,需要把一些数据传递到转发后的页面处理。就需要用到request的se
Stella981 Stella981
3年前
Nginx系列之使用ssl模块配置支持代理HTTPS链接
Nginx系列之使用ssl模块配置支持HTTPS访问1、博客前言介绍最近在用nginx代理https的第三方链接,因为不是做运维,所以对nginx并不是特殊熟悉,所以到处询问摸索了挺久2、查看ssl\_module要使用nginx代理https的链接,先用检查nginx是否已经有安装了ssl
Wesley13 Wesley13
3年前
ELK最佳实践
1.ELK最佳实践解析!(https://oscimg.oschina.net/oscnet/50d3ea4fa3946e374b0a03fb0e5795f4cb2.png)a.用户通过nginx或haproxy访问ELK日志统计平台,IP地址为keepalived的vip地址;b.nginx将请求转发到kibana;c.kibana到e
Stella981 Stella981
3年前
Linux架构之Nginx 常见问题
第54章Nginx常见问题一、Nginx多Sever优先级在开始处理一个http请求时,nginx会取出header头中的Host变量,与nginx.conf中每个server的server_name进行匹配,由此决定到底由哪一个server来处理这个请求。但如果nginx配置多个相同的
Wesley13 Wesley13
3年前
mysql设置时区
mysql设置时区mysql\_query("SETtime\_zone'8:00'")ordie('时区设置失败,请联系管理员!');中国在东8区所以加8方法二:selectcount(user\_id)asdevice,CONVERT\_TZ(FROM\_UNIXTIME(reg\_time),'08:00','0
Stella981 Stella981
3年前
Disconf 分布式配置管理平台(安装配置)
Disconf分布式配置管理平台(安装配置)依赖环境Nginx:处理静态资源请求、动态请求转发到TomcatTomcat:处理Nginx的请求Redis:用户session管理MySQL:应用管理、用户管理、角色管理、环境管理、配置持久化Zookeeper:管理Disconf配置信息
Stella981 Stella981
3年前
Nginx配置实验反向代理
l 实验要求浏览器访问8083.mine.com:8081地址,(Nginx端口是8081)通过Nginx服务器反向代理监听请求,将请求转发到tomcat服务器上,实现真正内容的访问。l 实验环境一台已安装Nginx(port:8081),tomcat8.5.39(port:8083)的CentOS服务
Nginx接收Http协议请求转发使用Https协议
缘起公司使用阿里的apigateway,规定不太友好,同是SIT环境,A系统的SIT1环境居然不能调用B系统的SIT2环境的接口。因为各个系统之间部署的SIT环境数量不同A系统可能只有1套,B系统可能有8套,这样的话,可能会随时切换调用B系统的环境,管理员
一种基于Nginx的热点数据调度处理方法
基于Nginx的热点数据调度处理,热点节点数据负载均衡处理,减少热点节点压力,提高处理和访问效率;每一个节点的nginx服务接收大量的访问,但是每个节点处理请求都有一个峰值,当请求数达到峰值时,后续请求的处理效率就会有一定的下降,为了保证请求能及时处理,热点节点会触发请求调度策略,转发请求到非热点节点进行处理,若无非热点节点,则触发分布式节点策略,备机节点会启动Nginx服务处理,并接收热点节点转发过来的请求,从而提升访问及处理效率。
linbojue linbojue
2星期前
Java转发的技术本质与应用场景
以下是为关键词“Java转发”撰写的高质量SEO文章,严格遵循百度搜索优化规范,结合技术深度与搜索可见性设计:标题Java转发的技术本质与应用场景通过对Java的转发技术的深入剖析我们就可以从如何从请求的派发到最终的Nginx的代理中做到一一对应的对外接口