1. 程式人生 > >代理伺服器學習日誌(一)

代理伺服器學習日誌(一)

最近接到一個任務-研究代理伺服器tinyproxy,研究tinyproxy原始碼,實現可以快取一部分網頁,當用戶瀏覽網頁資訊時,不需再連線主伺服器,只需從代理伺服器中讀取就行,同時還需要設計好代理伺服器上的網頁如何保持和伺服器上的網頁一致(即代理伺服器上的網頁都是最新的網頁)。任務來的有些突然,一直在windows環境下程式設計,現在需要在linux環境下進行開發,原來一直對伺服器代理不是很理解,現在任務在手,需要自己將其讀透了,現在為自己的學習過程做個記錄。

1.什麼是HTTP代理

代理伺服器(Proxy Server)是網上提供轉接功能的伺服器,在一般情況下,我們使用網路瀏覽器直接去連線其他Internet站點取得網路資訊時,是直接聯絡到目的站點伺服器,然後由目的站點伺服器把資訊傳送回來。代理伺服器是介於客戶端和Web伺服器之間的另一臺伺服器,有了它之後,瀏覽器不是直接到Web伺服器去取回網頁而是向代理伺服器發出請求,訊號會先送到代理伺服器,由代理伺服器來取回瀏覽器所需要的資訊並傳送給你的瀏覽器。

比如你想訪問的目的網站是A,由於某種原因你不能訪問到網站A或者你不想直接訪問網站A(這樣通過代理伺服器網站A,對網站A而已可以隱藏你自己的身份,也就是不知道是誰訪問的網站,而認為是代理伺服器訪問的),此時你就可以使用代理伺服器,在實際訪問網站的時候,你在瀏覽器的位址列內和你以前一樣輸入你要訪問的網站,瀏覽器會自動先訪問代理伺服器,然後代理伺服器會自動給你轉接到你的目標網站。

2.代理伺服器的作用

提高訪問速度:通常代理伺服器都設定一個較大的緩衝區,當有外界的資訊通過時,同時也將其儲存到緩衝區中,當其他使用者再訪問相同的資訊時,則直接由緩衝區中取出資訊,傳給使用者,以提高訪問速度。

3.代理伺服器的客戶端設定

IE瀏覽器--》Internate選項--》區域網設定--》選中下面的代理伺服器填寫好地址和埠號即可


4.tinyproxy的安裝

1)因為使用的是centos系統,其實在redhat系列的系統中,可以直接使用yum install tinyproxy來安裝。

啟動tinyproxy: service tinyproxy start

停止tinyproxy: service tinyproxy stop   也可以使用killall tinyproxy來停止

2)由於我們可能需要修改tinyproxy的原始碼,所以下面的方法為編譯tinyproxy的原始碼並安裝在centos中。

a.tinyproxy官網:https://banu.com/tinyproxy/

b.tinyproxy-1.8.3下載地址:https://files.banu.com/tinyproxy/1.8/tinyproxy-1.8.3.tar.bz2

c.閱讀解壓之後的tinyproxy資料夾下的readme,裡面告訴我們可以通過下面三個步驟來編譯安裝tinyproxy

./configure  (生成makefile)

make (根據Makefile檔案編譯原始碼、連線、生成目標檔案、可執行檔案)      

make install (將編譯成功的可執行檔案安裝到系統目錄中,一般為/usr/local/bin目錄)

make clean 
清除上次的make命令所產生的object檔案(字尾為“.o”的檔案)及可執行檔案。 

(

其他make組合命令:

make dist 
產生髮布軟體包檔案(即distribution package)。這個命令將會將可執行檔案及相關檔案打包成一個tar.gz壓縮的檔案用來作為釋出軟體的軟體包。 
它會在當前目錄下生成一個名字類似“PACKAGE-VERSION.tar.gz”的檔案。PACKAGE和VERSION,是我們在configure.in中定義的AM_INIT_AUTOMAKE(PACKAGE, VERSION)。

make distcheck 
生成釋出軟體包並對其進行測試檢查,以確定釋出包的正確性。這個操作將自動把壓縮包檔案解開,然後執行configure命令,並且執行make,來確認編譯不出現錯誤,最後提示你軟體包已經準備好,可以釋出了。

make distclean 
類似make clean,但同時也將configure生成的檔案全部刪除掉,包括Makefile檔案

5.自動生成makefile檔案流程圖


自動生成makefile需要如下的步驟:

1) 執行autoscan命令(會生成configure.scan檔案)

