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

分享

Squid中文權(quán)威指南第五章

 zybingliu 2008-04-24
Squid中文權(quán)威指南第五章
2008年04月17日 星期四 16:31

第5章 運行Squid

5.1 squid命令行選項

在開始其他事情之前,讓我們先看一下squid的命令行選項。這里的許多選項你從不會使用,另外有些僅僅在調(diào)試問題時有用。

-a port

指定新的http_port值。該選項覆蓋了來自squid.conf的值。然而請注意,你能在squid.conf里指定多個值。-a選項僅僅覆蓋配置文件里的第一個值。(該選項使用字母a是因為在Harvest cache里,HTTP端口被叫做ASCII端口)

-d level

讓squid將它的調(diào)試信息寫到標(biāo)準(zhǔn)錯誤(假如配置了,就是cache.log和syslog)。level參數(shù)指定了顯示在標(biāo)準(zhǔn)錯誤里的消息的最大等級。在多數(shù)情況下,d1工作良好。請見16.2章關(guān)于調(diào)試等級的描述。

-f file

指定另一個配置文件。

-h

顯示用法。

-k function

指示squid執(zhí)行不同的管理功能。功能參數(shù)是下列之一:reconfigure, rotate, shutdown, interrupt, kill, debug, check, or parse. reconfigure導(dǎo)致運行中的squid重新讀取配置文件。rotate導(dǎo)致squid滾動它的日志,這包括了關(guān)閉日志,重命名,和再次打開它們。shutdown發(fā)送關(guān)閉squid進程的信號。interrupt立刻關(guān)閉squid,不必等待活動會話完成。kill發(fā)送KILL信號給squid,這是關(guān)閉squid的最后保證。debug將squid設(shè)置成完全的調(diào)試模式,假如你的cache很忙,它能迅速的用完你的磁盤空間。check簡單的檢查運行中的squid進程,返回的值顯示squid是否在運行。最后,parse簡單的解析squid.conf文件,如果配置文件包含錯誤,進程返回非零值。

-s

激活將日志記錄到syslog進程。squid使用LOCAL4 syslog設(shè)備。0級別調(diào)試信息以優(yōu)先級LOG_WARNING被記錄,1級別消息以LOG_NOTICE被記錄。更高級的調(diào)試信息不會被發(fā)送到syslogd.你可以在/etc/syslogd.conf文件里使用如下接口:

local4.warning   /var/log/squid.log
            -u port

指定另一個ICP端口號,覆蓋掉squid.conf文件里的icp_port。

-v

打印版本信息。

-z

初始化cache,或者交換,目錄。在首次運行squid,或者增加新的cache目錄時,你必須使用該選項。

-C

阻止安裝某些信號句柄,它們捕獲特定的致命信號例如SIGBUS和SIGSEGV。正常的,這些信號被squid捕獲,以便它能干凈的關(guān)閉。然而,捕獲這些信號可能讓以后調(diào)試問題困難。使用該選項,致命的信號導(dǎo)致它們的默認動作,通常是coredump。

-D

禁止初始化DNS測試。正常情況下,squid直到驗證它的DNS可用才能啟動。該選項阻止了這樣的檢測。你也能在squid.conf文件里改變或刪除dns_testnames選項。

-F

讓squid拒絕所有的請求,直到它重新建立起存儲元數(shù)據(jù)。假如你的系統(tǒng)很忙,該選項可以減短重建存儲元數(shù)據(jù)的時間。然而,如果你的cache很大,重建過程可能會花費很長的時間。

-N

阻止squid變成后臺服務(wù)進程。

-R

阻止squid在綁定HTTP端口之前使用SO_REUSEADDR選項。

-V

激活虛擬主機加速模式。類似于squid.conf文件里的httpd_accel_host virtual指令。

-X

強迫完整調(diào)試模式,如你在squid.conf文件里指定debug_options ALL,9一樣。

-Y

