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

Nginx 调用 CDN 的正确姿势应该是怎么样的?

  •  
  •   saytesnake · 2020-04-20 16:29:12 +08:00 · 5266 次点击
    这是一个创建于 1677 天前的主题,其中的信息可能已经有所发展或是发生改变。

    Nginx 为例,

    好像一般的写法有三种,目前我这边是用着第二种方式,不过 Chrome F12 看到一堆的 301,似乎姿势不太正确...

    1 、

    location /image {
        proxy_pass http://cdn.xxx.com/image;
    }
    

    2 、

    location /image {
        rewrite ^ http://cdn.xxx.com/image;
        # 或
        rewrite 301 http://cdn.xxx.com/image;
    }
    

    3 、

    location /image {
        rewrite ^/.*$ /;
        proxy_pass http://cdn.xxx.com/image;
    }
    
    35 条回复    2020-04-21 15:45:13 +08:00
    yhxx
        1
    yhxx  
       2020-04-20 16:31:10 +08:00
    你再转一次和 CDN 直接回源好像没啥区别了吧。。。
    yhxx
        2
    yhxx  
       2020-04-20 16:31:34 +08:00
    没打完就发出去了
    正常操作应该是直接把 CDN 域名写在前端代码里?
    b821025551b
        3
    b821025551b  
       2020-04-20 16:34:03 +08:00
    nginx 转发 cdn 是什么操作,把 cdn 的优势直接丢掉
    wangyzj
        4
    wangyzj  
       2020-04-20 16:35:23 +08:00
    这什么操作?
    yuzo555
        5
    yuzo555  
       2020-04-20 16:40:24 +08:00
    最正确的方式应该是直接替换调用处使用的域名,再不济也只能是 301,proxy_pass 是什么鬼?完全浪费 CDN 还多花一遍流量费用?
    saytesnake
        6
    saytesnake  
    OP
       2020-04-20 16:50:46 +08:00
    @yhxx
    @b821025551b
    @wangyzj

    前端那边都不把链接更换的,所以无奈暂时选择了 301 跳,当然这个方式也不是规范的...
    saytesnake
        7
    saytesnake  
    OP
       2020-04-20 16:51:25 +08:00
    @yuzo555 在网上搜了,我也觉得 proxy_pass 很诡异...哈哈
    just1
        8
    just1  
       2020-04-20 16:53:03 +08:00 via Android
    有点窒息
    13 反带那要 cdn 有何用
    2 不带路径 301 过去也拿不到正确文件
    fancy111
        9
    fancy111  
       2020-04-20 16:54:32 +08:00
    CDN 跟你的 nginx 有啥关系? 除非你自建 CDN
    privil
        10
    privil  
       2020-04-20 16:57:48 +08:00
    你应该 rewrite 到 cdn 路径,反代的操作是真的有点骚。
    chairuosen
        11
    chairuosen  
       2020-04-20 17:00:36 +08:00
    让前端改,不改就拉 JB 倒
    Xusually
        12
    Xusually  
       2020-04-20 17:01:22 +08:00
    这。。。。。窒息的操作
    就算要走你的入口,最多也是 301 过去 CDN
    反代的话要 CDN 何用,用户找我,我找 CDN,CDN 找我回源,emmmmmm
    saytesnake
        13
    saytesnake  
    OP
       2020-04-20 17:07:48 +08:00
    @just1
    @privil
    @Xusually

    没错...太晕倒了,网上查到的到底是什么鬼啊...哈哈哈


    @chairuosen

    有道理,不改拉倒了。
    stillyu
        14
    stillyu  
       2020-04-20 17:10:06 +08:00
    不止是把 CDN 的优势丢掉了,CDN 根本开不起来吧,怎么回源,死循环了
    Cmdhelp
        15
    Cmdhelp  
       2020-04-20 17:13:18 +08:00
    0.0 我有个疑问,都走 cdn 了还啥还要反向代理...................................
    Cmdhelp
        16
    Cmdhelp  
       2020-04-20 17:14:41 +08:00
    你都不怕你的服务器拖累人家 cdn 吗
    Cmdhelp
        17
    Cmdhelp  
       2020-04-20 17:15:22 +08:00
    我真没懂这薄操作,又懂得大哥给我普及普及,可能是我没跟上
    saytesnake
        18
    saytesnake  
    OP
       2020-04-20 18:03:37 +08:00 via Android
    @Cmdhelp 这操作是错误的…反正
    GrayXu
        19
    GrayXu  
       2020-04-20 18:07:39 +08:00
    反向反向代理
    superrichman
        20
    superrichman  
       2020-04-20 18:14:57 +08:00 via iPhone
    满头问号的操作???
    superrichman
        21
    superrichman  
       2020-04-20 18:19:18 +08:00 via iPhone
    直接把前端页面地址改成 cdn 的。就好像给你在 tb 别人买东西直接填别人的地址寄过去就好了。你现在的做法是让 tb 寄到你自己家然后再寄给别人。
    xmlf
        22
    xmlf  
       2020-04-20 18:25:48 +08:00 via Android
    你直接用 sub filter,把页面地址替换掉就行了
    sadfQED2
        23
    sadfQED2  
       2020-04-20 18:32:38 +08:00 via Android
    令人窒息的操作.jpeg 反代 cdn 我想都不敢想
    xiaoz
        24
    xiaoz  
       2020-04-20 18:58:36 +08:00 via Android
    subs_filter 替换比较省事
    Aruforce
        25
    Aruforce  
       2020-04-20 19:21:47 +08:00 via Android
    降智打击…你这么做是把 nginx 当成 dns 用了啊……
    jugelizi
        26
    jugelizi  
       2020-04-20 19:26:19 +08:00 via iPhone
    什么叫前端不把链接更换 难道你换不了?
    0312birdzhang
        27
    0312birdzhang  
       2020-04-20 19:30:17 +08:00 via iPhone
    大概是没明白什么是 csn
    你要把域名的 dns 改为 cdn 给你的 ip 或者域名,给 cdn 一个源站地址
    用户请求这个链接直接走 cdn,没有再回到源站拿
    0312birdzhang
        28
    0312birdzhang  
       2020-04-20 19:30:55 +08:00 via iPhone
    @0312birdzhang 手机打字 d 打成了 s……
    saytesnake
        29
    saytesnake  
    OP
       2020-04-20 19:49:35 +08:00
    @xmlf
    @xiaoz

    学到了,谢谢~
    gadmyth
        30
    gadmyth  
       2020-04-20 23:07:11 +08:00
    使用场景:
    比如, App 老版本, 访问服务器的图片地址, 域名与服务器一致; 然后, 系统升级, 将图片全迁移到了云端, 域名发生变化, 就需要对 App 老版本的图片链接进行兼容.

    之前用过 rewrite, 看来 subs_filter 方案更好
    wizardoz
        31
    wizardoz  
       2020-04-21 10:19:24 +08:00
    反了吧,Nginx 应该在 CDN 后面才对啊
    guiling
        32
    guiling  
       2020-04-21 10:21:30 +08:00
    1 、让前端替换 cdn 链接
    2 、前端提交链接或者返回给前端链接时后台替换
    yc8332
        33
    yc8332  
       2020-04-21 10:46:38 +08:00
    浪费钱。。也浪费时间。。。走 cdn 用户就不会直接到你服务器了。你还搞这个跳转干嘛。。要改前端
    roidinev
        34
    roidinev  
       2020-04-21 11:49:34 +08:00
    @wizardoz 确实。cdn 回源到 nginx,nginx 应该是被动的。楼主说的只是自己源站的配置,只是 proxy_pass 到的应该是自己的某些 web 服务器,不应该是 cdn 服务器。
    MonoLogueChi
        35
    MonoLogueChi  
       2020-04-21 15:45:13 +08:00 via Android
    第一种和第三种肯定是不对的,反代 CDN ???第二种方式还算可以,最佳方案应该是前端处理
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2774 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 13:50 · PVG 21:50 · LAX 05:50 · JFK 08:50
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.