十八比特 十八比特
⚡ 18bit DNS (opens new window)
🏠 主页
  • 🌐 网站
  • 📦 资源
  • 📝 教程
  • 📐 制表符
  • 🗃️ 分类
  • 🏷️ 标签
  • 🗄️ 归档
📃 文章日志
ℹ️ 关于

十八比特

风带来故事的种子,时间使之发芽
⚡ 18bit DNS (opens new window)
🏠 主页
  • 🌐 网站
  • 📦 资源
  • 📝 教程
  • 📐 制表符
  • 🗃️ 分类
  • 🏷️ 标签
  • 🗄️ 归档
📃 文章日志
ℹ️ 关于
  • bat批量删除指定以外的文件和文件夹
  • 计算机基础知识要点
  • 记一次 Ubuntu持续io写入排查
  • Nginx 反向代理路径问题
    • 问题
    • 解决
    • 结尾
  • 随笔
秋澪冬安
2023-08-06
目录

Nginx 反向代理路径问题

# 问题

详细说一下遇到的问题。

当前有两个api接口如下,这两个接口都存在跨域问题,且我无法修改后端的接口:

http://192.168.1.110/api/user?id=101
http://192.168.5.110/api/user?id=101

可见这两个api接口除了主机地址不同,协议、路径、参数都一样,由于改不了后端,所以我需要在前端处理跨域问题。

因为不是很熟悉 nginx 的配置,按照网上的教程配完反向代理后发现 nginx 代理实际向后端请求的接口不对,下面是最开始的配置:

location /api1 {
    proxy_pass http://192.168.1.1;
    proxy_set_header Host $host;
}

location /api2 {
    proxy_pass http://192.168.0.1;
    proxy_set_header Host $host;
}

前端请求的 url 是 /api1/api/user?id=101 和 /api2/api/user?id=101

# 解决

网上查阅后发现,location 和 proxy_pass 这两个的路径末尾加不加 / 区别还是很大,首先看看我最开始的配置,配置中 location 的路径末尾不带 / ,而 proxy_pass 的路径末尾不带 / ,查看后端的请求日志可以看到,后端实际收到的请求地址是:

/api1/api/user?id=101

显然该地址在后端是不存在的,然后在 proxy_pass 的末尾添加 / 之后,后端实际收到的请求地址是:

//api/user?id=101

显然,该地址也是不合法的地址,然后在 location 的路径末尾添加 / 之后,后端实际收到的请求地址是:

/api/user?id=101

这个地址才是正确的地址。

最后将配置文件修改一下,问题就解决了:

location /api1/ {
    proxy_pass http://192.168.1.1/;
    proxy_set_header Host $host;
}

location /api2/ {
    proxy_pass http://192.168.0.1/;
    proxy_set_header Host $host;
}

# 结尾

可以看到 location 和 proxy_pass 的路径结尾加不加 / 影响显著,排列组合下来有好几种情况,更多不同的组合的实际请求地址可以看看这篇文章:

Nginx location 和 proxy_pass路径配置详解 (opens new window)

#Nginx
上次编辑: 2024/08/30, 16:21:31

← 记一次 Ubuntu持续io写入排查

最近更新
01
SSH跳板机访问内网服务
06-16
02
GPG 导出导入命令
06-16
03
从零开始的 All In One
06-14
更多文章>
Theme by Vdoing | Copyright © 2020-2025 十八比特 | 蜀ICP备2022002410号-1
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式