在重建存儲元數(shù)據(jù)時,返回ICP_MISS_NOFETCH代替ICP_MISS.忙碌的父cache在重建時,該選項可以導(dǎo)致最少的負載。請見10.6.1.2章。

5.2 對配置文件查錯

在開啟squid之前,你應(yīng)該謹慎的驗證配置文件。這點容易做到,運行如下命令即可:

%squid -k parse

假如你看不到輸出,配置文件有效,你能繼續(xù)后面的步驟。然而,如果配置文件包含錯誤,squid會告訴你:

squid.conf line 62: http_access allow okay2
            aclParseAccessLine: ACL name 'okay2' not found.

這里你可以看到,62行的http_access指令指向的ACL不存在。有時候錯誤信息很少:

FATAL: Bungled squid.conf line 76: memory_pools

在這個情形里,我們忘記了在76行的memory_pools指令后放置on或off. 建議你養(yǎng)成習(xí)慣:在每次修改配置文件后,使用squid -k parse。假如你不愿麻煩,并且你的配置文件有錯誤,squid會告訴你關(guān)于它們而且拒絕啟動。假如你管理著大量的cache,也許你會編輯腳本來自動啟動,停止和重配置squid。你能在腳本里使用該功能,來確認配置文件是有效的。

5.3 初始化cache目錄

在初次運行squid之前,或者無論何時你增加了新的cache_dir,你必須初始化cache目錄。命令很簡單:

%squid -z

對UFS相關(guān)的存儲機制(ufs,aufs,and diskd;見第8章),該命令在每個cache_dir下面創(chuàng)建了所需的子目錄。你不必擔(dān)心squid會破壞你的當(dāng)前cache目錄(如果有的話)。

在該階段屬主和許可權(quán)是通常遇到的問題。squid在特定的用戶ID下運行,這在squid.conf文件里的cache_effective_user里指定。用戶ID必須對每個cache_dir目錄有讀和寫權(quán)限。否則,你將看到如下信息:

Creating Swap Directories
            FATAL: Failed to make swap directory /usr/local/squid/var/cache/00:
            (13) Permission denied

在這樣的情形下,你該確認/usr/local/squid/var/cache目錄的所有組成都可被squid.conf給定的用戶ID訪問。最終的組件--cache目錄--必須對該用戶ID可寫。

cache目錄初始化可能花費一些時間,依賴于cache目錄的大小和數(shù)量,以及磁盤驅(qū)動器的速度。假如你想觀察這個過程,請使用-X選項:

%squid -zX

5.4 在終端窗口里測試squid

一旦你已經(jīng)初始化cache目錄,就可以在終端窗口里運行squid,將日志記錄到標(biāo)準(zhǔn)錯誤。這樣,你能輕易的定位任何錯誤或問題,并且確認squid是否成功啟動。使用-N選項來保持squid在前臺運行,-d1選項在標(biāo)準(zhǔn)錯誤里顯示1級別的調(diào)試信息。

%squid -N -d1

你將看到類似于以下的輸出:

2003/09/29 12:57:52| Starting Squid Cache
            version 2.5.STABLE4 for i386-unknown-freebsd4.8...
            2003/09/29 12:57:52| Process ID 294
            2003/09/29 12:57:52| With 1064 file descriptors available
            2003/09/29 12:57:52| DNS Socket created on FD 4
            2003/09/29 12:57:52| Adding nameserver 206.107.176.2 from /etc/resolv.conf
            2003/09/29 12:57:52| Adding nameserver 205.162.184.2 from /etc/resolv.conf
            2003/09/29 12:57:52| Unlinkd pipe opened on FD 9
            2003/09/29 12:57:52| Swap maxSize 102400 KB, estimated 7876 objects
            2003/09/29 12:57:52| Target number of buckets: 393
            2003/09/29 12:57:52| Using 8192 Store buckets
            2003/09/29 12:57:52| Max Mem  size: 8192 KB
            2003/09/29 12:57:52| Max Swap size: 102400 KB
            2003/09/29 12:57:52| Rebuilding storage in /usr/local/squid/var/cache (DIRTY)
            2003/09/29 12:57:52| Using Least Load store dir selection
            2003/09/29 12:57:52| Set Current Directory to /usr/local/squid/var/cache
            2003/09/29 12:57:52| Loaded Icons.
            2003/09/29 12:57:52| Accepting HTTP connections at 0.0.0.0, port 3128, FD 11.
            2003/09/29 12:57:52| Accepting ICP messages at 0.0.0.0, port 3130, FD 12.
            2003/09/29 12:57:52| WCCP Disabled.
            2003/09/29 12:57:52| Ready to serve reques

