squid2.7反向代理配置示例

发布时间:2019-07-18编辑:脚本学堂
本文介绍下,在linux下用squid 2.7配置反向代理的例子,有需要的朋友参考下。

使用squid作反向代理的好处在于:
1、当然是缓存常用数据到内存,及时响应请求。提高访问速度的同时可减轻系统I/O压力。
2、接管http服务程序的连接管理,及时释放系统资源。如apache服务遇到窄带连接的时候会消耗大量的系统内存。

以上案例中使用版本为squid2.7 for Red Hat Enterprise linux 版。

下载地址:http://people.redhat.com/jskala/squid/

1、安装前准备:
请确认本机没有安装过squid软件,rpm -qa查询本机是否有安装过。
如果有则使用rpm -e卸载掉。
安装squid前,请确认本机是否安装有perl,perl-URI两个软件包(rpm包安装环境需要,perl、awk编译安装还需要GCC环境)。
[root@jbxue ~]# rpm -qa perl
perl-5.8.8-32.el5_5.2
[root@jbxue ~]# rpm -qa perl-URI
perl-URI-1.35-3
2、安装,直接rpm -ivh。略过,安装完成可以使用 rpm -ql squid |more 查看安装的目录及文件分布
3、配置squid反向代理。
编辑/etc/squid/squid.conf,修改为:
 

复制代码 代码示例:
visible_hostname cdn.aa.com
#本机主机名
http_port 192.168.6.246:80 vhost vport
#监听本机80端口,IP为本机IP,vhost 加速器支持host header 方式的虚拟主机,vport 加速器支持基于ip 的虚拟主机
icp_port 0
cache_mem 1024 MB
#使用多少内存用着squid-cache,建议为总内存的1/3
cache_swap_low 90
cache_swap_high 95
maximum_object_size 20000 KB
maximum_object_size_in_memory 4096 KB
#最大最小缓存文件大小
cache_dir ufs /var/cache 10000 16 256
#cache磁盘使用位置,及大小和目录数量
ipcache_size 10240
fqdncache_size 10240
cache_store_log none
emulate_httpd_log on
logformat combined %>a %ui %un [%tl] "%rm %ru HTTP/%rv" %Hs %<st "%{Referer}>h" "%{User-Agent}>h" %Ss:%Sh
#启用apache日志格式,访问分析
pid_filename /etc/squid/squid.pid
cache_log /var/cache/cache.log
access_log /var/log/squid/access.log combined
#squid日志存放位置
cache_effective_user nobody
cache_effective_group nobody
#缓存用户及组ID
cache_mgr admin@aa.com.cn
memory_pools off
memory_pools_limit none
#local mamage
acl manager proto cache_object
acl localhost src 127.0.0.1 192.168.6.246
http_access allow manager localhost
http_access deny manager
acl all src 0.0.0.0/0.0.0.0
http_access allow all
#deny this file cache
acl QUERY urlpath_regex cgi-bin .jsp .do .php .cgi .avi .wmv .rm .ram .mpg .mpeg .zip .exe
cache deny QUERY
#不缓存QUERY设定内容
#acl picurl url_regex -i .bmp$ .png$ .jpg$ .gif$ .jpeg$
#acl mystie1 referer_regex -i ct10000
#http_access allow mystie1 picurl
#acl nullref referer_regex -i ^$
#http_access allow nullref
#acl hasref referer_regex -i .+
#http_access deny hasref picurl
cache_peer 192.168.6.158 parent 80 0 no-query originserver name=web1
cache_peer 192.168.6.158 parent 80 0 no-query originserver name=web2
cache_peer_domain web1 www.aa.com.cn
cache_peer_domain web2 www.aa.com

新建及设置部分相关文件夹属主
 

复制代码 代码示例:
[root@jbxue var]#mkdir -p /var/cache
[root@jbxue var]#chown -R nobody /var/cache
[root@jbxue var]#chown -R nobody /var/squid

4、初始化及启动服务
初始化你在 squid.conf 里配置的 cache 目录
 

复制代码 代码示例:
[root@jbxue var]#squid -zX

验证 squid.conf 的 语法和配置
 

复制代码 代码示例:
[root@jbxue var]#squid -k parse

启动squid在后台运行
 

复制代码 代码示例:
[root@jbxue var]#squid -s

停止 squid(需执行两次,两个进程)
 

复制代码 代码示例:
[root@jbxue var]#squid -k shutdown

5、查看squid状态相关
使用squidclient这个工具来查看squid的运行情况,缓存命中率等
 

