存档

文章标签 ‘Squid’

最简squid配置教程

2010年1月5日 baalchina 没有评论

for 刘老大。:lol

首先ssh上去,

vi /etc/hosts

添加你要解析的地址,比如

1.1.1.1 hosts.example.com

其中

  1. 1.1.1.1是真实Web服务器的IP地址
  2. hosts.example是服务器的域名

接下来编辑

vi /usr/local/squid/etc/squid.conf

对应添加这两行:

cache_peer_domain example hosts.example.com

cache_peer hosts.example.com parent 80 0 originserver no-query name=example 

注意颜色对应。

然后重新配置squid即可。

/usr/local/squid/sbin/squid -k reconfigure

测试通过就ok了。

分类: Linux, Squid, 服务器管理 标签:

Squid的设置(Part II,Troubleshooting,200100128)

2009年8月8日 baalchina 没有评论

WARNING: transparent proxying not supported

2009/08/03 08:22:07| WARNING: transparent proxying not supported

不支持透明代理.

Aug  7 11:20:29 cache squid[21884]:     Failed to verify one of the swap directories, Check cache.log   for details.  Run 'squid -z' to create swap directories  if needed, or if running Squid for the first time.
Aug  7 11:20:29 cache squid[21882]: Squid Parent: child process 21884 exited with status 1
[root@cache ~]# /usr/local/squid/sbin/squid -z

第一次运行的时候需要建立CACHE目录.通过-z参数实现.

启动报错,Cannot open HTTP Port

Dec 31 01:04:46 cache squid[12484]: Squid Parent: child process 12489 started
Dec 31 01:04:46 cache (squid): Cannot open HTTP Port
Dec 31 01:04:46 cache squid[12484]: Squid Parent: child process 12489 exited with status 1

非root用户不能启动大于1024的端口,用root启动。另外selinux也会阻挡。关掉,重启。

 

 

WARNING cache_mem is larger than total disk cache space!

[root@cache squid-3.1.0.13]# /usr/local/squid/sbin/squid -k parse
2009/08/08 15:20:17| Processing Configuration File: /usr/local/squid/etc/squid.conf (depth 0)
2009/08/08 15:20:17| Starting Authentication on port [::]:80
2009/08/08 15:20:17| Disabling Authentication on port [::]:80 (interception enabled)
2009/08/08 15:20:17| Disabling IPv6 on port [::]:80 (interception enabled)
2009/08/08 15:20:17| WARNING cache_mem is larger than total disk cache space!

 

cache_men不能超过cache_dir中的一个数值,比如我的cache_dir是

cache_dir ufs /data/squid_log 100 16 256

cache_men被注释掉了,于是报错。

修改为

cache_men 96 MB,OK。

参考:http://bbs.chinaunix.net/archiver/?tid-114374.html

 

ACL的问题

默认Squid(3.1)不支持反向代理访问的(但是RFC1918的地址可以),是通过squid.conf中的ACL来实现的。

具体现象就是你在172地址访问没问题,但是公网访问就提示Access Denied。

日志显示:

1249718043.103      0 218.94.50.92 TCP_DENIED/403 3750 GET http://english.nau.edu.cn/ - NONE/- text/html

这时候只需要将squid.conf中默认的

http_access deny all修改为

http_access allow all就可以了。一个很简单的ACL。

 

重启的时候提示squid: No running copy

使用squid -k reconfigure重启的时候老是提示

[root@cache ~]# /usr/local/squid/sbin/squid -k shutdown
squid: No running copy

 

解决办法:squid将pid记录在一个文件里面,如果不存在(默认好像不会自己建立),那么就找不到了,虽然这时候squid是在运行的。只要指定一个pid文件就行了。

[root@cache ~]#touch /usr/local/squid/var/squid.pid

再到squid.conf里面加入:

pid_filename /usr/local/squid/var/squid.pid

就搞定了。

 

2010/01/25 18:09:09| client_side.cc(2949) okToAccept: WARNING! Your cache is running out of filedescriptors

访问squid发现非常非常之慢,然后找cache.log,发现如上提示。

google了一下,发现是因为打开的文件数超过了linux的限制造成的,修改即可。

# ulimit -HSn 65536

修改Linux为65536,并加入到/etc/profile中。

然后重新编译Squid,加入

--with-filedescriptors=65536

参数即可。

参考:

  1. http://blog.verycd.com/dash/cmd=showentry&eid=10840
  2. http://linux.chinaunix.net/bbs/viewthread.php?tid=1028215

不停的自动关闭

squid不断地自动关闭,然后发现/var/log/message里面有这个

Jan 28 12:20:16 cache-lab squid[6725]: Squid Parent: child process 6741 exited due to signal 25 with status 0
Jan 28 12:20:19 cache-lab squid[6725]: Squid Parent: child process 6744 started
Jan 28 12:20:26 cache-lab squid[6725]: Squid Parent: child process 6744 exited due to signal 25 with status 0
Jan 28 12:20:26 cache-lab squid[6725]: Exiting due to repeated, frequent failures

singal 25,貌似是因为日志文件太大了。看了一下日志:

[root@cache-lab ~]# ll /data/logs/squid/
total 3757392
-rw-r----- 1 nobody nobody 1661531737 Jan 28 15:56 access.log
-rw-r----- 1 nobody nobody   34775796 Jan 28 15:56 cache.log
-rw-r----- 1 nobody nobody 2147483647 Jan 27 04:12 store.log

