squid代理服務器原理解析和反向代理實例部署


一 squid簡介html

squid是一個支持http、https、ftp等服務的web緩存代理軟件,經過緩存頁面實現下降寬帶佔用提升頁面響應時間。另外,squid提供訪問控制,squid的緩存頁面存放在內存和硬盤中,在選擇服務器時候內存和硬盤要求高,對於數據過時更新,須要不按期的清理緩存的數據。web


二 squid 代碼請求流程
vim

1 客戶端訪問squid代理服務器
後端

2 代理服務器表明客戶端訪問後端真實服務器瀏覽器

3 真實服務器把數據返回給squid代理服務器緩存

4 代理服務器把響應數據發送給客戶端,並把頁面緩存在本地的內存及磁盤中安全

5 客戶端再次請求相同數據時,代理服務器直接將緩存的數據返回給客戶端服務器


三 squid代理服務類型網絡

通常分三種類型,正向代理服務器、透明代理服務器、反向代理服務器。併發

正向代理:主要應用於內部網絡訪問外部網絡時緩存頁面數據,提供統一網絡接口連接到外網,全部的內網客戶端無需配置外網ip便可經過squid上網,在這種模式下,squid主要負責提供緩存加速及訪問控制的功能。代理結構以下圖

wKioL1iW0uLyBfPzAAGOxk5_Pdc909.png

透明代理:與正向代理相似,不須要終端用戶進行特殊設置,須要結合網關部署,全部操做均由管理員在網關服務器和代理服務器進行設置,這些對於用戶透明的。代理結構以下圖

wKioL1iW14-ykUUIAAGYNHhFoYE983.png

反向代理:反向代理結合智能DNS能夠實現基本的CDN框架,此時的squid代理服務器能夠直接表明後端真實服務器提供頁面訪問,用戶並感受不到本身是在訪問代理服務器,有利於減輕真實服務器壓力,提升併發和響應速度。

wKioL1iW3zKCpJxeAAFr72v5o-I165.png

四 配置文件解析

使用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 屢次刷新後會獲得輪詢的不一樣網頁 

相關文章
相關標籤/搜索