惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

J
Java Code Geeks
爱范儿
爱范儿
Attack and Defense Labs
Attack and Defense Labs
量子位
The GitHub Blog
The GitHub Blog
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
Scott Helme
Scott Helme
C
CXSECURITY Database RSS Feed - CXSecurity.com
博客园 - 叶小钗
C
Cybersecurity and Infrastructure Security Agency CISA
S
Securelist
S
Schneier on Security
C
Cisco Blogs
B
Blog RSS Feed
Cisco Talos Blog
Cisco Talos Blog
Last Week in AI
Last Week in AI
WordPress大学
WordPress大学
腾讯CDC
酷 壳 – CoolShell
酷 壳 – CoolShell
罗磊的独立博客
Y
Y Combinator Blog
Latest news
Latest news
T
Tailwind CSS Blog
Jina AI
Jina AI
宝玉的分享
宝玉的分享
人人都是产品经理
人人都是产品经理
C
CERT Recently Published Vulnerability Notes
D
Darknet – Hacking Tools, Hacker News & Cyber Security
L
Lohrmann on Cybersecurity
The Cloudflare Blog
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
Microsoft Security Blog
Microsoft Security Blog
H
Help Net Security
P
Palo Alto Networks Blog
V
V2EX
博客园_首页
D
Docker
T
Threat Research - Cisco Blogs
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
V
Vulnerabilities – Threatpost
月光博客
月光博客
D
DataBreaches.Net
Stack Overflow Blog
Stack Overflow Blog
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
Know Your Adversary
Know Your Adversary
L
LangChain Blog
The Hacker News
The Hacker News
K
Kaspersky official blog
The Register - Security
The Register - Security
NISL@THU
NISL@THU

NGINX

有用 Nginx UI 的朋友吗?这玩意是不是时不时将磁盘 IO 打满? fail2ban 保护 nginx 方案 - V2EX 麦当劳服务模式是 nginx,肯德基服务模式是 apache,这样理解对不对? - V2EX oracleusa.ml 的实现原理 - V2EX 尝试自己配置转发后端请求的时候有个疑问 - V2EX 请教 Nginx 时完整的 SSL 刷新教程或者脚本 - V2EX 问问大家 nginx 日志流量分析用什么方案? - V2EX nginx rewrite 指令的问题 - V2EX 问个 nginx 配置问题 - V2EX 请问下为啥微信客户端访问到 nginx 没有参数了? - V2EX 有兄弟们用 nginx proxy manager(或者其他图形化工具)来管理 nginx 反向代理的吗? - V2EX 请问 Nginx 怎么添加 CORS 白名单? - V2EX 使用 nginx 监听已被监听的端口, reload 不会失败, 但会导致其他配置不生效. - V2EX nginx 如何获取/打印完整代理路径? - V2EX Nginx 四层反代 QUIC 如何传递客户端 IP - V2EX 关于 windows 下面重启之后 nginx 的问题 - V2EX 我是不是可以反向代理个 V2EX 网站? - V2EX 用 nginx 做的 xai 的转发好像一直有问题 - V2EX 请教一个 Nginx 配置和浏览器强制 http 转 https 问题 - V2EX nginx proxy manager ipv6 反代指向内网 ipv4 局域网地址,还可以这样操作🤔? - V2EX 关于 Nginx 反向代理性能调优的问题,求指导🙏 - V2EX nginx 配置根据请求头分发问题 - V2EX 用过 nginx-proxy-manager 请进, 咨询个问题. - V2EX 我有一个端口转发问题,求大佬们协助 - V2EX 使用 Nginx 代理 Emby 服务器,浏览器可以访问但是客户端连不上 - V2EX 小白在使用 Nginx proxy manager 遇到问题,请大佬们指教。 - V2EX 请教下 nginx 反代配置 - V2EX nginx 配置问题求解答 - V2EX Nginx 流量异常,请大佬支招~ - V2EX nginx 读取 ssl 证书的权限问题请教 - V2EX 请问一个二级域名如何配置可以访问多个 http 服务? - V2EX 配置证书相关的问题 - V2EX 关于 nginx 的一些提问 - V2EX nginx 限流失败的奇怪问题 - V2EX 反向代理提示该网站已被拦截,请教 - V2EX 为什么我的 docker nginx 的不能反向代理 favicon 啊 - V2EX Nginx 能不能实现按域名限制网速? - V2EX 请教一下各位关于 nginx 版本更新区别导致反向代理无法访问的问题 - V2EX 虚心请教一个有关于 nginx 配置的问题 - V2EX 求解 nginx 反代某堡垒机 443 页面出现问题 - V2EX nginx if 语句 return 403,没办法跳转自定义 403 页面 - V2EX 请教 nginx deny 优先级的问题。 - V2EX 求教关于反代的问题 - V2EX nginx 增加 http 块 就报证书错误,请问是什么原因,第一次见 - V2EX 有台生产服务器, Nginx 每天都会因为不同原因 exit 一次,虽然配了自动重启,有没办法排查是什么原因?平均一天 1820 万请求 - V2EX openresty 怎么修改代理站的文件返回给客户端 有啥平替 resend、ZeptoMail 的国内解决方案嘛? 求救:屏蔽爬虫试了 2 天,没成功 - V2EX
nginx 二级目录反向代理是不是有先天缺陷? - V2EX
kyonn · 2025-08-04 · via NGINX

