使用nginx实现对不同域名访问的转发

使用nginx实现对不同域名访问的转发

 

    公司图片服务器上线之后,因为页面链接是写死的,因此只解析到网通的ip上,造成电信用户在使用电信域名打开图片的时候比较慢的解决方案。
    1、比较好的方式就是采用智能DNS服务器的方式,根据用户是电信或者是网通ip,解析到电信和网通的ip,加速用户的访问。现在智能DNS可以采用的方式有两种:
        (1)采用现在免费的智能DNS服务器,但是问题在于不能保证稳定性,而且在作出调整的时候也不是很方便,因为是免费的服务的态度不知道会怎么样。
         (2)架设公司自己的智能DNS,这种方式容易控制,但是需要公司有DNS服务器,需要机器和后期的维护。不过一旦架设起来,应用和修改是还是比较方便的。
    2、在程序里面做判断,判断请求的域名或者是来源ip,可是这样比较复杂的判断势必给tomcat造成很大的压力,之前和开发人员沟通,感觉代码控制不是很容易实现,开发工作量也是比较大的。
    3、尝试使用web服务器如nging对正则表达式支持的比较好,可以考虑使用测试下
    ( 1)巧用防盗链的方式:
        valid_referers none blocked  *.xxx.cn; ----指定来源的域名不为xxx.cn过来的转发请求,进行防盗链的处理,这里一般过来的都是为xxx.cn或者xxx.net.cn,因此可以将xxx.net.cn和其他域名过来的请求转走。
        if ($invalid_referer){ 
        {
        rewrite  "^/(.*)"       http://pic.xxx.net.cn/$1 permanent;
        } ----上面的if语句,是对请求进行rewrite,完成请求的转发。
      巧用防盗链的方式,是一种比较不错的方式,能很方便的实现对由xxt.net.cn域名过来的访问转发至pic.xxt.net.cn上,在进行处理的时候只需多设置一个虚拟主机即可,是一种比较不错的方式。在进行测试的过程中,这种方式是最先通过测试,实验成功的。
     (2)使用nginx中定义的变量$http_referer:
        if ( $http_referer ~* xxx.net.cn )-----首先判断本次请求是由哪个服务器上转发过来的。变量$http_referer所提取的是本机请求从哪个域名上转发过来的,如本机请求是从club.xxx.net.cn上转过来的,那么 $http_referer 就是 club.xxx.net.cn,如果是从club.xxx.cn上转发过来的就是club.xxx.cn;
        {
        rewrite  "^/(.*)"       http://pic.xxx.net.cn/$1 permanent;
        }-----同样使用rewrite进行转发,完成对请求的转换;
       这种方式也是一种比较不错的方式,虽然在测试的过程中对if语句中的判断条件进行测试的过程中遇到了一些弯路,但是总体上走下来还是比较顺利的。而且合理的利用$http_referer ,让转发的请求会少一些。而且在做防盗链的时候也可以在两个虚拟主机里面都可以做,加快访问的速度。
       当然上面的两种方式都是因为:
       (1)现在没有智能DNS,无法实现电信和网通域名的统一而提出的转发方案,如果能实现智能DNS的话,还是建议使用智能DNS。
       (2)在代码里面控制比较浪费资源,且开发代码量比较的情况下提出的,针对图片服务器的上线后只能使用网通域名的情况提出的解决方式。
       (3)nginx支持正则表达式。这是很重要的一点,不然也无法实现类似情况的处理,在apache是无法实现这种基于域名的转发的。因此对nginx的研究还是要在应用的过程中不断的深入学习。

你可能感兴趣的:(nginx,正则表达式,测试,服务器,电信,DNS服务器)