假如你看到錯誤消息,你該首先修正它。請檢查輸出信息的開始幾行以發(fā)現(xiàn)警告信息。最普通的錯誤是文件/目錄許可問題,和配置文件語法錯誤。假如你看到一條不引起注意的錯誤消息,請見16章中關(guān)于squid故障處理的建議和信息。如果還不行,請檢查squid FAQ,或查找郵件列表來獲得解釋。

一旦你見到"Ready to serve requests"消息,就可用一些HTTP請求來測試squid。配置你的瀏覽器使用squid作為代理,然后打開某個web頁面。假如squid工作正常,頁面被迅速載入,就象沒使用squid一樣。另外,你可以使用squidclient程序,它隨squid發(fā)布:

% squidclient http://www./

假如它正常工作,squid的主頁html文件會在你的終端窗口里滾動。一旦確認squid工作正常,你能中斷squid進程(例如使用ctrl-c)并且在后臺運行squid。

5.5 將squid作為服務(wù)進程運行

正常情況下你想將squid以后臺進程運行(不出現(xiàn)在終端窗口里)。最容易的方法是簡單執(zhí)行如下命令:

%squid -s

-s選項導(dǎo)致squid將重要的狀態(tài)和警告信息寫到syslogd。squid使用LOCAL4設(shè)備,和LOG_WARNING和LOG_NOTICE優(yōu)先權(quán)。syslog進程實際可能會或不會記錄squid的消息,這依賴于它被如何配置。同樣的消息被寫進cache.log文件,所以假如你愿意,忽略-s選項也是安全的。

當(dāng)你不使用-N選項來啟動squid,squid自動在后臺運行并且創(chuàng)建父/子進程對。子進程做所有的實際工作。父進程確認子進程總在運行。這樣,假如子進程意外終止,父進程啟動另外一個子進程以使squid正常工作。通過觀察syslog消息,你能看到父/子進程交互作用。

Jul 31 14:58:35 zapp squid[294]: Squid Parent: child process 296 started

這里顯示的父進程ID是294,子進程是296。當(dāng)你查看ps的輸出,你可以看到子進程以(squid)形式出現(xiàn):

% ps ax | grep squid
            294  ??  Is     0:00.01 squid -sD
            296  ??  S      0:00.27 (squid) -sD (squid)

假如squid進程意外終止,父進程啟動另一個。例如:

Jul 31 15:02:53 zapp squid[294]: Squid Parent: child process 296 exited due to signal 6
            Jul 31 15:02:56 zapp squid[294]: Squid Parent: child process 359 started

在某些情形下,squid子進程可能立即終止。為了防止頻繁的啟動子進程,假如子進程連續(xù)5次沒有運行至少10秒鐘,父進程會放棄。

Jul 31 15:13:48 zapp squid[455]: Squid Parent: child process 474 exited with status 1
            Jul 31 15:13:48 zapp squid[455]: Exiting due to repeated, frequent failures

如果發(fā)生這樣的事,請檢查syslog和squid的cache.log以發(fā)現(xiàn)錯誤。

5.5.1 squid_start腳本

