proxy代理,集中hosts绑定

来源:互联网 发布:mac如何pe启动 编辑:程序博客网 时间:2024/05/16 16:09

题记:

问题主要是因为自己工作的环境经常需要进行hosts绑定的操作,有时候要绑定10几个,多个环境切换非常麻烦,后来发现有的同事采用代理的方式统一绑定,实在觉得是个恢长好的办法啊,所以对代理工具就进行了比较详细调查,写下了这篇文章,文章的解决的关键问题也是如何通过代理进行hosts绑定。


以下文章是我的个人理解,不足或错误的地方敬请指正,谢谢!


代理这个词相信对大家来说都不陌生,熟悉翻墙的同学一定很熟悉。呵呵这篇文章不要说明如何找梯子,相信大家是八仙过海各有各的办法。


学习代理首先要明确两个概念:正向代理/反向代理。关于正向和反向的说明google一下资料很多。

简单理解所谓正向就是一个从内向外的访问,而所谓反向则是一个从外向内的访问。正向和反向是一个相对的概念。

简单说吧,我们知道nginx是一个非常优秀的反向代理工具,各大网站很多都在用nginx做反向代理,对于外部访问网站的用户开放的nginx反向代理服务器,而页面的生成工作则是通过内部的web服务来完成的,服务的实现方式可能千差万别。

而正向代理,则是我们一般意义的翻墙,通过代理去访问,然后从代理中返回结果,原理就是这样的。

那么何为相对呢?相对于内部的服务那么nginx就是反向代理,代理接受用户请求;而相对于用户,就是正向代理,代理用户去请求。明白了这个相对的过程,实际我们就可以让nginx成为我们的正向代理工具,而将外面的网络视为整个后端在给我们提供服务。


有了以上的理解,我们进入主题,重点说明正向代理如何实现快捷的host绑定,也是我们工作中常用的。


一.  nginx,这里我默认读者有一定的nginx配置经验~~

nginx太尼玛的强大了!简直无所不能,通过nginx我们可以把HTTP协议中指定的host代理到你需要的位置,类似host绑定,类似下面:

  location / {
                # 一定要配置DNS                                                                                                        
                resolver 10.***;

                # 把baidu重定向到google                                                                                                
                 if ($http_host ~* www\.baidu\.com.*$) {                                                                              
                                proxy_pass http://www.google.com;                                                                     
                                                     
                 }   

    # 其他的直接访问

      proxy_pass $scheme://$http_host;

}


当然host绑定的方式我们也可以通过设置不同的server来完成,相同的端口不同的host,从而proxy_pass到不同的位置,这种方法比if可能更灵活。


还有一点nginx我们可以配置不同的端口来重新绑定不同的host!,这样使用代理的人只要改变端口就可以直接把一组host绑定切换到另一组了!!我们在工作中可以方便进行绑定环境切换


!!!遇到的问题:

1. 我做了比较具体的测试对比,发现通过nginx代理访问网站速度和直接访问对比明显变慢!测试的网站是sina.com/126.com的。

我尝试了调整一下内容,试图提供速度,

<1> 我相信nginx绝对不是瓶颈,他的性能是无可质疑的,一定是我配置的问题,或者哪里有用错的地方,而且我使用的是内网环境,代理的网速绝对是无可质疑的

<2> 我修改了诸多配置参赛,设置缓存等但都是无效的

<3> 和squid做了对比,尼玛的,squid一点问题没有,没有什么速度差别!如果你怀疑squid的cache问题,好吧,我测试时候已经关闭了squid的cache,如果你怀疑是browser的cache问题,好吧,我每次测试前都会清空browser的cache,不管你信不信,我反正信了!


目前上面问题原因我没有能查明!希望有哪一位大虾给个解释。


2. 网上说nginx代理https貌似不行,但本人没有做太多具体测试,这里只是提一下



二. squid

通过设置hosts_file 参数来指定自己配置的host文件,从而实现hosts的批量绑定功能。squid使用相对比较简单,不用太多学习想nginx的配置知识,比较容易上手,一般大家对hosts文件格式应该已经非常熟悉了

总结一下:

1. squid不存在上面nginx 的访问变慢问题

2. squid是专门的正像代理工具,而nginx是专门的反向代理,所以某些方面squid在正像代理比较全面,https等协议支持的也恢长好

3. squid 每次修改host都需要重新加载配置,这并不需要重启squid,但是重新加载配置host文件并不是马上生效的!!有一个时间,这应该是squid本身cache了host,所以用户如果想马上生效需要,重启suqid,给个脚本

echo 'immediately stop squid: squid -k interrupt'
/home/shawn/soft.compile/root/squid-3.1.18/sbin/squid -k interrupt
echo 'sleep 2s'
sleep 2
echo 'start squid now'

4. squid  hosts_file的不灵活地方,一个代理如何实现多种类型的host绑定呢??例如我们只需要修改不同的端口就可以切换代理,而不用动squid?这点nginx可以很容易做到,但是squid我没有找到方案!求解啊!基于nginx 至少可以通过开启不同的端口来完成这个功能,squid可以吗?或者其他更灵活的方式?



怎么说呢,我恢长喜欢nginx,如果nginx能满足我,我不想通过其他的方式解决,但是实际上我最后还是选择了squid,感觉他正向代理做的更好,还有一个很大的原因,就是我前面提到的速度变慢问题!求解啊!

原创粉丝点击