2) 將configure.scan 檔案重新命名為configure.in,並修改configure.in檔案

3) 在tinyproxy目錄下新建Makefile.am檔案,並相關的目錄下面也新建makefile.am檔案

4) 在tinyproxy目錄下新建NEWS、 README、 ChangeLog 、AUTHORS檔案

5) 將/usr/share/automake-1.X/目錄下的depcomp和complie檔案拷貝到本目錄下

6) 執行aclocal命令

7) 執行autoconf命令

8) 執行automake -a命令

9) 執行./confiugre指令碼

下圖是從官網上下載的tinyproxy根目錄的圖片:

(注:configure.ac (sometimes also named: configure.in) is an input file for autoconf. It contains tests that check for conditions that are likely to differ on different platforms. The tests are made by actually invoke autoconf macros.)


6.生成tinyproxy安裝檔案及安裝過程

[root@localhost tinyproxy-1.8.3]  ./configure

configure: creating ./config.status
config.status: creating Makefile
config.status: creating src/Makefile
config.status: creating data/Makefile
config.status: creating data/templates/Makefile
config.status: creating etc/Makefile
config.status: creating docs/Makefile
config.status: creating docs/man5/Makefile
config.status: creating docs/man5/tinyproxy.conf.txt
config.status: creating docs/man8/Makefile
config.status: creating docs/man8/tinyproxy.txt
config.status: creating m4macros/Makefile
config.status: creating tests/Makefile
config.status: creating tests/scripts/Makefile
config.status: creating config.h
config.status: executing depfiles commands
[root@localhost tinyproxy-1.8.3]# make
make  all-recursive
make[1]: Entering directory `/usr/zhl/1.src/tinyproxy/tinyproxy-1.8.3'
Making all in src
make[2]: Entering directory `/usr/zhl/1.src/tinyproxy/tinyproxy-1.8.3/src'
  CC     acl.o
  CC     anonymous.o
  CC     buffer.o
  CC     child.o
  CC     conf.o
  CC     conns.o
  CC     daemon.o
  CC     hashmap.o
  CC     heap.o
  CC     html-error.o
  CC     http-message.o
  CC     log.o
  CC     network.o
  CC     reqs.o
  CC     sock.o
  CC     stats.o
  CC     text.o
  CC     main.o
  CC     utils.o
  CC     vector.o
  CC     upstream.o
  CC     connect-ports.o
  CC     filter.o
  CCLD   tinyproxy
make[2]: Leaving directory `/usr/zhl/1.src/tinyproxy/tinyproxy-1.8.3/src'
Making all in data
make[2]: Entering directory `/usr/zhl/1.src/tinyproxy/tinyproxy-1.8.3/data'
Making all in templates
make[3]: Entering directory `/usr/zhl/1.src/tinyproxy/tinyproxy-1.8.3/data/templates'
make[3]: Nothing to be done for `all'.
make[3]: Leaving directory `/usr/zhl/1.src/tinyproxy/tinyproxy-1.8.3/data/templates'
make[3]: Entering directory `/usr/zhl/1.src/tinyproxy/tinyproxy-1.8.3/data'
make[3]: Nothing to be done for `all-am'.
make[3]: Leaving directory `/usr/zhl/1.src/tinyproxy/tinyproxy-1.8.3/data'
make[2]: Leaving directory `/usr/zhl/1.src/tinyproxy/tinyproxy-1.8.3/data'
Making all in etc
make[2]: Entering directory `/usr/zhl/1.src/tinyproxy/tinyproxy-1.8.3/etc'
  GEN    tinyproxy.conf
