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

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

简介

说明

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

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

需求

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

方案1:return

方法

bash 复制代码
server {
    listen       8080;
    server_name  aaa.com;

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

说明

浏览器会直接跳转到bbb123.com,相当于直接location.href = 'bbb123.com'

方案2:rewrite

方法

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

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

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

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

法3:与if结合

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

说明

浏览器会直接跳转到bbb123.com,相当于直接location.href = 'bbb123.com'

方案3:proxy_pass

方法

ini 复制代码
server {
    listen       80;
    server_name  aaa.com;
  
    location /aaa/ {
        proxy_pass https://bbb123.com;
    }
}

说明

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

联合使用

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

例1:rewrite带break

bash 复制代码
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

bash 复制代码
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(用户无感知)

相关推荐
Tony Bai2 小时前
【Go 网络编程全解】12 本地高速公路:Unix 域套接字与网络设备信息
开发语言·网络·后端·golang·unix
Yeats_Liao4 小时前
Go Web 编程快速入门 06 - 响应 ResponseWriter:状态码与头部
开发语言·后端·golang
mit6.8244 小时前
[Agent可视化] 编排工作流(Go) | Temporal引擎 | DAG调度器 | ReAct模式实现
开发语言·后端·golang
猪哥-嵌入式5 小时前
Go语言实战教学:从一个混合定时任务调度器(Crontab)深入理解Go的并发、接口与工程哲学
开发语言·后端·golang
thinktik5 小时前
AWS EKS 计算资源自动扩缩之Fargate[AWS 海外区]
后端·kubernetes·aws
不爱编程的小九九6 小时前
小九源码-springboot099-基于Springboot的本科实践教学管理系统
java·spring boot·后端
lang201509286 小时前
Spring Boot集成Spring Integration全解析
spring boot·后端·spring
雨夜之寂6 小时前
第一章-第二节-Cursor IDE与MCP集成.md
java·后端·架构
大G的笔记本6 小时前
Spring IOC和AOP
java·后端·spring
武子康6 小时前
Java-155 MongoDB Spring Boot 连接实战 | Template vs Repository(含索引与常见坑)
java·数据库·spring boot·后端·mongodb·系统架构·nosql