當(dāng)squid以后臺進程運行時,它查找squid執(zhí)行程序目錄下的名為squid_start的文件。假如發(fā)現(xiàn),該程序在父進程創(chuàng)建子進程之前被執(zhí)行。你能使用該腳本完成特定的管理任務(wù),例如通知某人squid在運行,管理日志文件等。除非squid_start程序存在,squid不會創(chuàng)建子進程。

squid_start腳本在你使用絕對或相對路徑啟動squid時才開始工作。換句話說,squid不使用PATH環(huán)境變量來定位squid_start.這樣,你應(yīng)該養(yǎng)成習(xí)慣這樣啟動squid:

% /usr/local/squid/sbin/squid -sD

而不要這樣:

%squid -sD

5.6 啟動腳本

通常你希望squid在每次計算機重啟后自動啟動。對不同的操作系統(tǒng),它們的啟動腳本如何工作也很不同。我在這里描述一些通用的環(huán)境,但對你自己的特殊操作系統(tǒng),也許該有特殊的處理方法。


5.6.1 /etc/rc.local

最容易的機制之一是/etc/rc.local腳本。這是個簡單的shell腳本,在每次系統(tǒng)啟動時以root運行。使用該腳本來啟動squid非常容易,增加一行如下:

/usr/local/squid/sbin/squid -s

當(dāng)然你的安裝位置可能不同,還有你可能要使用其他命令行選項。不要在這里使用-N選項。

假如因為某些理由,你沒有使用cache_effective_user指令,你可以嘗試使用su來讓squid以非root用戶運行:

/usr/bin/su nobody -c '/usr/local/squid/sbin/squid -s'

5.6.2 init.d和rc.d

init.d和rc.d機制使用獨立的shell腳本來啟動不同的服務(wù)。這些腳本通常在下列目錄之中:/sbin/init.d, /etc/init.d, /usr/local/etc/rc.d.腳本通常獲取單一命令行參數(shù),是start或stop。某些系統(tǒng)僅僅使用start參數(shù)。如下是啟動squid的基本腳本:

#!/bin/sh
            # this script starts and stops Squid
            case "$1" in
            start)
            /usr/local/squid/sbin/squid -s
            echo -n ' Squid'
            ;;
            stop)
            /usr/local/squid/sbin/squid -k shutdown
            ;;
            esac

Linux用戶可能在啟動squid之前需要設(shè)置文件描述符限制。例如:

echo 8192 > /proc/sys/fs/file-max
            limit -HSn 8192

為了使用該腳本,先找到腳本存放的目錄。給它一個有意義的名字,類似于其他的系統(tǒng)啟動腳本。可以是S98squid或squid.sh。通過重啟計算機來測試該腳本,而不要假想它會正常工作。


5.6.3 /etc/inittab

某些操作系統(tǒng)支持另一種機制,是/etc/inittab文件。在這些系統(tǒng)中,init進程啟動和停止基于運行等級的服務(wù)。典型的inittab接口類似如此:

sq:2345:once:/usr/local/squid/sbin/squid -s

使用該接口,init進程啟動squid一次并且隨后忘記它。squid確認它駐留在運行狀態(tài),象前面描述的一樣?;蛘?,你能這樣做:

sq:2345:respawn:/usr/local/squid/sbin/squid -Ns

這里我們使用了respawn選項,假如進程不存在init會重啟squid。假如使用respawn,請確認使用-N選項。

在編輯完inittab文件后,使用下面的命令來使init重新讀取它的配置文件和啟動squid:

# init q

5.7 chroot環(huán)境

某些人喜歡在chroot環(huán)境運行squid。這是unix的功能,給予進程新的root文件系統(tǒng)目錄。在squid受安全威脅時,它提供額外等級的安全保護。假如攻擊者在某種程度上通過squid獲取了對操作系統(tǒng)的訪問權(quán),她僅僅能訪問在chroot文件系統(tǒng)中的文件。在chroot樹之外的系統(tǒng)文件,她不可訪問。

