小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

[分享]windows下編譯squid的經(jīng)驗(yàn) - rym1020的生活空間 - 博客園

 thy 2009-07-06

squid是什么我這里就不說(shuō)了,這不是本文的重點(diǎn),總之它是一個(gè)集:代理、加速、緩存、負(fù)載均衡、防盜鏈、訪問(wèn)控制等多功能的一個(gè)超牛X開(kāi)源軟件,如今已經(jīng)廣泛應(yīng)用于很多領(lǐng)域。對(duì)于緩存和加速這一領(lǐng)域,如今各大門(mén)戶(hù)網(wǎng)站都是用它做的CDN服務(wù)。

我的網(wǎng)站由于訪問(wèn)量比較大,一臺(tái)服務(wù)器根本支撐不起,所以我研究了一下它,并成功的搭建了CDN服務(wù),由多臺(tái)服務(wù)器組建了一個(gè)簡(jiǎn)單的CDN網(wǎng)絡(luò)來(lái)達(dá)到負(fù)載均衡的效果。但同時(shí)我也發(fā)現(xiàn)了一個(gè)問(wèn)題,squid官方提供的最新穩(wěn)定版本(squid-2.7stable4)默認(rèn)的文件描述符(file descriptors)為2048個(gè),一般來(lái)說(shuō)一個(gè)HTTP請(qǐng)求會(huì)打開(kāi)一個(gè)文件描述符,假如有一個(gè)網(wǎng)頁(yè),代碼里有3個(gè)js,1個(gè)css,10張圖片,那么每個(gè)訪問(wèn)者打開(kāi)這個(gè)頁(yè)面都將打開(kāi)15個(gè)文件描述符,這樣當(dāng)這臺(tái)緩存服務(wù)器同時(shí)被很多人訪問(wèn)時(shí),文件描述符很快就會(huì)被用完,接著網(wǎng)站偶爾就會(huì)打不開(kāi),日志里會(huì)報(bào)WARNING! Your cache is running out of filedescriptors這樣的錯(cuò)誤。

到網(wǎng)上搜了一下,唯一的解決辦法是重新編譯一下squid的源代碼,用參數(shù)--with-maxfd。但網(wǎng)上搜到的編譯方法都是在linux下的,我沒(méi)有看到有哪個(gè)在windows下使用squid并且在windows下編譯的。我經(jīng)過(guò)大半個(gè)月的研究,克服了重重困難和問(wèn)題,最終成功的在windows下編譯了squid,為了后人不像我這樣由于搜不到任何資料,發(fā)貼詢(xún)問(wèn)也無(wú)人能解決,幾乎絕望的放棄,所以我把自己成功的經(jīng)驗(yàn)和走的一些彎路發(fā)出來(lái),希望以后搜索到這篇文章的人可以借鑒和參考。

我下載了官方提供的一份最新的源代碼,首先要解決的問(wèn)題是怎么編譯。官方文檔全英文的,看得我眼睛疼,看了半天終于看懂了,大致是說(shuō)有2種環(huán)境可以在windows下編譯squid,一種是基于Microsoft Visual C++,另一種是基于MinGW。由于我不是搞C的,也沒(méi)弄過(guò)linux,對(duì)于這些簡(jiǎn)直是七竅通了六竅。在此之前我請(qǐng)了一個(gè)搞C++的同事幫我編譯,因?yàn)樗麢C(jī)器上裝有Microsoft Visual C++。可是他說(shuō)碰到太多錯(cuò)誤了,壓根通不過(guò)編譯檢測(cè),后來(lái)就沒(méi)弄了,所以我不得已自己硬著頭皮研究。因?yàn)樗怯肕icrosoft Visual C++沒(méi)弄出來(lái),所以這次我打算用另一種環(huán)境MinGW來(lái)編譯。

