Squid反向代理

普通代理方式是代理内部网络用户访问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
====================================================================
[[email protected] 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
[[email protected] html]# netstat -lntup|grep 80
tcp        0      0 :::80                       :::*                        LISTEN      1798/httpd          
[[email protected] 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)
[[email protected] html]#
[[email protected] html]# curl 10.0.0.4
111
[[email protected] html]#
====================================================================

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

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

 [[email protected] html]# ls
1.jpg  1.png  2.jpg  3.jpg  index.html  K2.png  keep1.png  na1.png  na2.png
[[email protected] 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 %<st %tr "%{Referer}>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

完整的配置文件如下:

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

###检查语法

[[email protected] 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
[[email protected] etc]# 
上面是没错误的
#启动
[[email protected] 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-----------------------------
[[email protected] etc]#

#检查命中转态

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

一边用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
时间: 2024-10-14 04:52:06

Squid反向代理的相关文章

利用Squid反向代理搭建CDN缓存服务器加快Web访问速度

2011年11月26日 ? Web服务器架构 ? 评论数 2 案例:Web服务器:域名www.abc.com IP:192.168.21.129 电信单线路接入访问用户:电信宽带用户.移动宽带用户出现问题:电信用户打开www.abc.com正常,移动用户打开www.abc.com很慢,甚至打不开解决方案:在移动机房放置一台CDN代理服务器,通过智能DNS解析,让电信用户直接访问Web服务器.让移动用户访问CDN代理服务器,解决移动用户访问Web服务器慢的问题具体操作:CDN代理服务器:系统:Ce

m2014-architecture-imgserver-&gt;利用Squid反向代理搭建CDN缓存服务器加快Web访问速度

案例:Web服务器:域名www.abc.com IP:192.168.21.129 电信单线路接入访问用户:电信宽带用户.移动宽带用户出现问题:电信用户打开www.abc.com正常,移动用户打开www.abc.com很慢,甚至打不开解决方案:在移动机房放置一台CDN代理服务器,通过智能DNS解析,让电信用户直接访问Web服务器.让移动用户访问CDN代理服务器,解决移动用户访问Web服务器慢的问题具体操作:CDN代理服务器:系统:CentOS 5.5 主机名:cdn.abc.com IP:192

Squid 反向代理服务器配置

简介: Squid 反向代理常用于服务器端,客户端访问 Squid 代理服务器的 80 端口,Squid 代理服务器根据配置去请求后端的 web 服务器, 然后将请求到的信息保存在本地并回传给客户端,当又有客户端请求相同资源时,Squid 代理服务器直接将缓存中的信息回传给客户端. 一.安装 Squid shell > ulimit -n # 默认打开文件描述符为 1024 ,要增大它 1024 shell > vim /etc/security/limits.conf * - nofile

利用squid 反向代理提高网站性能

部分转自:http://www.ibm.com/developerworks/cn/linux/l-cn-squid/ Squid 反向代理的实现原理 目前有许多反向代理软件,比较有名的有 Nginx 和 Squid . Nginx 是由 Igor Sysoev 为俄罗斯访问量第二的 Rambler.ru 站点开发的,是一个高性能的 HTTP 和反向代理服务器,也是一个 IMAP/POP3/SMTP 代理服务器. Squid是由美国政府大力资助的一项研究计划,其目的为解决网络带宽不足的问题,支持

利用 squid 反向代理提高网站性能

本文在介绍 squid 反向代理的工作原理的基础上,指出反向代理技术在提高网站访问速度,增强网站可用性.安全性方面有很好的用途.作者在具体的实验环境下,利用 DNS 轮询和 Squid 反向代理技术,实现了网站的负载均衡,从而提高了网站的可用性和可靠性. 现在有许多大型的门户网站如 SINA 都采用 squid 反向代理技术来加速网站的访问速度,可将不同的 URL 请求分发到后台不同的 WEB 服务器上,同时互联网用户只能看到反向代理服务器的地址,加强了网站的访问安全. 反向代理的概念 反向代理

利用智能DNS和squid反向代理模拟简易CDN

前提本次实验应该用到5台Server和至少两台测试Client.但受制于服务器数量影响,实际一共用到了3台服务器,其中权威DNS本次没有配置.智能DNS跟CDN缓存节点1共用同一台服务器. 本次实验不介绍源站Server的搭建.本实验环境中用的是现成的系统.本次实验默认读者已经了解 DNS的相关知识,如A记录.CNAME记录.NS记录等.本次实验默认读者已经了解CDN的基本原理.本次实验默认读者了解Linux基本的知识点.如果不具备以上知识点,请先补充完善自己的知识体系. 实验规划:1. 客户源

部署和调优 2.1 squid反向代理

配置反向代理 打开配置文件 vim /etc/squid/squid.conf 修改 http_port 3128 改为 http_port 80 accel vhost vport 在它下面添加一段 cache_peer 115.239.210.27 parent 80 0 originserver name=a cache_peer_domain a www.qq.com cache_peer 114.80.143.158 parent 80 0 originserver name=b ca

Squid 反向代理加速网站

本实例的域名是 wenjin.cache.ibm.com.cn,通过DNS的轮询 技术,将客户端的请求分发给其中一台 Squid 反向代理服务器处理,如果这台 Squid 缓存了用户的请求资源,则将请求的资源直接返回给用户,否则这台 Squid 将没有缓存的请求根据配置的规则发送给邻居 Squid 和后台的 WEB 服务器处理,这样既减轻后台 WEB 服务器的负载,又提高整个网站的性能和安全性.该系统结构图 3 如下: 图 3. 系统结构 配置的系统环境: 一台 DNS 服务器:操作系统 Fre

CentOS系统Squid反向代理

CentOS 联网后,执行运行yum进行安装 默认是squid3 yum install squid 安装完成后,默认squid并没有启动,但是服务中已经存在该服务,我们可以通过命令让其启动或者停止 serivce squid status //判断服务是否运行 serivce squid start//启动squid service squid stop//停止squid 安装后,squid并没有运行. ---------------------------------------------