普通代理方式是代理内部网络用户访问Internet上服务器的连接请求,客户端必须指定代理服务器,并将本来要直接发送到internet上服务器的连接请求发送给代理服务器处理。

反向代理方式是指以代理服务器来接受Internet上的连接请求,然后将请求转发给内部网络上的服务器,并将从服务器上得到的结果返回给internet上请求连接的客户端,此时代理服务器对外表现问一台服务器。


1、反向代理流程说明:


squid做为反向代理服务器,通常工作在一个服务器集群的前端,在用户端看来,squid服务器就是他所要访问的服务器,而实际意义上squid只是接受用户的请求,同时将用户请求转发给内网真正的web服务器,如果squid本身有用户要访问的内容,则squid直接将内容返回给用户,而无需再去后端的服务器中请求

2、squid反向代理生产案例

很多大型门户网站,经常使用squid作为服务器的反向cache,提高了服务器的访问性能,这些cache服务器组有效减轻了后端web服务器的负载,并且提高了访问速度,在某种程度上保护了后端的web服务器。


3、squid反向代理的优点:

1.节约带宽(对CDN),自己在机房部署squid反向代理,不能节约带宽

2.提升用户体验

3.减轻服务器压力,减少WEB,存储,数据库的压力

公司购买CDN了,企业还需要在机房搭建squid反向代理

答:需求不大,有CDN了,静态业务命中到百分之90左右了,所以需求不大

    在穿透CDN请求比较多的时候,超过web服务及其他存储,数据库的压力时候,需要部署squid

4、squid 反向代理如何获取数据更新

squid反向代理一般只缓存可缓存的数据(比如html页面,js,css和图片等静态数据),而一些CGI脚本程序或ASP、JSP、PHP之类的动态程序默认不缓存,它根据从WEB服务器返回的HTTP头标记来缓冲静态页面,有四个重要的HTTP头标记。


Last-Modified:告诉反向代理页面什么时间被修改;

Expries:告诉反向代理页面什么时间应该从缓冲区中删除

Cache-Control:告诉方向代理页面是否应该被缓存;

Pragma:用来包含实现特定的指令,最常见的是Pragma:no-Cache 


优先级对比(no-cache,expries,max-age)参考

经验:在squid中Cache-Control:no-cache>expries>refresh_pattern>Last-Modified.考前面的最重要,前面的失效了,后面的基本也就失效了。



另外安装一台web服务器,作为源站。也就是RS

web 服务器ip是 10.0.0.4 端口为80

yum install httpd*
/etc/init.d/iptables stop
/etc/init.d/httpd start
netstat -lnt|grep 80
lsof -i :80
echo 111>/var/www/html/index.html
====================================================================
[root@WEB html]# ps -ef |grep http
root      1798     1  0 14:47 ?        00:00:00 /usr/sbin/httpd
apache    1800  1798  0 14:47 ?        00:00:00 /usr/sbin/httpd
apache    1801  1798  0 14:47 ?        00:00:00 /usr/sbin/httpd
apache    1802  1798  0 14:47 ?        00:00:00 /usr/sbin/httpd
apache    1803  1798  0 14:47 ?        00:00:00 /usr/sbin/httpd
apache    1804  1798  0 14:47 ?        00:00:00 /usr/sbin/httpd
apache    1805  1798  0 14:47 ?        00:00:00 /usr/sbin/httpd
apache    1806  1798  0 14:47 ?        00:00:00 /usr/sbin/httpd
apache    1807  1798  0 14:47 ?        00:00:00 /usr/sbin/httpd
root      1811  1743  0 14:49 pts/0    00:00:00 grep http
[root@WEB html]# netstat -lntup|grep 80
tcp        0      0 :::80                       :::*                        LISTEN      1798/httpd          
[root@WEB html]# lsof -i :80
COMMAND  PID   USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
httpd   1798   root    4u  IPv6  19044      0t0  TCP *:http (LISTEN)
httpd   1800 apache    4u  IPv6  19044      0t0  TCP *:http (LISTEN)
httpd   1801 apache    4u  IPv6  19044      0t0  TCP *:http (LISTEN)
httpd   1802 apache    4u  IPv6  19044      0t0  TCP *:http (LISTEN)
httpd   1803 apache    4u  IPv6  19044      0t0  TCP *:http (LISTEN)
httpd   1804 apache    4u  IPv6  19044      0t0  TCP *:http (LISTEN)
httpd   1805 apache    4u  IPv6  19044      0t0  TCP *:http (LISTEN)
httpd   1806 apache    4u  IPv6  19044      0t0  TCP *:http (LISTEN)
httpd   1807 apache    4u  IPv6  19044      0t0  TCP *:http (LISTEN)
[root@WEB html]#
[root@WEB html]# curl 10.0.0.4
111
[root@WEB html]#
====================================================================

 在客户端打开检查看看是否正确 

 上传3张图片到web站点,后缀为jpg的图片

 [root@WEB html]# ls