最容易在chroot環(huán)境里運行squid的方法是,在squid.conf文件里指定新的root目錄,如下:

chroot /new/root/directory

chroot()系統(tǒng)調(diào)用需要超級用戶權(quán)限,所以你必須以root來啟動squid。

chroot環(huán)境不是為unix新手準(zhǔn)備的。它有點麻煩,因為你必須在新的root目錄里重復(fù)放置大量的文件。例如,假如默認的配置文件正常在/usr/local/squid/etc/squid.conf,并且你使用chroot指令,那么文件必須位于/new/root/directory/usr/local/squid/etc/squid.conf.你必須將位于$prefix/etc,$prefix/share,$prefix/libexec下的所有文件拷貝到chroot目錄。請確認$prefix/var和cache目錄在chroot目錄中存在和可寫。

同樣的,你的操作系統(tǒng)需要將大量的文件放在chroot目錄里,例如/etc/resolv.conf和/dev/null.假如你使用外部輔助程序,例如重定向器(見11章)或者驗證器(見12章),你也需要來自/usr/lib的某些共享庫。你可以使用ldd工具來查找給定的程序需要哪些共享庫:

% ldd /usr/local/squid/libexec/ncsa_auth
            /usr/local/squid/libexec/ncsa_auth:
            libcrypt.so.2 => /usr/lib/libcrypt.so.2 (0x28067000)
            libm.so.2 => /usr/lib/libm.so.2 (0x28080000)
            libc.so.4 => /usr/lib/libc.so.4 (0x28098000)

你可以使用chroot命令來測試輔助程序:

# chroot /new/root/directory /usr/local/squid/libexec/ncsa_auth
            /usr/libexec/ld-elf.so.1: Shared object "libcrypt.so.2" not found

更多的關(guān)于chroot的信息,請見你系統(tǒng)中chroot()的manpage.

5.8 停止squid

最安全的停止squid的方法是使用squid -k shutdown命令:

%squid -k shutdown

該命令發(fā)送TERM信號到運行中的squid進程。在接受到TERM信號后,squid關(guān)閉進來的套接字以拒收新請求。然后它等待一段時間,用以完成外出請求。默認時間是30秒,你可以在shutdown_lifetime指令里更改它。

假如因為某些理由,squid.pid文件丟失或不可讀,squid -k命令會失敗。在此情形下,你可以用ps找到squid的進程ID,然后手工殺死squid。例如:

%ps ax |grep squid

假如你看到不止一個squid進程,請殺死以(squid)顯示的那個。例如:

% ps ax | grep squid
            294  ??  Is     0:00.01 squid -sD
            296  ??  S      0:00.27 (squid) -sD (squid)
            % kill -TERM 296

在發(fā)送TERM信號后,你也許想查看日志,以確認squid已關(guān)閉:

% tail -f logs/cache.log
            2003/09/29 21:49:30| Preparing for shutdown after 9316 requests
            2003/09/29 21:49:30| Waiting 10 seconds for active connections to finish
            2003/09/29 21:49:30| FD 11 Closing HTTP connection
            2003/09/29 21:49:31| Shutting down...
            2003/09/29 21:49:31| FD 12 Closing ICP connection
            2003/09/29 21:49:31| Closing unlinkd pipe on FD 9
            2003/09/29 21:49:31| storeDirWriteCleanLogs: Starting...
            2003/09/29 21:49:32| Finished.  Wrote 253 entries.
            2003/09/29 21:49:32| Took 0.1 seconds (1957.6 entries/sec).
            2003/09/29 21:49:32| Squid Cache (Version 2.5.STABLE4): Exiting normally.

假如你使用squid -k interrupt命令,squid立即關(guān)閉,不用等待完成活動請求。這與在kill里發(fā)送INT信號相同。

5.9 重配置運行中的squid進程

