首页   注册   登录
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
NGINX
NGINX Trac
3rd Party Modules
Security Advisories
CHANGES
OpenResty
ngx_lua
Tengine
在线学习资源
NGINX 开发从入门到精通
NGINX Modules
ngx_echo
华为云
V2EX  ›  NGINX

nginx 二级目录,反向代理内网某个端口的设备。出现 404 如何解决?

  •  
  •   mostkia · 68 天前 · 679 次点击
    这是一个创建于 68 天前的主题,其中的信息可能已经有所发展或是发生改变。

    问题描述:nginx 服务器,二级目录 [比如 www.a.com/test/] 想反向代理内网某个端口的设备 [比如:192.168.1.101:8080 ] ,代理成功后,首页正常显示,但出现了大量 404 错误。

    Nginx 配置文件: location /test/ { proxy_pass http://192.168.1.101:8080/; }

    内网设备情况: html 文件是写入设备固件内的,无法修改,内部包含相对路径和绝对路径的资源引用。 比如有这样的引用: /css/style.css js/ui.js

    反代后,虚拟地址 www.a.com/test/ 等价于 192.168.1.101:8080 但 /test/style.css 这类绝对路径资源,却依旧会跑到根目录去读取,结果变成以下情况: www.a.com/css/style.css 导致找不到文件。出现 404 错误。

    请问有没有朋友碰到过类似的情况,是否有好的解决方案?

    6 回复  |  直到 2018-08-16 17:42:20 +08:00
        1
    WordTian   68 天前 via Android
    因为会把 /test/这个路径传给内网设备。也许可以加个重写 url 的规则?
        2
    neoska   68 天前
    Nginx 配置文件:location /test/ { proxy_pass http://192.168.1.101:8080/; }
    试试去掉 8080 后面的 /
        3
    popvlovs   68 天前
    是不是命中了其他高优先级的 location 规则,比如
    location ~* \.(?:css|js)$
        4
    dbolo123   68 天前 via Android
    你的 html 引入的 css 路径写成了 /css/style.css ,是会这样的,改成 css/style.css 就行,不过可能会带来新的问题
        5
    mostkia   67 天前
    @dbolo123 是的,但这个设备嵌入式设备,html 是写入在 flash 里面的,目前没法改。目前的临时方法,是将那些需要用到的绝对路径内容,也通过 nginx 代理到前端服务器上面,这样虽然能解决问题,但网站之间的独立性就受到影响了,基本就和初衷背离了,还不如整站全部反代了畅快。。希望有更好的办法吧。
        6
    mostkia   67 天前
    @popvlovs 这个没有问题,我是新开了一台 nginx 站点来测试的,测试前去掉了所有不必要的规则。问题很明确,就是因为被代理的服务器内,html 有很多静态资源的绝对引用,导致代理到新站点后,不得不照顾和考虑到这些绝对引用,否则就会出现 404,的确是比较蛋疼的问题。
    关于   ·   FAQ   ·   API   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   679 人在线   最高记录 3762   ·  
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.1 · 20ms · UTC 20:41 · PVG 04:41 · LAX 13:41 · JFK 16:41
    ♥ Do have faith in what you're doing.
    沪ICP备16043287号-1