这是一个创建于 314 天前的主题,其中的信息可能已经有所发展或是发生改变。

如下一个最简化的反代配置,将本地 80/443 端口的 /git/ 反代到本地容器的 8085 端口。

访问 127.0.0.1/git/ 成功跳转到 8085 端口容器的 web 页面,但是发现有诸多问题:

  1. css 和 png 加载失败。抓了下调试信息,发现是容器返回的样式等文件地址都是绝对路径 /,进而导致浏览器请求样式文件时,没有正确走 location /git/ 的反代。通过 sub_filter 指令批量替换后解决了。
  2. 问题 1 解决后,点击其它页面元素,还是会出现 404 错误。原因同 1

类似这种二级目录的反向代理,是不是天然有缺陷,没办法像 二级域名 或 三级域名 反代那样完美实现?

注:

  1. 域名管理不在手上,添加多个二级或三级域名比较麻烦,所以考虑的是同一个域名下的子目录。
  2. 可以修改反代 upstream docker 的配置,因为是自己部署的。
location /git/ {
    proxy_http_version 1.1;
    proxy_pass http://192.168.1.13:8085/;
}

第 1 条附言  ·  2025 年 8 月 4 日

问题信息缺失引起歧义了。本意是想问 针对 这类二级目录 反代的情况,在不修改被反代服务的情况下,能否利用 nginx 一些特殊的配置做到类似 二级域名 反代那样的效果。

因为被反代的服务通常不是自己写的(开源的第三方服务),如果再修改它的静态资源打包方式比较麻烦,要额外修改被反代的项目。除了静态资源,我也也比较好奇,是否有其它的限制比较难处理,比如#11 提到的问题。

另一方面,因为域名解析控制权不在我这,所以加二级域名、三级域名也比较麻烦。所以倾向于使用同一个域名下二级目录反代的方式。

问题已经解决了,按照大家提供的信息,我去修改了 被反代服务的静态资源 context-path ,加了 /git/ 子目录,目前看暂时工作正常了。

perfectlife

1

perfectlife      2025 年 8 月 4 日

个人感觉这不是 nginx 的缺陷,是 http://192.168.1.13:8085 服务的问题 ,服务里比如 index.html 里面使用的 css png js 资源地址用的是绝对路径,用相对路径就没问题了

RobinHuuu

2

RobinHuuu      2025 年 8 月 4 日 via iPhone

