真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

簡(jiǎn)單的php基于curl的反向代理程序

起因:

創(chuàng)新互聯(lián)服務(wù)項(xiàng)目包括二道網(wǎng)站建設(shè)、二道網(wǎng)站制作、二道網(wǎng)頁(yè)制作以及二道網(wǎng)絡(luò)營(yíng)銷(xiāo)策劃等。多年來(lái),我們專(zhuān)注于互聯(lián)網(wǎng)行業(yè),利用自身積累的技術(shù)優(yōu)勢(shì)、行業(yè)經(jīng)驗(yàn)、深度合作伙伴關(guān)系等,向廣大中小型企業(yè)、政府機(jī)構(gòu)等提供互聯(lián)網(wǎng)行業(yè)的解決方案,二道網(wǎng)站推廣取得了明顯的社會(huì)效益與經(jīng)濟(jì)效益。目前,我們服務(wù)的客戶(hù)以成都為中心已經(jīng)輻射到二道省份的部分城市,未來(lái)相信會(huì)繼續(xù)擴(kuò)大服務(wù)區(qū)域并繼續(xù)獲得客戶(hù)的支持與信任!

經(jīng)理:需要實(shí)現(xiàn)一個(gè)反向代理?

我: 簡(jiǎn)單,nginx分分鐘配置好。

經(jīng)理:嗯?沒(méi)有nginx?

我: nodejs也行啊,網(wǎng)上有例子分分鐘搞定。

經(jīng)理:嗯?只有虛擬主機(jī),只能上傳php程序?

我:Oh,My god!

于是就有了一個(gè)php寫(xiě)的反向代理程序就誕生了

什么是反向代理:

百度百科有云:

反向代理(ReverseProxy)方式是指以代理服務(wù)器來(lái)接受internet上的連接請(qǐng)求,然后將請(qǐng)求轉(zhuǎn)發(fā)給內(nèi)部網(wǎng)絡(luò)上的服務(wù)器,并將從服務(wù)器上得到的結(jié)果返回給internet上請(qǐng)求連接的客戶(hù)端,此時(shí)代理服務(wù)器對(duì)外就表現(xiàn)為一個(gè)反向代理服務(wù)器。

反向代理目的也各有不同,有用作CDN的,有作為負(fù)載均衡的等等。

成熟的反向代理的軟件有很多:我比較熟悉nginx,性能高,功能強(qiáng)大,配置簡(jiǎn)單,作為負(fù)載均衡的工具絕對(duì)是杠杠的。


作為一個(gè)程序員,以上都是廢話(huà),下面進(jìn)入正題。

為了快速的完成功能(其實(shí)就是懶),我首先做的就是google,看看是否有php實(shí)現(xiàn)的反向打理程序。事實(shí)上還真找到了。有7ghost、phpproxy等等,可惜他們要不是用fsockopen寫(xiě)的。我不是很看得懂,看不懂,就很難修改和擴(kuò)展,更好的為自己的需求工作,要不就是功能上好像有些不符合我們的一些測(cè)試。于是一咬牙就寫(xiě)了php基于curl的反向代理腳本。

php是一個(gè)腳本語(yǔ)言,也就是說(shuō)它的執(zhí)行效率肯定是不如C,也不如JS,而且傳統(tǒng)的php也無(wú)法利用事件驅(qū)動(dòng)IO,所以在性能上無(wú)法和nginx、nodejs實(shí)現(xiàn)的程序相比,如果條件允許,優(yōu)先使用更好的實(shí)現(xiàn)工具。

但是不得以只能使用的情況下,提高性能就是必須的了。而提高性能的秘密就是少做事,只做一件事,那就是做好請(qǐng)求數(shù)據(jù)的搬運(yùn)工,保留HTTP的美好的特性,比如:瀏覽器緩存,gzip壓縮,但是php不做額外的操作,比如:負(fù)載均衡,根據(jù)緩存頭緩存內(nèi)容等。

實(shí)現(xiàn)的邏輯主要就是一下三步:

1. 從$_SERVER獲取瀏覽器請(qǐng)求的內(nèi)容,傳說(shuō)中的Request,并進(jìn)行一些修改。

2. 用curl將Request發(fā)到后端機(jī)器上,并等待后端的返回內(nèi)容 傳說(shuō)中的Response。

3.Response中包含Header和Body,分別用header函數(shù)和echo函數(shù)將它們發(fā)到瀏覽器渲染。

4. 用rewrite規(guī)則將請(qǐng)求發(fā)給index.php上執(zhí)行,這個(gè)很容易,代碼就不貼了。

代碼地址如下:

http://git.oschina.net/jamesren_781/e9v45qa68wndrzbh3ktof.code.git

題外話(huà):我曾經(jīng)看到我的同事寫(xiě)過(guò)一個(gè)類(lèi)似反向代理的實(shí)現(xiàn)功能,使用的方法很簡(jiǎn)單:

echofile_get_contents($url);

后來(lái)發(fā)現(xiàn)如果url是一個(gè)圖片的話(huà)不行,因?yàn)閏ontent-type不對(duì),瀏覽器無(wú)法識(shí)別。結(jié)果寫(xiě)了一套根據(jù)url后綴識(shí)別content-type的方法,等于是實(shí)現(xiàn)了一套服務(wù)器規(guī)則,使得瀏覽器顯示正常了,當(dāng)時(shí)他還得意了很久。這種實(shí)現(xiàn)丟失了很多好的東西,比如緩存,gzip等等,還白白浪費(fèi)了性能。

所以,人生就是奇妙,有時(shí)候一些簡(jiǎn)單的代碼和邏輯反而包含著更高的智慧。而復(fù)雜的實(shí)現(xiàn)反而在各方面都不如它。有時(shí)候我在想為什么別人賺錢(qián)這么容易,我這么辛苦還賺得少?也許這就是智慧的高低,這就是道,就是極限挑戰(zhàn)里常說(shuō)的:這就是命。


分享標(biāo)題:簡(jiǎn)單的php基于curl的反向代理程序
網(wǎng)頁(yè)URL:http://weahome.cn/article/cjsjsi.html

其他資訊

在線(xiàn)咨詢(xún)

微信咨詢(xún)

電話(huà)咨詢(xún)

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部