求助一个 Nginx 多次重定向的问题 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Linken404
V2EX    NGINX

求助一个 Nginx 多次重定向的问题

  •  1
     
  •   Linken404 2023-12-20 17:01:22 +08:00 2169 次点击
    这是一个创建于 730 天前的主题,其中的信息可能已经有所发展或是发生改变。

    因为某些历史原因,有个网站的对外端口不能改变,但目前必须更换域名和端口。 例如原网站的一个正常访问链接是:

    http://aaa.example.com:8080/test.html?data-src=http://aaa.example.com:8080/test.mp4&data-cover=http://aaa.example.com:8080/test.jpg 

    其中我想让无论是 url 还是参数中的http://aaa.example.com:8080都变更为https://bbb.example.com,那用户访问上面的链接,最终打开的页面显示的链接应该是:

    https://bbb.example.com/test.html?data-src=https://bbb.example.com/test.mp4&data-cover=https://bbb.example.com/test.jpg 

    我最开始认为就是个普通的跳转,直接建了一个新的 aaa.example.com:8080 ,里面用 return 301 ,并将之前的 aaa 对应的配置文件改为了 bbb 的。结果发现后面的参数没有变,导致访问异常,视频不能播放。

    请问具体应该怎么做,才可以做到上面所要达到的效果呢?

    10 条回复    2023-12-21 10:32:55 +08:00
    OceanBreeze
        1
    OceanBreeze  
       2023-12-20 17:03:23 +08:00
    你不发 nginx 配置让大家怎么帮你?
    yuyuf
        2
    yuyuf  
       2023-12-20 17:09:04 +08:00
    变后面的参数,得看具体代码实现,不是配置一下就行了的。
    如果参数的域名服务端下发的,那得服务端改
    如果参数是前端拼接的,那得看前端的是怎么拼接的
    Linken404
        3
    Linken404  
    OP
       2023-12-20 17:14:14 +08:00
    @OceanBreeze 配置只有跳转,感觉描述清楚了就没发
    ```
    server {
    listen 8080;
    listen 443 ssl;
    server_name aaa.example.com;

    ssl_certificate /nginx/conf/ssl/example.com.pem;
    ssl_certificate_key /nginx/conf/ssl/example.com.key;

    return 301 http://bbb.example.com$request_uri;

    }

    server {
    listen 8080;
    listen 443 ssl;
    server_name bbb.example.com;
    ssl_certificate /nginx/conf/ssl/example.com.pem;
    ssl_certificate_key /nginx/conf/ssl/example.com.key;

    add_header 'Access-Control-Allow-Origin' '*';
    add_header 'Access-Control-Allow-Credentials' 'true';
    add_header 'Access-Control-Allow-Methods' '*';
    add_header 'Access-Control-Allow-Headers' '*';

    rewrite ^(.*)aaa\.example\.com:8080(.*)$ $1bbb.example.com$2 permanent;

    location / {
    root html;
    index index.html index.htm;
    }
    }
    ```
    @shiziqyf 是已经有很多历史的静态页面了,里面链接是写死的,现在域名跟端口需要更新,但要保持大量的旧链接的视频仍然可以打开,才有了这个问题……所以现在面临的问题其实是这些旧链接怎么能保持正常
    yuyuf
        4
    yuyuf  
       2023-12-20 17:20:49 +08:00
    如果不能换参数,也就是要实现
    aaa.example.com 能访问资源
    bbb.example.com: 能访问网站
    这个意思吗
    那就原来配置不能动,再加一个 bbb.example.com 的配置,配置内容跟 aaa.example.com 一样
    Kinnice
        5
    Kinnice  
       2023-12-20 18:00:47 +08:00
    在 location / { 里面增加
    sub_filter 'aaa.example.com 'bbb.example.com';
    sub_filter_once off;
    rockyliang
        6
    rockyliang  
       2023-12-20 18:06:34 +08:00
    @Linken404 #3 ,单纯看配置文件,bbb.example.com 的 http 协议监听端口是 8080 ,你在 return 301 的时候又没有指定 8080 端口,不确定是不是这个原因
    Linken404
        7
    Linken404  
    OP
       2023-12-20 18:17:28 +08:00
    @shiziqyf 其实还有个原因没说到,那就是 bbb.example.com 是过 cdn 的,而 aaa.example.com:8080 没办法过 cdn ,为了保持流量带宽正常,需要让指向旧的 aaa.example.com:8080 的这些访问请求也能通过 cdn 代理出来。
    我设想的是:客户端-->aaa:8080-->bbb:443-->cdn 缓存-->真正的源站
    所以单独建一个配置是做不到的


    @Kinnice 这个确实学到了,改动稍微有点大,但确实是个临时能解决问题的好办法,我当最终的备用方案吧


    @rockyliang 那倒不是,我试了一下其实如果不带参数直接访问资源的那些 url 都已经访问成功了,但还有一部分是像示例中那种一个 url 中用参数调用了多个文件,就这种目前我还没办法处理
    Linken404
        8
    Linken404  
    OP
       2023-12-20 18:20:12 +08:00
    @shiziqyf 百度的 CDN 便宜,但是不支持自定端口,对外开放的只有 80 跟 443 ,我们这种非标准的 8080 端口过了一遍 cdn 之后就不生效了,别的 CDN 做视频缓存又太贵了,所以只能自己想办法。
    runwu2022
        9
    runwu2022  
       2023-12-21 09:58:14 +08:00
    后端服务器上绑定了之前的 aaa.example.com:8888 了吧,代码层面的配置导致响应页面内有原来的域名的相关配置,光 301 跳转无用。你应该参考 5 楼配置,直接用 sub_filter 修改。
    Linken404
        10
    Linken404  
    OP
       2023-12-21 10:32:55 +08:00
    @runwu2022 前端页面是纯静态写死的调用链接,后端视频服务器的地址倒可以随便调整和添加,这就是我最开始想的路子。今天尝试了一下确实 sub_filter 是最能直接出效果的,就是网站很多,批量改动稍微有点麻烦
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     1342 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 26ms UTC 17:01 PVG 01:01 LAX 09:01 JFK 12:01
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86