因为某些历史原因,有个网站的对外端口不能改变,但目前必须更换域名和端口。 例如原网站的一个正常访问链接是:
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 的。结果发现后面的参数没有变,导致访问异常,视频不能播放。
请问具体应该怎么做,才可以做到上面所要达到的效果呢?
1
OceanBreeze 2023-12-20 17:03:23 +08:00
你不发 nginx 配置让大家怎么帮你?
|
2
yuyuf 2023-12-20 17:09:04 +08:00
变后面的参数,得看具体代码实现,不是配置一下就行了的。
如果参数的域名服务端下发的,那得服务端改 如果参数是前端拼接的,那得看前端的是怎么拼接的 |
3
Linken404 OP @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 是已经有很多历史的静态页面了,里面链接是写死的,现在域名跟端口需要更新,但要保持大量的旧链接的视频仍然可以打开,才有了这个问题……所以现在面临的问题其实是这些旧链接怎么能保持正常 |
4
yuyuf 2023-12-20 17:20:49 +08:00
如果不能换参数,也就是要实现
aaa.example.com 能访问资源 bbb.example.com: 能访问网站 这个意思吗 那就原来配置不能动,再加一个 bbb.example.com 的配置,配置内容跟 aaa.example.com 一样 |
5
Kinnice 2023-12-20 18:00:47 +08:00
|
6
rockyliang 2023-12-20 18:06:34 +08:00
@Linken404 #3 ,单纯看配置文件,bbb.example.com 的 http 协议监听端口是 8080 ,你在 return 301 的时候又没有指定 8080 端口,不确定是不是这个原因
|
7
Linken404 OP @shiziqyf 其实还有个原因没说到,那就是 bbb.example.com 是过 cdn 的,而 aaa.example.com:8080 没办法过 cdn ,为了保持流量带宽正常,需要让指向旧的 aaa.example.com:8080 的这些访问请求也能通过 cdn 代理出来。
我设想的是:客户端-->aaa:8080-->bbb:443-->cdn 缓存-->真正的源站 所以单独建一个配置是做不到的 @Kinnice 这个确实学到了,改动稍微有点大,但确实是个临时能解决问题的好办法,我当最终的备用方案吧 @rockyliang 那倒不是,我试了一下其实如果不带参数直接访问资源的那些 url 都已经访问成功了,但还有一部分是像示例中那种一个 url 中用参数调用了多个文件,就这种目前我还没办法处理 |
8
Linken404 OP @shiziqyf 百度的 CDN 便宜,但是不支持自定端口,对外开放的只有 80 跟 443 ,我们这种非标准的 8080 端口过了一遍 cdn 之后就不生效了,别的 CDN 做视频缓存又太贵了,所以只能自己想办法。
|
9
runwu2022 2023-12-21 09:58:14 +08:00
后端服务器上绑定了之前的 aaa.example.com:8888 了吧,代码层面的配置导致响应页面内有原来的域名的相关配置,光 301 跳转无用。你应该参考 5 楼配置,直接用 sub_filter 修改。
|