V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
mickey001
V2EX  ›  PHP

谁能解决 nginx 规则 反向解析目录到 B 服务器 正常访问 图片 JS CSS 资源的问题,有红包

  •  
  •   mickey001 · 2018-03-18 00:32:33 +08:00 · 2937 次点击
    这是一个创建于 2462 天前的主题,其中的信息可能已经有所发展或是发生改变。

    问题描述:

    域名:www.ab12.com 域名主服务器:nginx
    域名主服务器 IP:192.168.1.10

    需要反向解析到的目录服务器

    aaa 目录 对应 服务器 IP 116.100.111.1 bbb 目录 对应 服务器 IP 116.110.111.2 ccc 目录 对应 服务器 IP 116.110.111.3

    需求:

    主服务器域名 www.ab12.com 需要分别 反向解析 3 个目录名到 目录服务器对应的 3 个 IP,如上;

    实现流程:

    1、在 www.ab12.com 站的 conf 伪静态规则里增加如下规则实现反向解析到目录服务器 IP 及定义目录名

    location /aaa { proxy_pass http://116.100.111.1/; }

    location /bbb { proxy_pass http://116.100.111.2/; }

    location /ccc { proxy_pass http://116.100.111.3/; }

    以上代码可以正常实现 目录反向解析到 目录名所在的服务器 IP ;

    可以通过 www.ab12.com/aaa/ www.ab12.com/bbb/ www.ab12.com/ccc/ 正常打开 目录服务器的网站;

    原理: 访问 URL www.ab12.com/aaa/ 时,主服务器 从 116.100.111.1 这台服务器的目录里抓取提取网站内容资源,缓存到 www.ab12.com 主站服务器里,然后解析显示网站;

    2、然后单独到 域名的 conf 规则里 写上如下代码,定义其中一个目录的静态资源路径解析:

    location ~ ^/(?!(aaa)).*.(js|css)?$ { expires 1h; access_log off; }

    location ~ ^/(?!(aaa)).*.(gif|jpg|jpeg|png|bmp|swf)$ { expires 1h; access_log off; }

    配置好如上规则后, 然后浏览器输入 www.ab12.com/aaa/img/01.jpg 可以打开正常的图片;

    依葫芦画瓢:

    配置 bbb 目录的 静态资源路径:

    location ~ ^/(?!(bbb)).*.(js|css)?$ { expires 1h; access_log off; }

    location ~ ^/(?!(bbb)).*.(gif|jpg|jpeg|png|bmp|swf)$ { expires 1h; access_log off; }

    现在 问题发生了:

    www.ab12.com/aaa/img/01.jpg www.ab12.com/bbb/img/02.jpg

    全部都无法正常加载,返回 404 ;也就是访问静态资源丢失;

    分析问题:

    问题应该处在 配置静态资源规则写法有问题,以上代码,只能定义一个目录的静态资源路径,增加一个就全部完蛋,所以,应该是有 正则匹配 优先级的问题。

    所以,我的规则写的肯定有问题,找了好几个 技术,都没能帮我解决,兄弟们只是从 linux 系统找问题,其实系统本身根本没问题;

    本身 反向解析目录的原理 就是 A 服务器,从 B 服务器 抓取资源,返回到 A 服务器 通过 proxy_pass 缓存 B 服务器上抓取到的资源;

    所以静态资源,肯定要为每一个目录分别指定 静态资源路径才能解决;

    但是我虽然知道 问题在哪儿,但是我不会写 这种规则解决;

    最后,求助 V2EX 的 大牛们,帮忙解决下这个问题。。。

    能解决的,红包送上;

    拜托各位了。。帮帮忙,这个问题困扰我很久了。。找了不下 4 个人了,都没能解决

    有环境的,可以自己测试下;

    用你自己的域名,前提是您的服务器环境必须是 Linux centos nginx ;

    用你的域名 分别 反向解析 2 个目录

    比如 www.aaa.com/aaa/www.aaa.com/bbb/ 分别解析到 2 个 IP 所在的目录服务器;

    www.aaa.com/aaa/ 指向 http://xxx.xxx.xxx.111/ www.aaa.com/bbb/ 指向 http://xxx.xxx.xxx.222/

    然后在 目录端服务器里,分别上传 静态网页,里面放点 图片或者 CSS, 只要你能实现 输入 www.aaa.com/aaa/img/01.jpg www.aaa.com/bbb/img/02.jpg 能正常显示图片,就说明你的规则配置正确。您可以联系我,我测试后发红包给您;

    5 条回复    2018-03-23 10:10:40 +08:00
    mickey001
        1
    mickey001  
    OP
       2018-03-18 00:41:37 +08:00
    我的企鹅 号 : 二七四七零七零零九五
    alvinbone88
        2
    alvinbone88  
       2018-03-18 01:43:33 +08:00
    先把正则写对
    halfcrazy
        4
    halfcrazy  
       2018-03-18 02:14:19 +08:00
    @halfcrazy
    ```shell
    mkdir static_a static_b static_c
    echo a > static_a/a.txt
    echo b > static_b/b.txt
    echo c > static_c/c.txt

    curl http://127.0.0.1:80/aaa/a.txt
    curl http://127.0.0.1:80/bbb/b.txt
    curl http://127.0.0.1:80/ccc/c.txt
    ```
    GreyChou
        5
    GreyChou  
       2018-03-23 10:10:40 +08:00 via iPhone
    关注,问题解决了吗?
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3531 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 00:56 · PVG 08:56 · LAX 16:56 · JFK 19:56
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.