make[2]: Leaving directory `/usr/zhl/1.src/tinyproxy/tinyproxy-1.8.3/etc'
Making all in docs
make[2]: Entering directory `/usr/zhl/1.src/tinyproxy/tinyproxy-1.8.3/docs'
Making all in man5
make[3]: Entering directory `/usr/zhl/1.src/tinyproxy/tinyproxy-1.8.3/docs/man5'
  GEN    tinyproxy.conf.5
Note: Writing tinyproxy.conf.5
make[3]: Leaving directory `/usr/zhl/1.src/tinyproxy/tinyproxy-1.8.3/docs/man5'
Making all in man8
make[3]: Entering directory `/usr/zhl/1.src/tinyproxy/tinyproxy-1.8.3/docs/man8'
  GEN    tinyproxy.8
Note: Writing tinyproxy.8
make[3]: Leaving directory `/usr/zhl/1.src/tinyproxy/tinyproxy-1.8.3/docs/man8'
make[3]: Entering directory `/usr/zhl/1.src/tinyproxy/tinyproxy-1.8.3/docs'
make[3]: Nothing to be done for `all-am'.
make[3]: Leaving directory `/usr/zhl/1.src/tinyproxy/tinyproxy-1.8.3/docs'
make[2]: Leaving directory `/usr/zhl/1.src/tinyproxy/tinyproxy-1.8.3/docs'
Making all in m4macros
make[2]: Entering directory `/usr/zhl/1.src/tinyproxy/tinyproxy-1.8.3/m4macros'
make[2]: Nothing to be done for `all'.
make[2]: Leaving directory `/usr/zhl/1.src/tinyproxy/tinyproxy-1.8.3/m4macros'
Making all in tests
make[2]: Entering directory `/usr/zhl/1.src/tinyproxy/tinyproxy-1.8.3/tests'
Making all in scripts
make[3]: Entering directory `/usr/zhl/1.src/tinyproxy/tinyproxy-1.8.3/tests/scripts'
make[3]: Nothing to be done for `all'.
make[3]: Leaving directory `/usr/zhl/1.src/tinyproxy/tinyproxy-1.8.3/tests/scripts'
make[3]: Entering directory `/usr/zhl/1.src/tinyproxy/tinyproxy-1.8.3/tests'
make[3]: Nothing to be done for `all-am'.
make[3]: Leaving directory `/usr/zhl/1.src/tinyproxy/tinyproxy-1.8.3/tests'
make[2]: Leaving directory `/usr/zhl/1.src/tinyproxy/tinyproxy-1.8.3/tests'
make[2]: Entering directory `/usr/zhl/1.src/tinyproxy/tinyproxy-1.8.3'
make[2]: Leaving directory `/usr/zhl/1.src/tinyproxy/tinyproxy-1.8.3'
make[1]: Leaving directory `/usr/zhl/1.src/tinyproxy/tinyproxy-1.8.3'
You have new mail in /var/spool/mail/root
[root@localhost tinyproxy-1.8.3]# make install
Making install in src
make[1]: Entering directory `/usr/zhl/1.src/tinyproxy/tinyproxy-1.8.3/src'
make[2]: Entering directory `/usr/zhl/1.src/tinyproxy/tinyproxy-1.8.3/src'
test -z "/usr/local/sbin" || /bin/mkdir -p "/usr/local/sbin"
  /usr/bin/install -c tinyproxy '/usr/local/sbin'
