`
truemylife
  • 浏览: 230951 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
文章分类
社区版块
存档分类
最新评论

多域名资源调用及限制

阅读更多

背景和应用场景:

       当前团队运营多个网站,比如有两个网站www.t1.com、www.t2.com。技术团队同时掌控了t1、t2的资源,理论上t2可以使用t1页面级的资源,这样有利于业务解耦和集中维护。但页面级的资源存在跨域安全问题,关于跨域问题可见前文http://truemylife.iteye.com/admin/blogs/1454300。这里由于t1与t2并非主次域名,因此若按前文,将无法实现跨域调用。这种情况下,要实现资源调用,没有条件只能创造条件,好让t1,t2实现同源,也就是实现同域名,这样就绕过了此问题。

 

Nginx配置:

配置www.t1.com片段

 server {

        listen 80;

        server_name www.t1.com;

       server_name_in_redirect off;

      gzip  on;

      gzip_vary on;

      gzip_proxied any;

      gzip_types text/plain text/css application/json application/x-javascript text/xml application/xml application/xml+rss text/javascript;

      gzip_buffers 16 8k;

        location / {

        proxy_pass http://192.168.90.111:8080;

        proxy_redirect          http://wwwt1.com/ /;

        proxy_set_header        Host            $host;

        proxy_set_header        X-Real-IP       $remote_addr;

        proxy_set_header        X-Forwarded-For $proxy_add_x_forwarded_for;

        client_max_body_size    10m;

        client_body_buffer_size 128k;

        proxy_connect_timeout   90;

        proxy_send_timeout      90;

        proxy_read_timeout      90;

        proxy_buffers           4 32k;

        }

    }

再新增一个供www.t2.com调用的同源域名t1.t2.com

server {

        listen 80;

        server_name t1.t2.com;

       server_name_in_redirect off;

      gzip  on;

      gzip_vary on;

      gzip_proxied any;

      gzip_types text/plain text/css application/json application/x-javascript text/xml application/xml application/xml+rss text/javascript;

      gzip_buffers 16 8k;

        location / {

        proxy_pass http://192.168.90.111:8080;

        proxy_redirect          http://t1.t2.com/ /;

        proxy_set_header        Host            $host;

        proxy_set_header        X-Real-IP       $remote_addr;

        proxy_set_header        X-Forwarded-For $proxy_add_x_forwarded_for;

        client_max_body_size    10m;

        client_body_buffer_size 128k;

        proxy_connect_timeout   90;

        proxy_send_timeout      90;

        proxy_read_timeout      90;

        proxy_buffers           4 32k;

        }

       if ($request_uri !~* "/(s|billstudy)/(.*)") {

         rewrite  ^(.*)$  http://www.t1.com  break;

      }

    }

这样,www.t1.com与t1.t2.com实际上指向相同的应用,t1.t2.com存在的意义就是供www.t2.com调用页面资源,因为www.t2.com与t1.t2.com是主次域名关系,主次域名跨域方案就简单了,参考前文。

对于t1.t2.com这个访问域名,我们并不想对外公开,因此做了访问的限制,看t1.t2.com的配置里这句:

if ($request_uri !~* "/(s|billstudy)/(.*)") {

         rewrite  ^(.*)$  http://www.t1.com  break;

}

除了公开/s/与/billstudy/这个访问路径外对www.t2.com公开外,其他通过t1.t2.com访问,都会被重定向www.t1.com。这样有利于资源权限的控制。还可以加上防盗链的配置。

Nginx有大量的正则表达式应用,参考http://www.howtocn.org/nginx:pcre

Nginx rewrite样例 http://blog.csdn.net/cnbird2008/article/details/4409620

另外在修改nginx.conf时,一定要注意空格,比如if($request_uri !~* "/(s|billstudy)/(.*)")是不符合书写格式的,就无法启动nginx,if后面一定要留空格。

 

javascript支持跨域

通过iframe实现跨域调用资源时,需要主次页面都置

<script>document.domain="t1.com";</script>

但如果想资源被多个域名调用,此时定死指定t1.com就出错了,需要动态扩展, 

<script>
if(location.href.indexOf("t2.com")>0){
   document.domain="t2.com";
}else{
   document.domain="t1.com";
}
</script>

 这样资源就能同时被t1.com、t2.com调用了,当然访问资源的时候需要使用不同的域名,比如t1.com要调用t1.com的资源,使用http://www.t1.com/xxx.html; t2.com要调用xxx.html时,必须使用http://t1.t2.com/xxx.html。按以上配置和代码扩展,可以进一步扩展出更多的不同域名之间的页面级资源调用。

 

分享到:
评论

相关推荐

    js与applet的相互调用资源包

    - Applet和JavaScript的交互可能会受到浏览器的同源策略限制,确保它们在同一域名下运行。 - 使用`&lt;applet&gt;`标签时,要确保用户已经安装了Java运行环境。 这个"js与applet的相互调用资源包"可能包含了相关的示例...

    iframe跨域互相调用资源

    在互联网应用中,由于同源策略的限制,不同域名下的网页之间无法直接通信。然而,为了实现特定功能,如嵌入第三方内容或者实现跨域数据交互,开发者常常会利用`iframe`来解决这一问题。本示例“iframe跨域互相调用...

    多线程批量检测未注册域名

    4. **错误处理**:在多线程环境中,必须处理各种可能的异常,例如网络连接问题、超时、API调用限制等。 5. **数据分块和批处理**:为了减少网络延迟和提高效率,可以将待检查的域名列表分成多个批次,每个线程处理...

    JS跨域调用Window服务代码示例

    在JavaScript(JS)中,由于同源策略的限制,我们不能直接从网页中访问其他不同源(协议、域名或端口)的资源。然而,为了实现特定功能,如跨域调用Window服务来获取本机硬件信息,我们需要采用一些特殊的技术来规避...

    Ajax调用webservices

    默认情况下,浏览器的同源策略限制了Ajax调用只能访问同源(协议、域名、端口相同)的URL。若需跨域访问,服务器需要设置CORS(Cross-Origin Resource Sharing)头,允许特定的跨域请求。 六、安全考虑 在使用Ajax...

    AJAX的阻塞及跨域名解析

    AJAX阻塞及跨域名解析 AJAX(Asynchronous JavaScript and XML)是一种非常流行的Web开发技术,但是它也存在一些问题,其中之一就是阻塞和跨域名访问问题。在本文中,我们将讨论AJAX的阻塞原因和跨域名解决方案。 ...

    api地址专家直接直接调用地址

    2. **地址解析与展示**:将复杂的API调用过程简化,清晰地展示API的URL结构,包括协议(如HTTP或HTTPS)、域名、路径、查询参数等,帮助开发者理解如何正确构造调用请求。 3. **调用示例**:提供实际的调用示例,...

    js调用webService组件

    需要注意的是,由于同源策略的限制,JavaScript默认只能向同一域名下的资源发起请求。如果你的JavaScript代码和WebService不在同一个域下,你需要在服务器端设置CORS(跨源资源共享)或者使用JSONP(JSON with ...

    ajax跨域调用wcf实例--改分重传

    在同源策略限制下,JavaScript通常不能访问不同源(协议、域名或端口不同)的资源。然而,为了实现Web应用的灵活性和扩展性,开发者有时需要突破这一限制,进行跨域请求。Ajax跨域是通过设置HTTP头信息(如`Access-...

    jQuery使用Ajax方法调用WebService

    由于同源策略的限制,Ajax请求通常只能访问同源(协议+域名+端口)的资源。如果WebService不在同一个域下,你需要在服务器端启用CORS(Cross-Origin Resource Sharing)或者使用JSONP(JSON with Padding)技术。 ...

    JS跨域调用WCF服务实例(WCF服务宿主到控制台)

    在Web浏览器的安全策略中,同源策略限制了JavaScript只能访问与当前页面同源(协议、域名和端口相同)的资源。因此,当JS试图调用不同源的WCF服务时,就会触发跨域问题。为了解决这个问题,我们需要在WCF服务端配置...

    qqnc.cc域名WHOIS查询系统显示记录版 v1.0.rar

    通过输入域名,系统将调用这个页面来执行查询并返回结果。 2. `index.asp`:作为系统的主页,它通常会提供一个用户界面,让用户输入域名进行查询,并展示查询结果。页面设计可能包括输入框、查询按钮以及查询结果的...

    js调用ocx

    由于JavaScript运行在浏览器的安全沙箱中,直接操作系统资源的能力受限,但通过调用OCX控件,开发者可以打破这一限制,使网页具备更强大的功能。 调用OCX控件的过程通常涉及以下几个步骤: 1. **注册OCX控件**:...

    解决Vue调用springboot接口403跨域问题

    跨域资源共享(CORS)是一种安全机制,它限制了Web页面上脚本在不同域之间请求资源的能力。当一个Web应用试图从不同源的服务器请求资源时,浏览器会检查服务器的响应头,如果响应中没有正确的CORS头部信息,则会阻止...

    js跨域调用

    然而,由于浏览器的同源策略限制,JS默认不能跨域(cross-domain)进行请求,即只能访问与当前页面协议、域名和端口相同的资源。这在需要从不同源获取数据时构成了障碍,例如,当我们需要使用JS调用其他服务器上的...

    asp域名查询接口,无须转向其它网站!

    9. **权限控制**:根据应用场景,可能需要实施权限控制,限制非授权用户的访问,或者限制查询次数以防止滥用。 10. **版本管理**:随着功能的更新和优化,接口可能需要发布新版本,因此版本管理和向后兼容性也是...

    PHP实例开发源码-域名批量查询系统 php版 v1.0.zip

    5. **错误处理**:在处理过程中可能会遇到各种问题,如网络延迟、API调用限制、无效的域名等,系统需要有适当的错误处理机制来保证用户体验。 6. **安全性**:考虑到可能存在的安全风险,比如SQL注入或跨站脚本攻击...

    [主机域名]php ajax 域名查询_domainsearch_PHP项目源码.zip

    同时,API调用可能有频率限制,PHP代码需要适当地处理超时和重试机制,以确保服务的稳定性和效率。 6. 用户界面设计:前端页面应该具有良好的用户体验,包括清晰的输入提示,友好的错误反馈,以及快速的响应时间。...

    jquery跨域调用wcf

    跨域是指浏览器的同源策略限制了JavaScript从一个域名下的网页向另一个域名下的资源发送Ajax请求。这一策略是为了防止恶意网站通过脚本访问并操作其他网站的数据,从而保护用户信息安全。然而,在某些场景下,如前后...

    url域名抓取

    在IT行业中,"URL域名抓取"是一种常见的网络数据挖掘技术,主要目的是从网页或互联网上批量收集和整理URL(统一资源定位符),也就是我们常说的网址。这项技术广泛应用于搜索引擎优化、数据分析、市场研究等领域。...

Global site tag (gtag.js) - Google Analytics