但据说有些版本的IE不识别这个http 。
4.服务器代理。例如,服务器写入一个URL。它的参数是一个url。这个服务器会使用参数拼凑出一个URL,使用库来执行这个URL,然后将读取到的内容输出到http客户端。
nginx反向代理实现跨域
上面提到的跨域方法都存在一些问题。有的无法支持所有浏览器,有的需要修改代码,有的需要重写服务器端代码。有些可能会在等待场景中出现问题。
其实利用nginx反向代理实现跨域是最简单的跨域方法。只需修改nginx的配置即可解决跨域问题,支持所有浏览器,不需要修改任何代码,不会影响服务器性能。
我们只需要配置nginx,在一台服务器上配置多个前缀,就可以将http/https请求转发到多台真实服务器上。这样,该服务器上的所有URL都具有相同的域名、协议和端口。因此,对于浏览器来说,这些URL都是同源的,不存在跨域的限制。事实上,这些 URL 实际上是由物理服务器提供服务的。所有这些服务器上的 URL 都可以在这些服务器内跨域调用。
下面以nginx支持跨域为例进行详细说明。
例如,我们有两个开发项目: 和 。
项目上的脚本需要通过ajax调用的url来获取一些数据。
正常部署下,会出现跨域问题,浏览器会拒绝执行如下调用。
$("").click( () {
$.get("127.0.0.1:8081//json", () {
$("div").html();
});
});
现在修改项目文件。这样,访问同一源的URL就不会出现跨域的问题。
$("").click( () {
$.get("/json", () {
$("div").html();
});
});
然而我们的项目实际上并没有/json这样的URL,那么如何处理呢?
我们这样写nginx配置文件:
10
11
12
{
;
/{
;
:/tmp/.sock;
/{
^.+/?(.*)$ /$1 中断;
;
:/tmp/.sock;
我们将项目部署在8080端口的根目录下。将提供Web服务的项目部署在/目录下。
但是我们的项目无法处理//json之类的URL请求。该怎么办?
通过命令^.+/?(.*)$ /$;,nginx可以将所有收到的//*请求转换为/*请求,然后转发到背后真正的Web服务器。
这样,ajax客户端程序只需要给出特定前缀的URL就可以调用任意服务器提供的接口。
甚至,通过nginx的反向代理,我们还可以调用其他公司开发的网站提供的接口。
喜欢,
/搜狐{
^.+sohu/?(.*)$ /$1 中断;
;
;
我们把整个sohu网站搬到了我们的8080:/sohu/目录下,我们可以尽情使用它的服务。
顺便说一句,在命令^.+sohu/?(.*)$ /$;中,$1代表(.*)部分。第一对 () 中的参数为 $1,第二对 () 中的参数为 $2,依此类推。
总结
本文介绍如何利用nginx的反向代理功能实现任意应用和网站的跨域访问。
nginx 是一种高性能 Web 服务器,通常用作反向代理服务器。 nginx 作为反向代理服务器,将 http 请求转发到另一台或某些服务器。
通过将本地URL前缀映射到需要跨域访问的Web服务器,可以实现跨域访问。
对于浏览器来说,访问的是同源服务器上的URL。而nginx通过检测url前缀将http请求转发到后面真实的物理服务器。并通过命令去掉前缀。这样真实服务器就可以正确处理请求,并且不知道该请求来自代理服务器。
简单来说,nginx服务器欺骗浏览器认为是同源调用,从而解决浏览器的跨域问题。通过重写URL,它欺骗真实服务器,使其认为http请求直接来自用户的浏览器。
这样,要解决跨域问题,只需要更改nginx配置文件即可。简单、强大、高效!
扫一扫在手机端查看
我们凭借多年的网站建设经验,坚持以“帮助中小企业实现网络营销化”为宗旨,累计为4000多家客户提供品质建站服务,得到了客户的一致好评。如果您有网站建设、网站改版、域名注册、主机空间、手机网站建设、网站备案等方面的需求,请立即点击咨询我们或拨打咨询热线: 13761152229,我们会详细为你一一解答你心中的疑难。