复制代码 代码示例:
[root@jbxue var]#squidclient -h 192.168.6.246 -p 80 mgr:info

查看各选项的使用说明
 

复制代码 代码示例:
[root@jbxue var]#squidclient -h 192.168.6.246 -p 80 mgr:

内存使用情况可通过如下选项查看
 

复制代码 代码示例:
[root@jbxue var]#squidclient -h 192.168.6.246 -p 80 mgr:mem

查看日志中内存命中文件
 

复制代码 代码示例:
[root@jbxue var]#more squid/var/log/squid/access.log | grep TCP_MEM_HIT

cache目录中命中的文件
 

复制代码 代码示例:
[root@jbxue var]#more /usr/local/squid/var/logs/access.log | grep TCP_HIT

6、其它注意事项
a、调整系统部分参数。编辑 /etc/sysctl.conf,增加以下几行:
 

复制代码 代码示例:
[root@jbxue ~]# echo -ne "net.ipv4.tcp_fin_timeout = 30
net.ipv4.tcp_keepalive_time = 1200
net.ipv4.tcp_syncookies = 1
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_tw_recycle = 1
net.ipv4.ip_local_port_range = 1024 65000
net.ipv4.tcp_max_syn_backlog = 8192
net.ipv4.tcp_max_tw_buckets = 5000
" >>/etc/sysctl.conf
[root@jbxue ~]# sysctl -p

相关参数说明:
net.ipv4.tcp_syncookies = 1 表示开启SYN Cookies。当出现SYN等待队列溢出时,启用cookies来处理,可防范少量SYN攻击,默认为0,表示关闭;
net.ipv4.tcp_tw_reuse = 1 表示开启重用。允许将TIME-WAIT sockets重新用于新的TCP连接,默认为0,表示关闭;
net.ipv4.tcp_tw_recycle = 1 表示开启TCP连接中TIME-WAIT sockets的快速回收,默认为0,表示关闭。
net.ipv4.tcp_fin_timeout = 30 表示如果套接字由本端要求关闭,这个参数决定了它保持在FIN-WAIT-2状态的时间。
net.ipv4.tcp_keepalive_time = 1200 表示当keepalive起用的时候,TCP发送keepalive消息的频度。缺省是2小时,改为20分钟。
net.ipv4.ip_local_port_range = 1024 65000 表示用于向外连接的端口范围。缺省情况下很小:32768到61000,改为1024到65000。
net.ipv4.tcp_max_syn_backlog = 8192 表示SYN队列的长度,默认为1024,加大队列长度为8192,可以容纳更多等待连接的网络连接数。
net.ipv4.tcp_max_tw_buckets = 5000 表示系统同时保持TIME_WAIT套接字的最大数量,如果超过这个数字,TIME_WAIT套接字将立刻被清除并打印警告信息。默认为180000,改为5000。对于Apache、nginx服务器,上几行的参数可以很好地减少TIME_WAIT套接字数量,但是对于Squid,效果却不大。此项参数可以控制TIME_WAIT套接字的最大数量,避免Squid服务器被大量的TIME_WAIT套接字拖死。

b、修改hosts文件,添加上squid配置文件中需要缓存域名ip。减少DNS查询时间。
 

复制代码 代码示例:
[root@jbxue var]# tail -1 /etc/hosts
192.168.6.158 www.aa.com.cn www.aa.com

注:一行中单个IP后面可以跟9个主机名,空格隔开。大于9个请另起一行描述。否则后面的主机将不被解析。

c、请将以下两行加入到squid启动文件,或者是先运行以下两条命令在启动squid
 

复制代码 代码示例:
[root@jbxue ~]# echo "65535" > /proc/sys/fs/file-max
[root@jbxue ~]# ulimit -HSn 65535

说明:
max-file表示系统级别的能够打开的文件句柄的数量。
ulimit -n控制进程级别能够打开的文件句柄的数量。
这样squid程序才能获得65536的文件描述符
俺一般使用命令来启动squid服务。
默认启动的服务中squid为关闭状态。于是直接写到rc.local文件。
如下:
 

复制代码 代码示例:
[root@jbxue ~]# tail -3 /etc/rc.d/rc.local
echo "65535" > /proc/sys/fs/file-max
ulimit -HSn 65535
squid -s

您可能感兴趣的文章:
linux下Squid反向代理搭建CDN缓存服务器的方法详解
squid3反向代理加速配置的例子
squid2.7 通过域名反向代理多个服务器的配置方法
squid2.6反向代理实验模型
squid反向代理服务器加速web