在搭建編譯環(huán)境這里,我走了許多彎路,比如我是先找到了這個(gè)頁(yè)面
http://squid./buildenvironment.html
后來(lái)才知道這個(gè)文檔實(shí)際上是老版本的MinGW,需要依次安裝多個(gè)東西,而新版的只有一個(gè)東西,在裝的時(shí)候自己勾選相應(yīng)的組件就行了??晌蚁碌降陌姹緟s是最新的,用老的辦法去裝,反而會(huì)使得環(huán)境內(nèi)各組件的版本不一致。我編譯的時(shí)候碰到了錯(cuò)誤,搜google才知道原來(lái)是環(huán)境問(wèn)題,后來(lái)又重新檢查環(huán)境,我也不懂,檢查不出什么問(wèn)題。只好又重新看官方文檔,后來(lái)才發(fā)現(xiàn)了這個(gè)頁(yè)面
http://squid./SquidNT27.html
也就是對(duì)于2.7版本的編譯方法??吹竭@里我才發(fā)現(xiàn)原來(lái)還有第3種編譯環(huán)境:Cygwin。不過(guò)我已經(jīng)開(kāi)始用MSYS + MinGW了,所以就先不考慮Cygwin。

在這個(gè)頁(yè)面上,它講的是搭建MinGW環(huán)境需要安裝:
MSYS 1.0.9或更高
MinGW 3.1.0或更高
Windows API 2.4.0或更高
MSYS Developer Tool Kit 1.0.1或更高

這4個(gè)東西在官方網(wǎng)站上都有下載,不過(guò)我們只需要下124這3個(gè)就可以了,第3個(gè)Windows API在安裝MinGW時(shí)會(huì)自動(dòng)裝上。首先是裝MinGW,安裝路徑為C:\msys\1.0\mingw,裝的時(shí)候勾選MinGW base tools、g++ compiler、MingW Make這3個(gè)即可。然后裝MSYS,按默認(rèn)的路徑C:\msys\1.0裝。裝完配置時(shí)會(huì)有3個(gè)問(wèn)題,前2個(gè)按y回車(chē),第3個(gè)讓你輸入mingw的路徑,C:/msys/1.0/mingw回車(chē)(注意是反斜杠),最后安裝msysDTK。這樣應(yīng)該環(huán)境就搭建好了。

將下載的squid源代碼解壓至任何目錄(所在路徑中不能包含中文),例如c:\squidsrc。從開(kāi)始菜單>MinGW>MSYS啟動(dòng)msys,在命令提示符下輸入cd c:\squidsrc回車(chē),這樣就進(jìn)入到了squidsrc目錄。接下來(lái)輸入

./configure --prefix=c:/squid --with-maxfd=20480 --disable-wccp --disable-wccpv2 --enable-win32-service --enable-default-hostsfile=none

--prefix=c:/squid表示將程序編譯到哪個(gè)目錄,這個(gè)目錄也是你發(fā)布程序的安裝目錄。--with-maxfd=20480就是前面說(shuō)的文件描述符上限了。這里我把默認(rèn)的2048改到了20480,應(yīng)該足夠了。--disable-wccp --disable-wccpv2 這2個(gè)參數(shù)非常重要。我在這個(gè)參數(shù)上走了很多彎路,主要是沒(méi)有看到官方最新文檔上說(shuō),windows下不支持wccp,必須禁掉才能編譯。--enable-win32-service表示可以配置為windows服務(wù),這功能也是必須的, --enable-default-hostsfile=none表示啟用但不設(shè)置默認(rèn)的hosts文件路徑。這個(gè)命令的含義就解釋到這里。如果幸運(yùn)的話(huà),我下面這段就可以不用看了。