看到那个著名的2147483647了...


暂时把store.log写到/dev/null试试看。

分类: Linux, Squid 标签: ,

Squid反向代理的实现(Part I, Installing and configuration)

2009年8月3日 baalchina 没有评论

目的

  1. 很多服务器需要公网加速,但是公网IP有限。
  2. 实现对外提供IPv6服务,但是不是每台服务器都可以直接接入到IPv6网络中(能否通过Squid实现?)
  3. 最新的3.1版本和以前的差别很大!很多文档还是基于2.6之前版本的。务必注意

Squid下载地址:
http://mirror.aarnet.edu.au/pub/squid/squid/

安装

很简单。

#./configure --prefix=/usr/local/squid

#make

#make install

配置

首先要给日志文件夹写权限

#chmod +777 –R /usr/local/squid/logs

前面说过3.1版本区别很大…比如反向代理的,网上常见文档是这么说的

http://www.linux.gov.cn/netweb/squid.htm#reverseconf

httpd_accel_host virtual
httpd_accel_port 80
httpd_accel_single_host off
httpd_accel_uses_host_header on

然后加上dns解析就行了。但是3.1里面,检测直接报错。实际上3.1里面只需要一条就够了:

http_port 80 transparent

也就是在后面加上transparent参数。

注一下:实际上一开始我理解错了。transparent参数是透明代理的意思,用于正向代理。直接打开虽然可以实现反向代理的功能,但是实际上任何一个用户、网站都可以通过我的cache服务器进行代理访问了(比如通过我的代理服务器访问edu.cn网站)。

正确的反向代理的做法是通过cache_peer这个参数实现的:

http_port 80 accel vhost

cache_peer xlzx.nau.edu.cn parent 80 0 originserver no-query name=xlzx
cache_peer english.nau.edu.cn parent 80 0 originserver no-query name=english

cache_peer_domain xlzx xlzx.nau.edu.cn
cache_peer_domain english english.nau.edu.cn

 

http_port监听80端口,accel代表加速模式,vhost代表传递主机名,否则虚拟主机会失效。

解释一下这里的cache_peer含义:

  1. cache_peer,监听squid的80
  2. 转向给english.nau.edu.cn的80originserver参数代表将squid本机“伪装”成原始的web服务器(causes this parent peer to be contacted as a origin server.)。但是抓包的时候没有发现区别...
  3. no-query代表不向这台server发送ICP(Squid用于集群的一个协议)请求。单台主机没必要。
  4. 另外cache_peer_domain没有的话,所有域名都会指向第一个主机,而不是根据主机头区分服务。

更多参数参照:http://www.squid-cache.org/Versions/v3/3.1/cfgman/cache_peer.html

这样才是完整的反向代理配置:服务器必须通过我的配置才能通过我的cache被加速。

启动Squid,可以通过/var/log/message或者tail -100 /usr/local/squid/var/logs/cache.log 看到日志。刚开始的时候好像好多日志文件没有建立。

注意日志,可以看到Squid从DNS解析到了域名

常用命令

#/usr/local/squid/sbin/squid –k parse

检测squid.conf是否正确。

# /usr/local/squid/sbin/squid

启动Squid

# squid -k shutdown

不用说了吧

# squid -k reconfigure

这个有点类似于#clear bgp * soft in。哈。

 

贴一下我的squid.conf的配置

#Cache peer setting

cache_peer xlzx.nau.edu.cn parent 80 0 originserver no-query name=xlzx
cache_peer english.nau.edu.cn parent 80 0 originserver no-query name=english

cache_peer_domain xlzx xlzx.nau.edu.cn
cache_peer_domain english english.nau.edu.cn

#Main Configuration

http_port 80 accel vhost

cache_mgr baalchina

cache_mem 96 MB
cache_dir ufs /data/squidcache 100 16 256

access_log /data/logs/squid/access.log squid
cache_log /data/logs/squid/cache.log
cache_store_log /data/logs/squid/store.log

visible_hostname cache.nau.edu.cn

pid_filename /usr/local/squid/var/squid.pid

分类: Linux, Squid 标签: ,

Squid反向代理的实现-DNS部分(Part 0,DNS Config)

2009年8月2日 baalchina 没有评论

由于我们采用了Bind的多View设置,加上Squid的设置,所以稍微有点复杂。

 

针对www.nau.edu.cn,假设Cernet IP是1.1.1.1,ChinanetIP是1.1.1.2。

Squid的域名cache.nau.edu.cn,CernetIp是2.2.2.1,ChinanetIP是2.2.2.2

 

对于DNS的chinanet部分,将www.nau.edu.cn解析到cache.nau.edu.cn的CNAME上

Cernet部分,同样解析到cache.nau.edu.cn的CNAME上。

 

这时候我们遇到一个问题,就是用户访问www.nau.edu.cn,得到Ip地址2.2.2.1,然后找到了Squid,Squid去找www.nau.edu.cn,去解析DNS,发现IP是自己,这时候就会产生一个死循环了。

解决办法就是编辑squid的hosts文件:

vi /etc/hosts

加入如下:

www.nau.edu.cn 1.1.1.1

 

让Squid认为www.nau.edu.cn的地址是1.1.1.1,而不是从dns去获取到自己的地址。

 

有点乱,将就着看吧…

分类: Linux, Squid 标签: ,