目录反带得结合 rewrite 规则,把你的需求喂给 ai ,ai 给你写

momocraft

3

momocraft      2025 年 8 月 4 日

先看看你要反代的服务有没有路径设置

SanjinGG

4

SanjinGG      2025 年 8 月 4 日 via Android

看样子是你打包没用相对路径吧

kyonn

5

kyonn      2025 年 8 月 4 日

@momocraft 是指 contextpath 吗?让被代理的容器 web 服务在 contextpath 而不是 / ?

perfectlife

8

perfectlife      2025 年 8 月 4 日

@kyonn 直接访问端口时 根目录是 / ,访问正常是预期的现象, 你反代时根目录是/git/了, 绝对路径就会出错了, 三楼说的对,要先看这个开源项目支持不支持路径设置, 比如你用 nginx 使用/kibana 反向代理 kibana ,你就需要在 kibana 里设置 server.basePath: "/kibana"

maocat

9

maocat      2025 年 8 月 4 日   ❤️ 1

浏览器路径加/git/是人为操作,同理,如果需要浏览器自动加载/git/静态资源,是不是需要在代码里提前配置/git/ ?,解决方法,1 ,前端编译时项目加上/git/,2. 所有静态资源文件由后端推送,3,直接 nginx 转发静态文件
看你的描述,我猜测你部署的是 coze

duanxianze

11

duanxianze      2025 年 8 月 4 日

确实有先天缺陷,比如 cookie,localStorage 不能隔离等等问题,但你这个问题纯粹是你没写对

totoro625

12

totoro625      2025 年 8 月 4 日

proxy_pass 的服务器不支持自定义为 example.com/git/为主页的话
直接自己手搓规则
由简到繁观察请求路径,例如 A 只请求很少的几个文件夹路径,就单独为 A 写
例如 A 请求/_nuxt 和 /css/main.css (如果与主站点重复,需要人为修改主站点 css 请求路径,或子站点请求路径)
location /_nuxt {
proxy_pass http://192.168.1.13:8085/_nuxt;
}
location /css/main.css {
proxy_pass http://192.168.1.13:8085/css/main.css;
}

skiy

13

skiy      2025 年 8 月 4 日

你在主机上面 curl http://192.168.1.13:8085 看看页面上的 URL 正常吗。

Alfchao

14

Alfchao      2025 年 8 月 4 日

前端资源要用相对路径,和 nginx 没关系

tsja

15

tsja      2025 年 8 月 4 日

全栈前端表示,每次部署新项目都会被 nginx 折磨半天,有的问题 AI 也解决不了

Charles0929

17

Charles0929      2025 年 8 月 4 日

nginx 二级代理需要上游服务支持,比如 web 打包需要增加通用前缀,这种 vite 等插件是支持配置的,如果是其他语言,比如 java 一类,springboot 也有 servlet-context-path 这些配置

Suaxi

18

Suaxi      2025 年 8 月 4 日

反代二级目录,vue + webpack 的话 可以通过 config 的 publicPath 来配置

ps:能用二级域名尽量用二级域名

hugozach

19

hugozach      2025 年 8 月 4 日

代码写的问题就代码的问题 还怪上 nginx 了

itechify

20

itechify      2025 年 8 月 4 日

南无阿弥陀佛 还是二级域名减轻心智负担

irisdev

22

irisdev      2025 年 8 月 4 日

额楼主不是说代理的是开源容器吗,怎么楼上还有让楼主改代码的,写脚本批量替换路径是不是能解决?

635925926

23

635925926      2025 年 8 月 4 日

你写了/给你访问/。请问哪里有问题了?

zhhbstudio

24

zhhbstudio      2025 年 8 月 4 日

看上去是 sub_filter 没写全,根据不能用的页面针对性加一下

clarkethan

25

clarkethan      2025 年 8 月 4 日

这是你博客引用静态资源的路径应该做对应的修改,nginx 不背这个锅