不過(guò)我很不幸,又碰到了很多問(wèn)題。第一個(gè)問(wèn)題是我運(yùn)行之后,馬上報(bào)找不到cfgaux/install-sh這個(gè)文件,這個(gè)問(wèn)題整了我很久,因?yàn)閏fgaux目錄下根本沒(méi)有install-sh這個(gè)文件,我去哪弄一個(gè)來(lái)呢。我先是自己建了個(gè)空的文件取名為install-sh,被我騙過(guò)去了,但后面又出現(xiàn)了許多錯(cuò)誤,讓我明白騙過(guò)這一步是沒(méi)用的。于是又開(kāi)始google,在一個(gè)英文博客上,一個(gè)老外也碰到這個(gè)問(wèn)題,另一個(gè)牛人解釋說(shuō),這個(gè)可能是編譯環(huán)境的問(wèn)題,說(shuō)是缺少了一個(gè)是lib,但沒(méi)說(shuō)具體的解決辦法,后來(lái)那家伙自己試了下執(zhí)行bootstrap.sh這個(gè)文件,結(jié)果就可以了。于是我也找bootstrap.sh這個(gè)文件,果然就在源代碼的根目錄下。用命令./bootstrap.sh回車(chē)執(zhí)行成功,果然自動(dòng)在cfgaux下生成了好幾個(gè)文件,其中就有install-sh這個(gè)東東。果然重新執(zhí)行前面的./configure命令,就通過(guò)了。

如果配置開(kāi)始了,但輸出一小段后就報(bào)錯(cuò)結(jié)束了,顯示什么gcc....no之類(lèi)的東西,則說(shuō)明是環(huán)境沒(méi)有搭建成功。我先前就因?yàn)榄h(huán)境問(wèn)題,一直卡在這里。問(wèn)題在于我沒(méi)有把mingw裝在C:\msys\1.0\mingw這個(gè)目錄里,導(dǎo)致編譯器找不到mingw的目錄,后來(lái)我自己剪切過(guò)去了才好。

如果配置通過(guò)了,那勝利就在眼前了。接下來(lái)輸入命令make回車(chē)。不過(guò)我在這一步也卡了很久,原因是一直報(bào)一個(gè)undefined reference to的錯(cuò)誤,找了很久也沒(méi)找到解決辦法。后來(lái)無(wú)意中看到官方文檔說(shuō)這些文件都是linux下的,在windows下要用dos格式,而我用windows下的記事本保存過(guò)幾個(gè)源代碼文件,盡管沒(méi)改任何代碼,但是一保存文件頭就變了,這樣導(dǎo)致預(yù)編譯時(shí)將找不到那個(gè)文件里的函數(shù),后來(lái)我發(fā)現(xiàn)只要用editplus保存就沒(méi)事了。

如果make也過(guò)了,那就接著輸入make install命令,就可以把文件編譯到c:\squid目錄了。這樣整個(gè)編譯過(guò)程就大功告成了。

看似簡(jiǎn)單的幾個(gè)步驟,但是我卻走了很大的彎路,其中最主要的原因是我不懂linux,沒(méi)搞過(guò)C編程,所以這一切對(duì)我來(lái)說(shuō)都非常陌生,只有摸著石頭過(guò)河,所以走彎路也是很正常的。不過(guò),經(jīng)過(guò)我的總結(jié),得出以下經(jīng)驗(yàn):

1.網(wǎng)絡(luò)上搜到的資料也許都是過(guò)時(shí)了的,一定要注意其發(fā)表時(shí)間,錯(cuò)誤的資料比沒(méi)有資料更可怕。
2.一定要多看官方文檔,哪怕它是全英文的,也得慢慢啃完。當(dāng)然官方文檔也要看最新的,最好別像我這么倒霉,總是先看到過(guò)時(shí)的
3.linux下的文件格式和windows下不同,如果要編輯,最好用editplus或其他專(zhuān)門(mén)的文本編輯軟件來(lái)編輯和保存。
4.源代碼的版本不要下錯(cuò)了。我一開(kāi)始下到個(gè)vc++專(zhuān)用的版本,然后用mingw來(lái)編譯,完全背道而馳,怎么可能成功呢,因?yàn)檫@個(gè)錯(cuò)誤浪費(fèi)了我好幾天的時(shí)間
5.多問(wèn)google,別輕易放棄,黃天不會(huì)負(fù)有心人

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶(hù)發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買(mǎi)等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶(hù) 評(píng)論公約

    類(lèi)似文章 更多