make[2]: Nothing to be done for `install-data-am'.
make[2]: Leaving directory `/usr/zhl/1.src/tinyproxy/tinyproxy-1.8.3/src'
make[1]: Leaving directory `/usr/zhl/1.src/tinyproxy/tinyproxy-1.8.3/src'
Making install in data
make[1]: Entering directory `/usr/zhl/1.src/tinyproxy/tinyproxy-1.8.3/data'
Making install in templates
make[2]: Entering directory `/usr/zhl/1.src/tinyproxy/tinyproxy-1.8.3/data/templates'
make[3]: Entering directory `/usr/zhl/1.src/tinyproxy/tinyproxy-1.8.3/data/templates'
make[3]: Nothing to be done for `install-exec-am'.
test -z "/usr/local/share/tinyproxy" || /bin/mkdir -p "/usr/local/share/tinyproxy"
 /usr/bin/install -c -m 644 debug.html default.html stats.html '/usr/local/share/tinyproxy'
make[3]: Leaving directory `/usr/zhl/1.src/tinyproxy/tinyproxy-1.8.3/data/templates'
make[2]: Leaving directory `/usr/zhl/1.src/tinyproxy/tinyproxy-1.8.3/data/templates'
make[2]: Entering directory `/usr/zhl/1.src/tinyproxy/tinyproxy-1.8.3/data'
make[3]: Entering directory `/usr/zhl/1.src/tinyproxy/tinyproxy-1.8.3/data'
make[3]: Nothing to be done for `install-exec-am'.
make[3]: Nothing to be done for `install-data-am'.
make[3]: Leaving directory `/usr/zhl/1.src/tinyproxy/tinyproxy-1.8.3/data'
make[2]: Leaving directory `/usr/zhl/1.src/tinyproxy/tinyproxy-1.8.3/data'
make[1]: Leaving directory `/usr/zhl/1.src/tinyproxy/tinyproxy-1.8.3/data'
Making install in etc
make[1]: Entering directory `/usr/zhl/1.src/tinyproxy/tinyproxy-1.8.3/etc'
make[2]: Entering directory `/usr/zhl/1.src/tinyproxy/tinyproxy-1.8.3/etc'
test -z "/usr/local/etc" || /bin/mkdir -p "/usr/local/etc"
 /usr/bin/install -c -m 644 tinyproxy.conf '/usr/local/etc'
make[2]: Nothing to be done for `install-data-am'.
make[2]: Leaving directory `/usr/zhl/1.src/tinyproxy/tinyproxy-1.8.3/etc'
make[1]: Leaving directory `/usr/zhl/1.src/tinyproxy/tinyproxy-1.8.3/etc'
Making install in docs
make[1]: Entering directory `/usr/zhl/1.src/tinyproxy/tinyproxy-1.8.3/docs'
Making install in man5
make[2]: Entering directory `/usr/zhl/1.src/tinyproxy/tinyproxy-1.8.3/docs/man5'
make[3]: Entering directory `/usr/zhl/1.src/tinyproxy/tinyproxy-1.8.3/docs/man5'
make[3]: Nothing to be done for `install-exec-am'.
test -z "/usr/local/share/man/man5" || /bin/mkdir -p "/usr/local/share/man/man5"
 /usr/bin/install -c -m 644 tinyproxy.conf.5 '/usr/local/share/man/man5'
make[3]: Leaving directory `/usr/zhl/1.src/tinyproxy/tinyproxy-1.8.3/docs/man5'
make[2]: Leaving directory `/usr/zhl/1.src/tinyproxy/tinyproxy-1.8.3/docs/man5'
Making install in man8
make[2]: Entering directory `/usr/zhl/1.src/tinyproxy/tinyproxy-1.8.3/docs/man8'
make[3]: Entering directory `/usr/zhl/1.src/tinyproxy/tinyproxy-1.8.3/docs/man8'
make[3]: Nothing to be done for `install-exec-am'.
test -z "/usr/local/share/man/man8" || /bin/mkdir -p "/usr/local/share/man/man8"
 /usr/bin/install -c -m 644 tinyproxy.8 '/usr/local/share/man/man8'
