歡迎您光臨本站 註冊首頁

squid3.0 反向代理伺服器配置手記~~第一次弄,不成樣哈

←手機掃碼閱讀     火星人 @ 2014-03-04 , reply:0

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 [email protected]
    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

[火星人 ] squid3.0 反向代理伺服器配置手記~~第一次弄,不成樣哈已經有456次圍觀

http://coctec.com/docs/service/show-post-31804.html