nginx反向代理解决浏览器跨域问题

1. 背景

最近在实现一个页面中加载直播视频的小功能,客户只给了直播流地址,是基于http协议的HLS格式视频。使用h5播放该地址会出现了跨域的问题,去网上看了很多资料,特在此总结。如有不足,欢迎留言指正。

2. 跨域原因

跨域出现的根本原因是浏览器的同源策略。浏览器为了安全考虑,只允许在同一协议、同一域名、同一端口下进行通信,否则就无法访问。

3. 跨域的解决方案

3.1 CORS(跨域资源共享)

跨源资源共享 (CORS) 是一种基于HTTP 头的机制,该机制通过允许服务器标示除了它自己以外的其它origin(域,协议和端口),这样浏览器可以访问加载这些资源。

个人认为CORS是解决跨域问题最简单粗暴的方法。只要在要访问的服务器头部添加许可(Access-Control-Allow-Origin: http://your ip),允许不同源的浏览器访问就可以了。也可以直接Access-Control-Allow-Origin: ‘*’,允许所有外部地址访问,但是这样会存在安全问题。

3.2 nginx反向代理

1. nginx介绍(正向代理、反向代理、负载均衡)

相对来说,nginx是解决跨域问题的可行方案。在介绍之前,先了解一下相关概念。

  • 正向代理
    先举个例子,假如我现在没办法访问百度,而另一台服务器可以,我先访问这台服务器,然后通过这台服务器访问百度,这样通信就完成了。但是百度并不知道访问它的实际用户是谁,这样相当于隐藏了客户端

  • 反向代理
    假如我现在可以访问百度,但是百度服务器压力太大,把我的请求转到了其他服务器进行处理,这就是返校代理。对于客户来说,并不知道他访问的到底是哪个服务器,隐藏了服务端

  • 负载均衡
    上面的反向代理可以很好的实现负载均衡,减轻服务器压力。当众多用户访问一个域名的时候,他可以根据需要转发到其他的服务器,这样就可以减小服务器压力,加快访问速度。

2. nginx反向代理解决跨域的思路

反向代理解决跨域的总体思路就是基于nginx的代理服务器,全部通信全部通过它进行。假设当前域名为http://a.com资源需要访问域名为http://b.com的资源,此时nginx代理服务器地址与a同源,但是为a.XXX,服务器在监听到改地址后自动转发为b的地址。
这部分参考如下文章,写的很详细https://segmentfault.com/a/1190000012859206

3. nginx解决跨域具体步骤

具体步骤见https://www.cnblogs.com/mollie-x/p/10463140.html

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Nginx作为反向代理服务器可以用来解决跨域问题。通过将本地的URL前缀映射到需要跨域访问的Web服务器上,Nginx可以将HTTP请求转发到后端的真实服务器上,并通过rewrite命令去掉前缀。这样,真实的服务器可以正确处理请求,而不知道请求来自代理服务器。\[2\] 在Nginx的配置文件中,可以使用location指令来匹配需要跨域访问的路径,并在proxy_pass中填写需要访问的外域API地址。例如,当访问"http://localhost:8088/api/.*"路径时,可以将proxy_pass设置为"http://test.abc.com/",这样实际上访问的是"http://test.abc.com/.*",但在浏览器中显示的仍然是原来的路径"http://localhost:8088/api/.*"。需要注意的是,在匹配路径和代理路径的末尾都不能少斜杠,这是Nginx的规则。修改完nginx.conf文件后,需要重启Nginx才能生效。\[3\] 通过这种方式,Nginx可以实现跨域访问解决跨域问题。 #### 引用[.reference_title] - *1* [Nginx 反向代理解决跨域问题](https://blog.csdn.net/weixin_43066287/article/details/121104183)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [ajax nginx 转发 sessionid_【Nginx】使用Nginx如何解决跨域问题?看完这篇原来很简单!!...](https://blog.csdn.net/weixin_39954698/article/details/109917716)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [nginx反向代理解决跨域请求问题](https://blog.csdn.net/lm____/article/details/120462636)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值