make[3]: Leaving directory `/usr/zhl/1.src/tinyproxy/tinyproxy-1.8.3/docs/man8'
make[2]: Leaving directory `/usr/zhl/1.src/tinyproxy/tinyproxy-1.8.3/docs/man8'
make[2]: Entering directory `/usr/zhl/1.src/tinyproxy/tinyproxy-1.8.3/docs'
make[3]: Entering directory `/usr/zhl/1.src/tinyproxy/tinyproxy-1.8.3/docs'
make[3]: Nothing to be done for `install-exec-am'.
make[3]: Nothing to be done for `install-data-am'.
make[3]: Leaving directory `/usr/zhl/1.src/tinyproxy/tinyproxy-1.8.3/docs'
make[2]: Leaving directory `/usr/zhl/1.src/tinyproxy/tinyproxy-1.8.3/docs'
make[1]: Leaving directory `/usr/zhl/1.src/tinyproxy/tinyproxy-1.8.3/docs'
Making install in m4macros
make[1]: Entering directory `/usr/zhl/1.src/tinyproxy/tinyproxy-1.8.3/m4macros'
make[2]: Entering directory `/usr/zhl/1.src/tinyproxy/tinyproxy-1.8.3/m4macros'
make[2]: Nothing to be done for `install-exec-am'.
make[2]: Nothing to be done for `install-data-am'.
make[2]: Leaving directory `/usr/zhl/1.src/tinyproxy/tinyproxy-1.8.3/m4macros'
make[1]: Leaving directory `/usr/zhl/1.src/tinyproxy/tinyproxy-1.8.3/m4macros'
Making install in tests
make[1]: Entering directory `/usr/zhl/1.src/tinyproxy/tinyproxy-1.8.3/tests'
Making install in scripts
make[2]: Entering directory `/usr/zhl/1.src/tinyproxy/tinyproxy-1.8.3/tests/scripts'
make[3]: Entering directory `/usr/zhl/1.src/tinyproxy/tinyproxy-1.8.3/tests/scripts'
make[3]: Nothing to be done for `install-exec-am'.
make[3]: Nothing to be done for `install-data-am'.
make[3]: Leaving directory `/usr/zhl/1.src/tinyproxy/tinyproxy-1.8.3/tests/scripts'
make[2]: Leaving directory `/usr/zhl/1.src/tinyproxy/tinyproxy-1.8.3/tests/scripts'
make[2]: Entering directory `/usr/zhl/1.src/tinyproxy/tinyproxy-1.8.3/tests'
make[3]: Entering directory `/usr/zhl/1.src/tinyproxy/tinyproxy-1.8.3/tests'
make[3]: Nothing to be done for `install-exec-am'.
make[3]: Nothing to be done for `install-data-am'.
make[3]: Leaving directory `/usr/zhl/1.src/tinyproxy/tinyproxy-1.8.3/tests'
make[2]: Leaving directory `/usr/zhl/1.src/tinyproxy/tinyproxy-1.8.3/tests'
make[1]: Leaving directory `/usr/zhl/1.src/tinyproxy/tinyproxy-1.8.3/tests'
make[1]: Entering directory `/usr/zhl/1.src/tinyproxy/tinyproxy-1.8.3'
make[2]: Entering directory `/usr/zhl/1.src/tinyproxy/tinyproxy-1.8.3'
make[2]: Nothing to be done for `install-exec-am'.
make[2]: Nothing to be done for `install-data-am'.
make[2]: Leaving directory `/usr/zhl/1.src/tinyproxy/tinyproxy-1.8.3'
make[1]: Leaving directory `/usr/zhl/1.src/tinyproxy/tinyproxy-1.8.3'
注:在我的centos中執行./configure時報如下asciidoc的錯誤,只需將asciidoc安裝到系統中即可

[root@localhost tinyproxy-1.8.3]# yum install asciidoc

AsciiDoc是輕型的標識語言,通過解釋工具(編譯)可以將文字轉換成html檔案
Wiki: http://en.wikipedia.org/wiki/AsciiDoc

上面是我今天理解的tinyproxy的一些知識點,包括代理伺服器是什麼、如何生成makefile檔案及如何編譯安裝檔案到linux系統中,其中還涉及到安裝asciidoc,以及螢幕截圖軟體gimp(在系統中執行yum install gimp即可將gimp安裝到系統當中,開啟gimp後,選擇file-》create-》screenshot即可完成螢幕截圖)