1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
|
#################################
### acl和http_pass访问控制 ###
#################################
acl manager proto cache_object
acl localhost src 127.0.0.1
/32
::1
acl to_localhost dst 127.0.0.0
/8
0.0.0.0
/32
::1
# 以下定义了局域网地址localnet(需要了解一些网络里面的私有地址概念)
acl localnet src 10.0.0.0
/8
acl localnet src 172.16.0.0
/12
acl localnet src 192.168.0.0
/16
acl localnet src fc00::
/7
acl localnet src fe80::
/10
# 定义SSL_ports为443
acl SSL_ports port 443
# 定义了Safe_ports所代表的端口
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
# 定义CONNECT代表http里的CONNECT请求方法
acl CONNECT method CONNECT
# 允许本机管理缓存
http_access allow manager localhost
# 拒绝其他地址管理缓存
http_access deny manager
# 拒绝不安全端口请求
http_access deny !Safe_ports
# 不允许连接非安全SSL_ports端口
http_access deny CONNECT !SSL_ports
# 拒绝连接到本地服务器提供的服务
# (用于保护本机一些只有本机用户才能访问的服务)
# http_access deny to_localhost
# 允许局域网用户的请求
http_access allow localnet
# 允许本机用户的请求
http_access allow localhost
# 拒绝其他所有请求
http_access deny all
#################################
### squid 服务器基本配置 ###
#################################
# Squid的监听端口
http_port 3128
#################################
### squid 缓存配置 ###
#################################
# 出现cgi-bin或者?的URL不予缓存
hierarchy_stoplist cgi-bin ?
# 磁盘缓存目录
#cache_dir ufs /var/spool/squid 100 16 256
# squid挂掉后,临终遗言要放到哪里
coredump_dir
/var/spool/squid
# 刷新缓存规则
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
|
明显看出,我把配置文件分成了三部分:
acl结合http_access实现访问控制
acl控制格式:
acl 列表名称 列表类型 列表值1 列表值2 ...
列表名称:自己定义的,用于下面进行权限控制(allow/deny)。
列表类型:
http_access deny/allow acl列表名称
这里需要注意的是:http_access按照定义的顺序来过滤请求的,只要前面被allow/deny了下面就不再判断了。
举个例子:
acl manager proto cache_object
http_access allow manager localhost
http_access deny manager
第一句指明manager为缓存管理,后面限定只能本机进行缓存管理。
http_port 3128
设置squid监听端口,可以自己更换,客户端链接的时候需要指定这个端口。
cache_dir ufs /var/spool/squid 100 16 256
这里设置磁盘缓存的目录以及空间大小,目录结构等,格式为:
coredump_dir /var/spool/squid
squid挂掉后,临终遗言要放到哪里,一般也不需要处理
hierarchy_stoplist
后跟着字符串列表,请求的URL里面包含字符串列表里的任何一个字符就不予缓存。
上述语句表示:任何包含?或cgi-bin字符串的请求的URL不予缓存直接把最终服务器结果返回给用户。
refresh_pattern
使用正则表达式来确定资源过期时间。
refresh_pattern <最小时间> <百分比> <最大时间>
如何判断过期?
如下是squid的refresh_pattern算法的简单描述:
假如响应年龄超过refresh_pattern的max值,该响应过期;
假如LM-factor少于refresh_pattern百分比值,该响应存活;
假如响应年龄少于refresh_pattern的min值,该响应存活;
其他情况下,响应过期。
LM-factor算法:
resource age =对象进入cache的时间-对象的last_modified
response age =当前时间-对象进入cache的时间
LM-factor=(response age)/(resource age)
这里多介绍点额外选项:
设定DNS服务器
日志记录
默认都在/var/log/squid目录下,默认安装时候就配置好了日志轮转,查看/etc/logrotate.d/squid 如果自己更改日志存放位置,最好重新配置自动轮转,关于logrotate参看:logrotate使用:
启动squid PID 的用户和群组,默认都为squid
内存缓冲大小:设定额外提供多少内存给squid使用。
cache_mem 20M
总内存占用计算方法
squid自身进程占用(10~20M)+ Cache目录放在内存的索引(500M目录大约20M索引)+cache_mem
官方建议可用内存大小要是这里计算量的两倍以上。因此这里的cache_mem不能设置太大。当然内存充足的话,越大越好。
Cache目录放在内存的索引(500M目录大约20M索引)这里其实是估算,没法准确计算,一般64位系统中,每个缓存索引占用112字节内存。这样如果一个缓存文件大小在1K到20K之间则,大概内存花费为:50M~3M之间。其实通过查看/var/spool/squid 目录下的缓存文件大小你可以发现基本都是几K的偏多。所以取20M还是比较合理的。
密码登录
一般我们使用代理都是有密码的,不然谁都可以用,服务器还不得挂掉,怎么在squid中是用密码验证呢?
先设定验证相关的验证参数:
# 密码存储路径,设定通过ncsa_auth程序来读取
# 设定通过验证时,呈现给用户的欢迎信息,可以不写
# 验证一次,可以持续访问多长时间
auth_param basic credentialsttl 12 hours
auth_param basic casesensitive off
# 设定acl密码用户
# 允许密码用户登录
生成用户名密码文件,这里使用william作为用户名,test1234作为密码,见下图:
这里密码最好放在/etc/squid/目录下,不然很容易有权限问题,导致squid启动失败。
注:这里的htpasswd命令是apache服务器自带的。你执行下面的名利安装apache:
1
|
yum
install
httpd
|
推荐配置文件:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
|
#################################
### acl和http_pass访问控制 ###
#################################
# 密码存储路径,设定通过ncsa_auth程序来读取
auth_param basic program
/usr/lib64/squid/ncsa_auth
/etc/squid/htpasswd
# 制定认证程序的进程数
auth_param basic children 5
# 设定通过验证时,呈现给用户的欢迎信息
auth_param basic realm
"Welcome to proxy web server"
# 验证一次,可以持续访问多长时间
auth_param basic credentialsttl 12 hours
acl manager proto cache_object
acl localhost src 127.0.0.1
/32
::1
acl to_localhost dst 127.0.0.0
/8
0.0.0.0
/32
::1
# 定义SSL_ports为443
acl SSL_ports port 443
# 定义了Safe_ports所代表的端口
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
# 定义CONNECT代表http里的CONNECT请求方法
acl CONNECT method CONNECT
# 允许本机管理缓存
http_access allow manager localhost
# 拒绝其他地址管理缓存
http_access deny manager
# 拒绝不安全端口请求
http_access deny !Safe_ports
# 不允许连接非安全SSL_ports端口
http_access deny CONNECT !SSL_ports
# 拒绝连接到本地服务器提供的服务
# (用于保护本机一些只有本机用户才能访问的服务)
http_access deny to_localhost
# 允许本机用户的请求
http_access allow localhost
# 拒绝其他所有请求
http_access deny all
#################################
### squid 服务器基本配置 ###
#################################
# Squid的监听端口
http_port 3128
# DNS 域名服务器配置
dns_nameservers 8.8.8.8
#################################
### squid 缓存配置 ###
#################################
# 出现cgi-bin或者?的URL不予缓存
hierarchy_stoplist cgi-bin ?
# 磁盘缓存目录
cache_dir ufs
/var/spool/squid
500 16 256
# 内存缓冲大小
cache_mem 20M
# squid挂掉后,临终遗言要放到哪里
coredump_dir
/var/spool/squid
# 刷新缓存规则
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
|
下面你可以使用如下命令来启动squid服务。
1
|
# service squid start
|
以上配置说明:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
|
#################################
### acl和http_pass访问控制 ###
#################################
acl manager proto cache_object
acl localhost src 127.0.0.1
/32
::1
acl to_localhost dst 127.0.0.0
/8
0.0.0.0
/32
::1
# 以下定义了局域网地址localnet(需要了解一些网络里面的私有地址概念)
acl localnet src 10.0.0.0
/8
acl localnet src 172.16.0.0
/12
acl localnet src 192.168.0.0
/16
acl localnet src fc00::
/7
acl localnet src fe80::
/10
# 定义SSL_ports为443
acl SSL_ports port 443
# 定义了Safe_ports所代表的端口
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
# 定义CONNECT代表http里的CONNECT请求方法
acl CONNECT method CONNECT
# 允许本机管理缓存
http_access allow manager localhost
# 拒绝其他地址管理缓存
http_access deny manager
# 拒绝不安全端口请求
http_access deny !Safe_ports
# 不允许连接非安全SSL_ports端口
http_access deny CONNECT !SSL_ports
# 拒绝连接到本地服务器提供的服务
# (用于保护本机一些只有本机用户才能访问的服务)
# http_access deny to_localhost
# 允许局域网用户的请求
http_access allow localnet
# 允许本机用户的请求
http_access allow localhost
# 拒绝其他所有请求
http_access deny all
#################################
### squid 服务器基本配置 ###
#################################
# Squid的监听端口
http_port 3128
#################################
### squid 缓存配置 ###
#################################
# 出现cgi-bin或者?的URL不予缓存
hierarchy_stoplist cgi-bin ?
# 磁盘缓存目录
#cache_dir ufs /var/spool/squid 100 16 256
# squid挂掉后,临终遗言要放到哪里
coredump_dir
/var/spool/squid
# 刷新缓存规则
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
|
明显看出,我把配置文件分成了三部分:
acl结合http_access实现访问控制
acl控制格式:
acl 列表名称 列表类型 列表值1 列表值2 ...
列表名称:自己定义的,用于下面进行权限控制(allow/deny)。
列表类型:
http_access deny/allow acl列表名称
这里需要注意的是:http_access按照定义的顺序来过滤请求的,只要前面被allow/deny了下面就不再判断了。
举个例子:
acl manager proto cache_object
http_access allow manager localhost
http_access deny manager
第一句指明manager为缓存管理,后面限定只能本机进行缓存管理。
http_port 3128
设置squid监听端口,可以自己更换,客户端链接的时候需要指定这个端口。
cache_dir ufs /var/spool/squid 100 16 256
这里设置磁盘缓存的目录以及空间大小,目录结构等,格式为:
coredump_dir /var/spool/squid
squid挂掉后,临终遗言要放到哪里,一般也不需要处理
hierarchy_stoplist
后跟着字符串列表,请求的URL里面包含字符串列表里的任何一个字符就不予缓存。
上述语句表示:任何包含?或cgi-bin字符串的请求的URL不予缓存直接把最终服务器结果返回给用户。
refresh_pattern
使用正则表达式来确定资源过期时间。
refresh_pattern <最小时间> <百分比> <最大时间>
如何判断过期?
如下是squid的refresh_pattern算法的简单描述:
假如响应年龄超过refresh_pattern的max值,该响应过期;
假如LM-factor少于refresh_pattern百分比值,该响应存活;
假如响应年龄少于refresh_pattern的min值,该响应存活;
其他情况下,响应过期。
LM-factor算法:
resource age =对象进入cache的时间-对象的last_modified
response age =当前时间-对象进入cache的时间
LM-factor=(response age)/(resource age)
这里多介绍点额外选项:
设定DNS服务器
日志记录
默认都在/var/log/squid目录下,默认安装时候就配置好了日志轮转,查看/etc/logrotate.d/squid 如果自己更改日志存放位置,最好重新配置自动轮转,关于logrotate参看:logrotate使用:
启动squid PID 的用户和群组,默认都为squid
内存缓冲大小:设定额外提供多少内存给squid使用。
cache_mem 20M
总内存占用计算方法
squid自身进程占用(10~20M)+ Cache目录放在内存的索引(500M目录大约20M索引)+cache_mem
官方建议可用内存大小要是这里计算量的两倍以上。因此这里的cache_mem不能设置太大。当然内存充足的话,越大越好。
Cache目录放在内存的索引(500M目录大约20M索引)这里其实是估算,没法准确计算,一般64位系统中,每个缓存索引占用112字节内存。这样如果一个缓存文件大小在1K到20K之间则,大概内存花费为:50M~3M之间。其实通过查看/var/spool/squid 目录下的缓存文件大小你可以发现基本都是几K的偏多。所以取20M还是比较合理的。
密码登录
一般我们使用代理都是有密码的,不然谁都可以用,服务器还不得挂掉,怎么在squid中是用密码验证呢?
先设定验证相关的验证参数:
# 密码存储路径,设定通过ncsa_auth程序来读取
# 设定通过验证时,呈现给用户的欢迎信息,可以不写
# 验证一次,可以持续访问多长时间
auth_param basic credentialsttl 12 hours
auth_param basic casesensitive off
# 设定acl密码用户
# 允许密码用户登录
生成用户名密码文件,这里使用william作为用户名,test1234作为密码,见下图:
这里密码最好放在/etc/squid/目录下,不然很容易有权限问题,导致squid启动失败。
注:这里的htpasswd命令是apache服务器自带的。你执行下面的名利安装apache:
1
|
yum
install
httpd
|
推荐配置文件:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
|
#################################
### acl和http_pass访问控制 ###
#################################
# 密码存储路径,设定通过ncsa_auth程序来读取
auth_param basic program
/usr/lib64/squid/ncsa_auth
/etc/squid/htpasswd
# 制定认证程序的进程数
auth_param basic children 5
# 设定通过验证时,呈现给用户的欢迎信息
auth_param basic realm
"Welcome to proxy web server"
# 验证一次,可以持续访问多长时间
auth_param basic credentialsttl 12 hours
acl manager proto cache_object
acl localhost src 127.0.0.1
/32
::1
acl to_localhost dst 127.0.0.0
/8
0.0.0.0
/32
::1
# 定义SSL_ports为443
acl SSL_ports port 443
# 定义了Safe_ports所代表的端口
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
# 定义CONNECT代表http里的CONNECT请求方法
acl CONNECT method CONNECT
# 允许本机管理缓存
http_access allow manager localhost
# 拒绝其他地址管理缓存
http_access deny manager
# 拒绝不安全端口请求
http_access deny !Safe_ports
# 不允许连接非安全SSL_ports端口
http_access deny CONNECT !SSL_ports
# 拒绝连接到本地服务器提供的服务
# (用于保护本机一些只有本机用户才能访问的服务)
http_access deny to_localhost
# 允许本机用户的请求
http_access allow localhost
# 拒绝其他所有请求
http_access deny all
#################################
### squid 服务器基本配置 ###
#################################
# Squid的监听端口
http_port 3128
# DNS 域名服务器配置
dns_nameservers 8.8.8.8
#################################
### squid 缓存配置 ###
#################################
# 出现cgi-bin或者?的URL不予缓存
hierarchy_stoplist cgi-bin ?
# 磁盘缓存目录
cache_dir ufs
/var/spool/squid
500 16 256
# 内存缓冲大小
cache_mem 20M
# squid挂掉后,临终遗言要放到哪里
coredump_dir
/var/spool/squid
# 刷新缓存规则
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
|
下面你可以使用如下命令来启动squid服务。
1
|
# service squid start
|
以上配置说明: