设为首页 收藏本站
查看: 1291|回复: 0

[经验分享] [分享]windows下编译squid的经验(转)

[复制链接]

尚未签到

发表于 2015-9-3 11:26:50 | 显示全部楼层 |阅读模式
  squid是什么我这里就不说了,这不是本文的重点,总之它是一个集:代理、加速、缓存、负载均衡、防盗链、访问控制等多功能的一个超牛X开源软件,如今已经广泛应用于很多领域。对于缓存和加速这一领域,如今各大门户网站都是用它做的CDN服务。
  我的网站由于访问量比较大,一台服务器根本支撑不起,所以我研究了一下它,并成功的搭建了CDN服务,由多台服务器组建了一个简单的CDN网络来达 到负载均衡的效果。但同时我也发现了一个问题,squid官方提供的最新稳定版本(squid-2.7stable4)默认的文件描述符(file descriptors)为2048个,一般来说一个HTTP请求会打开一个文件描述符,假如有一个网页,代码里有3个js,1个css,10张图片,那 么每个访问者打开这个页面都将打开15个文件描述符,这样当这台缓存服务器同时被很多人访问时,文件描述符很快就会被用完,接着网站偶尔就会打不开,日志 里会报WARNING! Your cache is running out of filedescriptors这样的错误。
  到网上搜了一下,唯一的解决办法是重新编译一下squid的源代码,用参数--with-maxfd。但网上搜到的编译方法都是在linux下的, 我没有看到有哪个在windows下使用squid并且在windows下编译的。我经过大半个月的研究,克服了重重困难和问题,最终成功的在 windows下编译了squid,为了后人不像我这样由于搜不到任何资料,发贴询问也无人能解决,几乎绝望的放弃,所以我把自己成功的经验和走的一些弯 路发出来,希望以后搜索到这篇文章的人可以借鉴和参考。
  我下载了官方提供的一份最新的源代码,首先要解决的问题是怎么编译。官方文档全英文的,看得我眼睛疼,看了半天终于看懂了,大致是说有2种环境可以 在windows下编译squid,一种是基于Microsoft Visual C++,另一种是基于MinGW。由于我不是搞C的,也没弄过linux,对于这些简直是七窍通了六窍。在此之前我请了一个搞C++的同事帮我编译,因为 他机器上装有Microsoft Visual C++。可是他说碰到太多错误了,压根通不过编译检测,后来就没弄了,所以我不得已自己硬着头皮研究。因为他是用Microsoft Visual C++没弄出来,所以这次我打算用另一种环境MinGW来编译。
  在搭建编译环境这里,我走了许多弯路,比如我是先找到了这个页面
http://squid.acmeconsulting.it/buildenvironment.html
后来才知道这个文档实际上是老版本的MinGW,需要依次安装多个东西,而新版的只有一个东西,在装的时候自己勾选相应的组件就行了。可我下到的版本却是最新的,用老的办法去装,反而会使得环境内各组件的版本不一致。我编译的时候碰到了错误,搜google才知道原来是环境问题,后来又重新检查环境,我也不懂,检查不出什么问题。只好又重新看官方文档,后来才发现了这个页面
http://squid.acmeconsulting.it/SquidNT27.html
也就是对于2.7版本的编译方法。看到这里我才发现原来还有第3种编译环境:Cygwin。不过我已经开始用MSYS + MinGW了,所以就先不考虑Cygwin。
  在这个页面上,它讲的是搭建MinGW环境需要安装:
MSYS 1.0.9或更高
MinGW 3.1.0或更高
Windows API 2.4.0或更高
MSYS Developer Tool Kit 1.0.1或更高
  这4个东西在官方网站上都有下载,不过我们只需要下124这3个就可以了,第3个Windows API在安装MinGW时会自动装上。首先是装MinGW,安装路径为C:\msys\1.0\mingw,装的时候勾选MinGW base tools、g++ compiler、MingW Make这3个即可。然后装MSYS,按默认的路径C:\msys\1.0装。装完配置时会有3个问题,前2个按y回车,第3个让你输入mingw的路径,C:/msys/1.0/mingw回车(注意是反斜杠),最后安装msysDTK。这样应该环境就搭建好了。
  将下载的squid源代码解压至任何目录(所在路径中不能包含中文),例如c:\squidsrc。从开始菜单>MinGW>MSYS启动msys,在命令提示符下输入cd c:\squidsrc回车,这样就进入到了squidsrc目录。接下来输入
  ./configure --prefix=c:/squid --with-maxfd=20480 --disable-wccp --disable-wccpv2 --enable-win32-service --enable-default-hostsfile=none
  --prefix=c:/squid表示将程序编译到哪个目录,这个目录也是你发布程序的安装目录。--with-maxfd=20480就是前面说的文件描述符上限了。这里我把默认的2048改到了20480,应该足够了。--disable-wccp --disable-wccpv2 这2个参数非常重要。我在这个参数上走了很多弯路,主要是没有看到官方最新文档上说,windows下不支持wccp,必须禁掉才能编译。--enable-win32-service表示可以配置为windows服务,这功能也是必须的, --enable-default-hostsfile=none表示启用但不设置默认的hosts文件路径。这个命令的含义就解释到这里。如果幸运的话,我下面这段就可以不用看了。
  不过我很不幸,又碰到了很多问题。第一个问题是我运行之后,马上报找不到cfgaux/install-sh这个文件,这个问题整了我很久,因为cfgaux目录下根本没有install-sh这个文件,我去哪弄一个来呢。我先是自己建了个空的文件取名为install-sh,被我骗过去了,但后面又出现了许多错误,让我明白骗过这一步是没用的。于是又开始google,在一个英文博客上,一个老外也碰到这个问题,另一个牛人解释说,这个可能是编译环境的问题,说是缺少了一个是lib,但没说具体的解决办法,后来那家伙自己试了下执行bootstrap.sh这个文件,结果就可以了。于是我也找bootstrap.sh这个文件,果然就在源代码的根目录下。用命令./bootstrap.sh回车执行成功,果然自动在cfgaux下生成了好几个文件,其中就有install-sh这个东东。果然重新执行前面的./configure命令,就通过了。
  如果配置开始了,但输出一小段后就报错结束了,显示什么gcc....no之类的东西,则说明是环境没有搭建成功。我先前就因为环境问题,一直卡在这里。问题在于我没有把mingw装在C:\msys\1.0\mingw这个目录里,导致编译器找不到mingw的目录,后来我自己剪切过去了才好。
  如果配置通过了,那胜利就在眼前了。接下来输入命令make回车。不过我在这一步也卡了很久,原因是一直报一个undefined reference to的错误,找了很久也没找到解决办法。后来无意中看到官方文档说这些文件都是linux下的,在windows下要用dos格式,而我用windows下的记事本保存过几个源代码文件,尽管没改任何代码,但是一保存文件头就变了,这样导致预编译时将找不到那个文件里的函数,后来我发现只要用editplus保存就没事了。
  如果make也过了,那就接着输入make install命令,就可以把文件编译到c:\squid目录了。这样整个编译过程就大功告成了。
  看似简单的几个步骤,但是我却走了很大的弯路,其中最主要的原因是我不懂linux,没搞过C编程,所以这一切对我来说都非常陌生,只有摸着石头过河,所以走弯路也是很正常的。不过,经过我的总结,得出以下经验:
  1.网络上搜到的资料也许都是过时了的,一定要注意其发表时间,错误的资料比没有资料更可怕。
2.一定要多看官方文档,哪怕它是全英文的,也得慢慢啃完。当然官方文档也要看最新的,最好别像我这么倒霉,总是先看到过时的
3.linux下的文件格式和windows下不同,如果要编辑,最好用editplus或其他专门的文本编辑软件来编辑和保存。
4.源代码的版本不要下错了。我一开始下到个vc++专用的版本,然后用mingw来编译,完全背道而驰,怎么可能成功呢,因为这个错误浪费了我好几天的时间
5.多问google,别轻易放弃,黄天不会负有心人

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-109004-1-1.html 上篇帖子: CDN加速——squid 优化之缓存方向总结[转] 下篇帖子: squid清除缓存
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表