1.jpg  1.png  2.jpg  3.jpg  index.html  K2.png  keep1.png  na1.png  na2.png
[root@WEB html]#
 http://10.0.0.4/1.jpg
 http://10.0.0.4/2.jpg
 http://10.0.0.4/3.jpg



 在squid服务器(IP:10.0.0.3),设置squid.conf 

 

#首先设置squid支持虚拟主机模式
host_port 8000 accel vhost vport    ##加速模式
 
#设置squid运行的用户
cache_effective_user squid
cache_effective_group squid
#设置对哪里web做方向代理
cache_peer imag1.lvnian.org      parent 80 0 no-query no-digest max-conn=32 originserver
#cache_peer vi.gis.cttic.cn      parent  80 0 no-query no-digest max-conn 32 originserve  
#设置缓存目录(squid吃没吃文件系统类型、缓存目录、目录大小Mbyte、第一层目录的文件数,第二层文件夹的数目)
cache_dir ufs /app/squid/cache 10000 16 256   
   
cache_mem 128 MB
#这是一个优化选项,增加该内存值有利于缓存。应该注意的是:  一般来说如果系统有内存,设置该值为(n/)3M。现在是3G 所以这里1G
cache_swap_low 90                  #最小允许使用swap 90%
cache_swap_high 95                 #最多允许使用swap 95%
maximum_object_size 8192 KB        #设置缓存在硬盘上的文件的最大大小
minimum_object_size 0 KB            #设置缓存在硬盘上的文件的最小大小
maximum_object_size_in_memory 4096 KB#设置缓存在内存上的文件的大小
emulate_httpd_log on
#将使Squid仿照Web服务器的格式创建访问记录。如果希望使用
memory_replacement_policy lru       #缓存算法,保持最近使用的   
   
   
 #设置这些方向代理的ACL,避免squid被恶意用户作为代理
 acl my_allow_domain_list dstdomain imag1.lvnian.org
 #acl my_allow_domain_list dstdomain vi.gis.cttic.cn
 #只允许我们定义的域名my_allow_domain_list
 cache_peer_access imag1.lvnian.org vi.gis.cttic.cn
 
 
#设置缓存过期时间
refresh_pattern -i \.jpg$ 30 50% 4320 reload-into-ims
refresh_pattern -i \.png$ 30 50% 4320 reload-into-ims
refresh_pattern -i \.gif$ 30 50% 4320 reload-into-ims
上面的意思是:如果某个响应驻留在cache里的时间没有超过这个30分钟最低的限制,那么他不会过期,类似最高限制4320分钟是存活响应的最高时间限制,如果某个响应驻留在你cache里的实际高于这个最高限制,那么它必须被刷新,在最低和最高时间限制之间的响应,会面对squid的最后修改系数(LM-factor)算法,对这样的响应,squid计算响应的年龄和最后修改的系数,然后将他作为百分比值进行比较,如果这个系数超过50%,那么这个响应必须被刷新

###################

 squid缓存设置--控制页面的缓存时间

 refresh_pattern的作用: 用于确定一个页面进入cache后,它在cache中停留的时间。


refresh_pattern 只对后端没设置Expires过期时间的页面起作用,比如论坛页面;而对类似apache mod_expires 设置过的页面不起作用。

语法:

