squid3.0 反向代理伺服器配置手記~~第一次弄,不成樣哈
前言:
公司伺服器需要進行遷移,從A機櫃到B機櫃,二機櫃之間的距離為10米。哈哈。好近,儘管很近,但IP段不一樣。
因此web,dns,mail,mysql 都得切換~
在這裡呢,先寫一些切換前的準備工作,squid 反向代理就是其中之一
特別感謝IORI,明的指點!!!感謝黨,感謝人民,感謝51CTO,感謝CU,感謝你們~
一.反向代理的概念
什麼是反向代理呢?其實,反向代理也就是通常所說的WEB伺服器加速,它是一種通過在繁忙的WEB伺服器和Internet之間增加一個高速的
WEB緩衝伺服器(即:WEB反向代理伺服器)來降低實際的WEB伺服器的負載。典型的結構如下圖所示:
http://liuyu.blog.51cto.com/album/183345/120582463885.jpg
Web伺服器加速(反向代理)是針對Web伺服器提供加速功能的。它作為代理Cache,但並不針對瀏覽器用戶,而針對一台或多台特定Web伺服器
(這也是反向代理名稱的由來)。實施反向代理(如上圖所示),只要將Reverse Proxy Cache設備放置在一台或多台Web伺服器前端即可。當
互聯網用戶訪問某個WEB伺服器時,通過DNS伺服器解析后的IP地址是Reverse Proxy Server的IP地址,而非原始Web伺服器的IP地址,這時
Reverse Proxy Server設備充當Web伺服器,瀏覽器可以與它連接,無需再直接與Web伺服器相連。因此,大量Web服務工作量被卸載到反向代理
服務上。不但能夠防止外部網主機直接和web伺服器直接通信帶來的安全隱患,而且能夠很大程度上減輕web伺服器的負擔,提高訪問速度。
二.反向代理工作原理
反向代理伺服器位於本地WEB伺服器和Internet之間,如下圖所示:
http://liuyu.blog.51cto.com/album/183345/120582464005.jpg
當用戶瀏覽器發出一個HTTP請求時,通過域名解析將請求定向到反向代理伺服器(如果要實現多個WEB伺服器的反向代理,需要將多個WEB
伺服器的域名都指向反向代理伺服器)。由反向代理伺服器處理器請求。反向代理一般只緩存可緩衝的數據(比如html網頁和圖片等),而一
些CGI腳本程序或者ASP之類的程序不緩存。它根據從WEB伺服器返回的HTTP頭標記來緩衝靜態頁面。
以上來自互聯網
三.squid做反向代理
1.安裝
註:如果系統是redhat 9,需要安裝epoll的庫文件(epoll有效的降低系統的I/0瓶頸,資源佔用率)
wget http://www.squid-cache.org/Versions/v3/3.0/squid-3.0.STABLE2.tar.gz
為了安全起見,建立squid運行的用戶及組
useradd squid -M -c "Squid user" -d /dev/null -s /sbin/nologin
tar zxvf squid-3.0.STABLE2.tar.gz
cd squid-3.0.STABLE2
./configure --prefix=/usr/local/squid3 --disable-carp --with-aufs-threads=32 --with-pthreads --enable-storeio='ufs,aufs,coss,null' --enable-disk-io='AIO,Blocking' --enable-removal-policies='heap,lru'
--disable-wccp --enable-kill-parent-hack --disable-snmp --disable-poll --disable-select --enable-auth=basic --with-aio
--disable-ident-lookup --with-filedescriptors=65536
編譯參數:
--prefix=/usr/local/squid3 :指定安裝路徑 為便於管理
--enable-poll :提升性能
--enable-snmp :此選項可以讓MRTG使用SNMP協議對伺服器的流量狀態進行監測,因此必須選擇此項,使Squid
支持SNMP介面。
--enable-storeio=ufs,null #使用的文件系統通常是默認的ufs,不過如果想要做一個不緩存任何文件的代理
伺服器,就需要加上null文件系統。
其它的參數等待大家來解釋。HOHO ~
make;make install
安裝完畢。
2.配置
注意:squid 的配置文件在:/usr/local/squid3/etc/squid.conf
這裡是最重要的,也是最難的。
http_port 80 選項 http_port 指定squid監聽HTTP請求的埠,一般都設置成80埠,這樣使用戶感覺不到反向代理的存在,就像訪問真正
的WEB伺服器一樣。
cache_mem 128 MB 共享內存大小(squid在提供服務的時候所使用的內存)
maximum_object_size_in_memory 512 KB 最大緩存文件大小,超過此值則不緩存
memory_replacement_policy lru 替換機制 (lru叫做 最近不常用的單元 unit一般就是常說的object 也就是當cache中的內容比如內存或硬碟達到上限時的 那麼就需要進行數據的換進和換出工作)
cache_dir null /tmp cache_dir存儲cache內容也就是object的物理存放點
cache_dir ufs /tmp1 10000 16 256 (/tmp size L1 L2)
100G其中1層目錄16個 並且每個1層目錄下又有256個2層目錄[或者說子目錄]
#磁碟緩存的類型和目錄,大小,一二級目錄的設置,這裡磁碟緩存大小是10G
ufs是一種文件存儲方式 因為os一般都是從內存獲取數據 那麼內存的東西必須最後寫的硬碟上~
sync 同步的時候用的ufs 那麼squid也是一樣
ufs一般是同時寫入內存和硬碟
注意:size是按照M為單位的也就這個目錄中最大存儲容量的上限
max_open_disk_fds 0
minimum_object_size 0 KB
maximum_object_size 4096 KB
logformat squid %ts.%03tu %6tr %>a %Ss/%03Hs %<st %rm %ru %un %Sh/%<A %mt
設置access_log中日誌存儲的格式~
access_log /usr/local/squid3/var/logs/access.log squid
access_log為客戶端請求的日誌
cache_log /usr/local/squid3/var/logs/cache.log
為squid自身的運行日誌
pid_filename /usr/local/squid3/var/logs/squid.pid
此三項是設置PID和日誌文件位置
cache_store_log none 不記錄store.log
visible_hostname liuyu.blog.51cto.com
liuyu.blog.51cto.com 只是標籤 有利於檢查是否你的那台設備在提供服務!
cache_peer 192.168.1.53 parent 80 0 no-query round-robin max-conn=32 originserver
squid2.5以上都是用的cache_peer來指定所需要代理的伺服器的IP 這一點很重要!
acl all src 0.0.0.0/0.0.0.0
acl QUERY urlpath_regex cgi-bin .php .cgi .avi .wmv .rm .ram .mpg .mpeg .zip .exe
cache deny QUERY
cache_effective_user squid
cache_effective_group squid
在這裡我所以的日誌都記錄在:/usr/local/squid3/var/logs里
給目錄相應的許可權
chmod 666 -R /usr/local/squid3/var/logs
chown squid:squid -R /usr/local/squid3/var/logs
保存配置!
3.測試配置是否正確
# /usr/local/squid2/sbin/squid -k parse
出現ERROR:
WARNING: Cannot write log file: /usr/local/squid3/var/logs/cache.log
/usr/local/squid3/var/logs/cache.log: Permission denied
messages will be sent to 'stderr'.
2008/03/13 12:53:09| Creating Swap Directories
FATAL: Failed to make swap directory /usr/local/squid3/var/cache: (13) Permission denied
很明顯許可權不對,修改後測試通過!
其它的相關命令:
看西門飛 文章 :http://bbs.chinaunix.net/thread-960422-1-1.html
4.啟動squid
/usr/local/squid3/sbin/squid -Nd1
ps aux |grep squid 查看是否啟動
5.測試訪問WEB站點
本機hosts 文件指向squid代理伺服器
出現ERROR:
Access Denied.
訪問拒絕
Access control configuration prevents your request from being allowed at this time. Please contact your service provider if
you feel this is incorrect.
當前的存取控制設定禁止您的請求被接受,如果您覺得這是錯誤的,請與您網路服務的提供者聯繫。
本緩存伺服器管理員:webmaster
配置文件設置不對:
acl all src 0.0.0.0/0.0.0.0
http_access allow all
重新測試:OK 一切正常~~~
查看相應日誌一切正常。
四. 配置squid 是方便web進行切換,至於dns,mysql,mail切換文章請大家期待~
總體來說,squid 配置不是很麻煩,主要是配置文件里的每一項,對伺服器的產生的影響非常的重要。細節決定成功~
本人BLOG:http://liuyu.blog.51cto.com/183345/66507
歡迎指點。
[ 本帖最後由 守住每一天 於 2008-3-18 17:03 編輯 ]
《解決方案》
同時代理多個域名的呢?
《解決方案》
cache_peer 192.168.1.53 parent 80 0 no-query round-robin max-conn=32 originserver
這一項就可以實現。
如果另一WEB伺服器是單獨的IP 再加一條就可以了。
如果多個域名在同一個WEB上,直接加一個就可以實現,我這裡就有多個域名。
《解決方案》
cache_peer 192.168.1.53 parent 80 0 no-query round-robin max-conn=32 originserver
你只有一個源阿,為什麼要round-robin?
《解決方案》
LZ的怎麼做的都是父呀,?
《解決方案》
我也是第一次弄。還有好多都不明白呢。
有關cache_peer 也沒有完全理解。期待更多解答。
都 是父 ??
《解決方案》
原帖由 守住每一天 於 2008-3-18 19:55 發表 http://bbs.chinaunix.net/images/common/back.gif
我也是第一次弄。還有好多都不明白呢。
有關cache_peer 也沒有完全理解。期待更多解答。
都 是父 ??
請教下:我讓我的測試機apche監聽81埠,(區域網主機設置host后訪問http://test.abc.com:81沒有問題)配置如下
Listen 81
NameVirtualHost *
<VirtualHost *>
<Directory "/usr/local/www/">
Options FollowSymLinks
AllowOverride None
Order allow,deny
Allow from all
Satisfy all
</Directory>
ServerName test.abc.com
ServerAdmin webadmin@abc.com
DocumentRoot "/usr/local/www/"
DirectoryIndex index.jsp
</VirtualHost>
我讓squid中如下
http_port 80 vhost vport
cache_peer 192.168.1.250 parent 81 0 no-query no-digest originserver name=test
cache_peer_domain test test.abc.com
這樣我測試訪問http://test.abc.com居然跳轉到apche的itworks!
但是當
http_port 3128 vhost vport
cache_peer 192.168.1.250 parent 81 0 no-query no-digest originserver name=test
cache_peer_domain test test.abc.com
這樣我測試訪問http://test.abc.com:3128就沒有問題和http://test.abc.com:81界面一樣 何解釋?
[ 本帖最後由 xuledw 於 2008-3-19 09:43 編輯 ]
《解決方案》
我讓squid中如下
http_port 80 vhost vport
改為我讓squid中如下
http_port 81 vhost vport