一 squid簡介html
squid是一個支持http、https、ftp等服務的web緩存代理軟件,經過緩存頁面實現下降寬帶佔用提升頁面響應時間。另外,squid提供訪問控制,squid的緩存頁面存放在內存和硬盤中,在選擇服務器時候內存和硬盤要求高,對於數據過時更新,須要不按期的清理緩存的數據。web
二 squid 代碼請求流程
vim
1 客戶端訪問squid代理服務器
後端
2 代理服務器表明客戶端訪問後端真實服務器瀏覽器
3 真實服務器把數據返回給squid代理服務器緩存
4 代理服務器把響應數據發送給客戶端,並把頁面緩存在本地的內存及磁盤中安全
5 客戶端再次請求相同數據時,代理服務器直接將緩存的數據返回給客戶端服務器
三 squid代理服務類型網絡
通常分三種類型,正向代理服務器、透明代理服務器、反向代理服務器。併發
正向代理:主要應用於內部網絡訪問外部網絡時緩存頁面數據,提供統一網絡接口連接到外網,全部的內網客戶端無需配置外網ip便可經過squid上網,在這種模式下,squid主要負責提供緩存加速及訪問控制的功能。代理結構以下圖
透明代理:與正向代理相似,不須要終端用戶進行特殊設置,須要結合網關部署,全部操做均由管理員在網關服務器和代理服務器進行設置,這些對於用戶透明的。代理結構以下圖
反向代理:反向代理結合智能DNS能夠實現基本的CDN框架,此時的squid代理服務器能夠直接表明後端真實服務器提供頁面訪問,用戶並感受不到本身是在訪問代理服務器,有利於減輕真實服務器壓力,提升併發和響應速度。
四 配置文件解析
使用yum安裝squid時,默認的配置文件是/etc/squid/squid.conf. 下表給出詳細解讀
配置選項 | 具體描述 |
http_port | 設置監聽的網絡端口,默認是3128 |
cache_dir | 設置緩存位置及大小,可使用多個cache_dir設置多個存儲位置 cache_dir ufs /home/data/squid/cache 100 16 256 100表明百兆存儲容量,16及256表明子目錄個數 |
access_log | 設置日誌路徑和格式,access_log /var/log/squid/access.log combined |
acl | 定義控制訪問列表對象,能夠控制原地址端口時間 |
http_access | 訪問控制,容許使用acl定義localnat http_access allow localnat |
visible_hostname | 設置主機名,默認squid將默認檢測主機名 |
cache_peer | 用來設置能夠鏈接的其餘代理服務器 格式:cache_peer hostname type http-port icp-port[option] hostname爲其餘代理機器的主機名或ip type類型可爲parent sibling multicast http_port指定端口號 icp-port指定ICP端口號 option選項可選值以下: proxy-only實現不緩存鄰居的任何響應 weight=n設置服務器權重 ttl=n此值對廣播鄰居有效 rounf-robin設置輪詢 max-conn=n設置連接鄰居cache的併發量 originserver設置鄰居爲源真是服務器,作反向代理使用 |
五 實例squid反向代理
squid通常緩存靜態頁面,網頁、圖片、歌曲,默認不緩存CGI腳本。
服務器名稱 | 網絡配置 |
squid.test.com | eth0:10.10.10.10 |
eth1:192.168.1.2 | |
web1.test.com | eth0:192.168.1.3 |
web2.test.com | eth0:192.168.1.4 |
1 代理服務器squid設置
首先配置網絡環境
網卡eth0
vim /etc/sysconfig/network-scripts/ifcfg-eth0
DEVICE=eth0
BOOTPROTO=static
IPADDR=10.10.10.10
NETMASK=255.0.0.0
ONBOOT=yes
TYPE=Ethernet
網卡eth1
vim /etc/sysconfig/network-scripts/ifcfg-eth1
DEVICE=eth1
BOOTPROTO=static
IPADDR=192.168.1.2
NETMASK=255.255.255.0
ONBOOT=yes
TYPE=Ethernet
執行 service network restart
安裝squid代理服務並修改配置文件
yum install -y squid
vim /etc/squid/squid.conf
acl manager proto cache_object #定義緩存管理ACL
acl localhost src 127.0.0.1/32 ::1 #定義源地址爲本地迴環地址的ACL
acl to_localhost dst 127.0.0.0/8 0.0.0.0/32 ::1 #定義目標地址的ACL
acl localnet src 10.0.0.0/8 #定義源地址爲10.0.0.0/8的ACL
acl localnet src 172.16.0.0/12 #定義源地址ACL
acl localnet src 192.168.0.0/16
acl localnet src fc00::/7
acl localnet src fe80::/10
acl SSL_ports port 443 #定義安全端口爲443的ACL
acl Safe_ports port 80 #定義安全端口爲80的ACL
acl Safe_ports port 21 #定義安全端口爲21的ACL
acl Safe_ports port 443
acl Safe_ports port 70
acl Safe_ports port 210
acl Safe_ports port 1025-65535
acl Safe_ports port 280
acl Safe_ports port 488
acl Safe_ports port 591
acl Safe_ports port 777
acl CONNECT method CONNECT #定義鏈接方式爲CONNECT的ACL
http_access allow manager localhost #僅容許本機主機進行緩存管理
http_access deny manager #拒絕其餘主機的全部緩存管理
#拒絕全部非Safe_ports的連接
http_access deny !Safe_ports
http_access deny CONNECT !SSL_ports
http_access allow localnet
http_access allow localhost
http_access allow all
visible_hostname squid.test.com #設置主機名
cache_mem 2048 MB #內存緩存總容量
maximum_object_size_in_memory 4096KB #內存緩存單個文件最大4M
maximum_object_size 4096KB #磁盤緩存單個文件最大4M
cache_dir ufs /var/spool/squid 800 16 256 #硬盤緩存目錄 最大800M 16個一級目錄 256個二級目錄
error_directory /usr/share/squid/errors/zh-cn #定義報錯文件的存放目錄
cache_log /var/log/squid/cache.log #緩存日誌文件
cahce_mgr admin@test.com #管理員郵箱
http_port 80 accel vhost
http_port 3128
##no-query表示禁止使用ICP對源服務器進行查詢
##設置ICP端口爲0
##round-robin可讓代理輪詢多臺源服務器
##weight=n指定源服務器權重
##name用來設置服務器的惟一名稱,代理轉發數據到相同主機的不一樣端口很是有用
##originserver模擬本機服務器爲源服務器
cache_peer 192.168.1.3 parent 80 0 no-query originserver round-robin name=server1
cache_peer 192.168.1.4 parent 80 0 no-query originserver round-robin name=server1
hierarchy_stoplist cgi-bin ? #禁止緩存CGI腳本
##refresh_pattern 檢查數據是否過時 min max 是最小最大分鐘 -i是不區分大小寫
##格式:refresh_pattern [-i] regexp min percent max [option]
refresh_pattern ^ftp: 1440 20% 10080
refresh_pattern ^gopher 1440 0% 1440
refresh_pattern -i (/cgi-bin/|\?) 0 0% 0
refresh_pattern . 0 20% 4320
執行service iptables stop
service squid start
chkconfig squid on
2 兩臺web服務器設置
設置web1網絡參數
vim /etc/sysconfig/network-scripts/ifcfg-eth0
DEVICE=eth0
BOOTPROTO=static
IPADDR=192.168.1.3
NETMASK=255.255.255.0
ONBOOT=yes
TYPE=Ethernet
service network restart
service iptables stop
chkconfig iptables off
yum install -y httpd
echo "web1 192.168.1.3" > /var/www/html/index.html
service httpd start
chkconfig httpd on
web2上一樣執行上面步驟,注意修改部分參數
3 客戶端驗證
瀏覽器訪問代理服務器,http://10.10.10.10 屢次刷新後會獲得輪詢的不一樣網頁