coderzhangsan

26

coderzhangsan      2025 年 8 月 4 日

#1 已经说明问题了,这不是 nginx 的问题,这是 web 页面静态资源路径的问题,静态资源相对路径后面要加上/git/,否则不会触发 nginx /git/ 重写规则,会按当前 nginx 配置去搜寻静态资源路径。

ssiitotoo

27

ssiitotoo      2025 年 8 月 4 日

你要知道你的入口是 nginx 了然后你配置了/git/代理到你后端 请求 nginxip/js/1.js 等静态资源在 nginx 那儿是找不到 需要在资源路劲前添加/git/才能请求到你后 8085 的资源

SenLief

28

SenLief      2025 年 8 月 4 日 via iPhone

前端程序员问题,项目不支持二级路径反代就不行。

w292614191

30

w292614191      2025 年 8 月 4 日

我也倾向 /git ,然后 nginx 自动处理,但不行,只能修改项目的 basePath 之类的。自己的项目还好,第三方项目就很麻烦

idealhs

31

idealhs      2025 年 8 月 4 日

目前遇到的大部分都支持设置 basePath ,也是有很多小项目前端整的不好确实没法这么用的。

wwhontheway

32

wwhontheway      2025 年 8 月 4 日

对,非常难受,之前想用 nginx 二级目录的方式代理多个 kibana ,结果一堆静态文件找不到。最后看到的解法也是去被代理的机器上修改一些东西。虽然可行,但是还需要去被代理服务修改配置就很难受

muyuanqiang7

33

muyuanqiang7      2025 年 8 月 4 日

我记得可以用 rewrite path 来处理静态文件的加载,但是在有些 api 请求上还是有点问题。代理第三方的是可以解决的,问下 AI 吧

kyonn

34

kyonn      2025 年 8 月 4 日

@muyuanqiang7 按我的理解,rewrite path 应该只能重写 原始请求的 uri ,如果 被代理机器返回的就是 /xxx.css ,浏览器就按 /xxx.css 去请求静态资源,这时候 rewrite 就不起作用了。除非把本机所有 /xxx.css 类的请求都 rewrite 给 被代理机器,但是这个改动会影响第 2 个被代理机器。

假如只有一台被代理机器,应该是可行的。不知道我的理解是否正确。

awsl2333

35

awsl2333      2025 年 8 月 4 日

@kyonn
1. 二级域名转发,每个服务一个域名
2. 不同端口,每个端口一个服务

konakona

36

konakona      2025 年 8 月 4 日

首先,在 Nginx 配置中,需要明确理解其作用范围。/git/ 的配置仅对该子目录生效,这并非 Nginx 的缺陷,而是对其作用机制的误解。

如果不是特意将主域名分发至多个不同的 endpoint 服务上,应注意 endpoint 的 contextpath 。如果使用的是开源镜像等固定 contextpath 的服务,且无法修改,则可以通过 sub-filter 实现所需功能。

muyuanqiang7

37

muyuanqiang7      2025 年 8 月 4 日

@kyonn 你说的和我之前问 AI 回答的意思差不多,但是我的实际使用的时候是我不加 rewrite 的情况下,我的 css 、js 、png 请求地址就是/,但是当我加了 rewrite 后被代理的第三方服务的请求静态资源就正常了。

echo21bash

38

echo21bash      2025 年 8 月 4 日

老运维一看题目就知道是,后端源代码写的绝对路径,甩锅给研发 ok

adoal

39

adoal      2025 年 8 月 4 日

V2EX 里的月经问题了。如果反代后方应用没有“我的前方可能会有一个反代服务器,把不同 Host 不同 port 不同 prefix 的请求转给我,所以我需要在生成页内链接时做调整”的意识,这个问题就是没有完美解的。

一个不得已的托底方法是用 mod_substitute 对后方应用生成的页面做内容替换。当然,这种替换不能保证 100%无假阴无假阳。