在你了解了更多關(guān)于squid的知識后,你會發(fā)現(xiàn)對squid.conf文件做了許多改動。為了讓新設(shè)置生效,你可以關(guān)閉和重啟squid,或者在squid運行時,重配置它。

重配置運行中的squid最好的方法是使用squid -k reconfigure命令:

%squid -k reconfigure

當(dāng)你運行該命令時,HUP信號被發(fā)送到運行中的squid進程。然后squid讀取和解析squid.conf文件。假如操作成功,你可以在cache.log里看到這些:

2003/09/29 22:02:25| Restarting Squid Cache (version 2.5.STABLE4)...
            2003/09/29 22:02:25| FD 12 Closing HTTP connection
            2003/09/29 22:02:25| FD 13 Closing ICP connection
            2003/09/29 22:02:25| Cache dir '/usr/local/squid/var/cache' size remains unchanged
            at 102400 KB
            2003/09/29 22:02:25| DNS Socket created on FD 5
            2003/09/29 22:02:25| Adding nameserver 10.0.0.1 from /etc/resolv.conf
            2003/09/29 22:02:25| Accepting HTTP connections at 0.0.0.0, port 3128, FD 9.
            2003/09/29 22:02:25| Accepting ICP messages at 0.0.0.0, port 3130, FD 11.
            2003/09/29 22:02:25| WCCP Disabled.
            2003/09/29 22:02:25| Loaded Icons.
            2003/09/29 22:02:25| Ready to serve requests.

在使用reconfigure選項時你須謹慎,因為所做的改變可能會導(dǎo)致致命錯誤。例如,請注意squid關(guān)閉和重新打開進來的HTTP和ICP套接字;假如你將http_port改變?yōu)閟quid不能打開的端口,它會發(fā)生致命錯誤并退出。

在squid運行時,某些指令和和選項不能改變,包括:

  • 刪除cache目錄(cache_dir指令)
  • 改變store_log指令
  • 改變coss cache_dir的塊大小數(shù)值。事實上,無論何時你改變了該值,你必須重新初始化coss cache_dir.
  • coredump_dir指令在重配置過程中不被檢查。所以,在squid已經(jīng)啟動了后,你不能讓squid改變它的當(dāng)前目錄。

solaris用戶在重配置squid過程中可能遇到其他問題。solaris的stdio執(zhí)行組件里的fopen()調(diào)用要求使用小于256的未用文件描述符。FILE結(jié)構(gòu)以8位值存儲該文件描述符。正常情況下這不構(gòu)成問題,因為squid使用底層I/O(例如open())來打開cache文件。然而,在重配置過程中的某些任務(wù)使用fopen(),這就有可能失敗,因為前面的256個文件描述符已被分配出去。

5.10 滾動日志文件

除非你在squid.conf里禁止,squid會寫大量的日志文件。你必須周期性的滾動日志文件,以阻止它們變得太大。squid將大量的重要信息寫入日志,假如寫不進去了,squid會發(fā)生錯誤并退出。為了合理控制磁盤空間消耗,在cron里使用如下命令:

%squid -k rotate

例如,如下任務(wù)接口在每天的早上4點滾動日志:

0 4 * * * /usr/local/squid/sbin/squid -k rotate

該命令做兩件事。首先,它關(guān)閉當(dāng)前打開的日志文件。然后,通過在文件名后加數(shù)字擴展名,它重命名cache.log,store.log,和access.log。例如,cache.log變成cache.log.0,cache.log.0變成cache.log.1,如此繼續(xù),滾動到logfile_rotate選項指定的值。

squid僅僅保存每個日志文件的最后logfile_rotate版本。更老的版本在重命名過程中被刪除。假如你想保存更多的拷貝,你需要增加logfile_rotate限制,或者編寫腳本用于將日志文件移動到其他位置。 請見13.7章關(guān)于滾動日志的其他信息。

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

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多