refresh_pattern [-i] regexp min percent max [options
refresh_pattern -i \.css$ 1440 50% 129600 reload-into-ims
refresh_pattern -i \.xml$ 1440 50% 129600 reload-into-ims
refresh_pattern -i \.html$ 1440 90% 129600 reload-into-ims
refresh_pattern -i \.shtml$ 1440 90% 129600 reload-into-ims
refresh_pattern -i \.hml$ 1440 90% 129600 reload-into-ims
refresh_pattern -i \.jpg$ 1440 90% 129600 reload-into-ims
refresh_pattern -i \.png$ 1440 90% 129600 reload-into-ims
refresh_pattern -i \.gif$ 1440 90% 129600 ignore-reload
refresh_pattern -i \.bmp$ 1440 90% 129600 reload-into-ims
refresh_pattern -i \.js$ 1440 90% 129600 reload-into-ims

 

#指定hosts 文件

hosts_file /etc/hosts
request_header_max_size 128 KB
ipcache_size 1024
ipcache_low 90
ipcache_high 95


###在hosts中添加相应的解析

cp /etc/hosts /etc/hosts
echo -e "10.0.0.4      imag1.lvnian.org" >>/etc/hosts



##只有缓存完了,不管你在不在线,都会有。哪怕你把客户端端IE删除缓存,把后端的http服务关闭,也一样可以看到数据

offline_mode on


##定义日志格式

logformat squid %{X-Forwarded-For}>h %ui %un [%tl] "%rm %ru HTTP/%rv" %Hs %h" "%{User-Agent}>h" %Ss:%Sh
##应用日志格式
access_log /application/squid3.0/var/logs/access.log squid


###可以配置多个缓存目录

cache_dir aufs /data1/cache 94000 64 256
cache_dir aufs /data2/cache 94000 64 256
cache_dir aufs /data3/cache 94000 64 256


完整的配置文件如下:

[root@Squid etc]# cat squid.conf
acl manager proto cache_object
acl localhost src 127.0.0.1/32
acl to_localhost dst 127.0.0.0/8 0.0.0.0/32
acl localnet src 10.0.0.0/8     # RFC1918 possible internal network
acl localnet src 172.16.0.0/12  # RFC1918 possible internal network
acl localnet src 192.168.0.0/16 # RFC1918 possible internal network
acl SSL_ports port 443
acl Safe_ports port 80          # http
acl Safe_ports port 21          # ftp
acl Safe_ports port 443         # https
acl Safe_ports port 70          # gopher
acl Safe_ports port 210         # wais
acl Safe_ports port 1025-65535  # unregistered ports
acl Safe_ports port 280         # http-mgmt
acl Safe_ports port 488         # gss-http
acl Safe_ports port 591         # filemaker
acl Safe_ports port 777         # multiling http
acl CONNECT method CONNECT
http_access allow manager localhost
http_access deny manager
http_access deny !Safe_ports
http_access deny CONNECT !SSL_ports
http_access allow localnet
http_access deny all
icp_access allow localnet
icp_access deny all
htcp_access allow localnet
htcp_access deny all
###################################
http_port 80 accel vhost vport
#设置对哪里web做方向代理
cache_peer imag1.lvnian.org  parent 80 0 no-query no-digest max-conn=32 originserver
cache_mem 64 MB
cache_swap_low 90
cache_swap_high 95
maximum_object_size 8192 KB
minimum_object_size 0 KB
maximum_object_size_in_memory 4096 KB
emulate_httpd_log on
memory_replacement_policy lru
###################################
hierarchy_stoplist cgi-bin ?
cache_dir ufs /application/squid3.0/var/cache 100 16 256
access_log /application/squid3.0/var/logs/access.log squid
cache_log /application/squid3.0/var/logs/cache.log
cache_store_log /application/squid3.0/var/logs/store.log
refresh_pattern ^ftp:           1440    20%     10080
refresh_pattern ^gopher:        1440    0%      1440
refresh_pattern (cgi-bin|\?)    0       0%      0
refresh_pattern .               0       20%     4320
cache_mgr [email protected]
cache_effective_user squid
cache_effective_group squid
visible_hostname img01.etiantian.org 
icp_port 3130
coredump_dir /application/squid3.0/var/cache
#######################################
refresh_pattern -i \.css$ 1440 50% 129600 reload-into-ims
refresh_pattern -i \.xml$ 1440 50% 129600 reload-into-ims
refresh_pattern -i \.html$ 1440 90% 129600 reload-into-ims
refresh_pattern -i \.shtml$ 1440 90% 129600 reload-into-ims
refresh_pattern -i \.htm$ 1440 90% 129600 reload-into-ims
refresh_pattern -i \.jpg$ 1440 90% 129600 reload-into-ims
refresh_pattern -i \.png$ 1440 90% 129600 reload-into-ims
refresh_pattern -i \.gif$ 1440 90% 129600 ignore-reload
refresh_pattern -i \.bmp$ 1440 90% 129600 reload-into-ims
refresh_pattern -i \.js$ 1440 90% 129600 reload-into-ims
#指定hosts 文件
hosts_file  /etc/hosts
request_header_max_size 128 KB
ipcache_size 1024
ipcache_low 90
ipcache_high 95
cache_dir ufs /app/squid/cache 10000 16 256
offline_mode on
[root@Squid etc]#


 ###检查语法

[root@Squid etc]# squid -k parse
2015/09/08 16:54:32| Processing Configuration File: /application/squid3.0/etc/squid.conf (depth 0)
2015/09/08 16:54:32| WARNING: use of 'reload-into-ims' in 'refresh_pattern' violates HTTP
2015/09/08 16:54:32| Initializing https proxy context
[root@Squid etc]# 
上面是没错误的
#启动
[root@Squid etc]# /etc/init.d/squid restart
 squid restart...                                          [  OK  ]
---------- -------------check ing-----------------------------
tcp        0      0 0.0.0.0:80                  0.0.0.0:*                   LISTEN      55119/(squid)       
udp        0      0 0.0.0.0:3130                0.0.0.0:*                               55119/(squid)       
-----------------------check over-----------------------------
[root@Squid etc]#


#检查命中转态

curl -I -s 10.0.0.3/1.jpg|grep -i x-cache
[root@Squid ~]# curl -I -s 10.0.0.4/1.jpg|grep -i x-cache 
X-Cache: HIT from img01.lvnian.org
[root@Squid ~]# curl -I -s 10.0.0.4/2.jpg|grep -i x-cache 
X-Cache: HIT from img01.lvnian.org
[root@Squid ~]# curl -I -s 10.0.0.4/3.jpg|grep -i x-cache 
X-Cache: HIT from img01.lvnian.org
[root@Squid ~]#

一边用windows浏览器访问下面地址,看能不能正确访问到10.0.0.4后端RS的内容。一边看10.0.0.3squid的日志文件。观察squid的代理情况

 http://10.0.0.3/1.jpg
 http://10.0.0.3/2.jpg
 http://10.0.0.3/3.jpg