简介:
Linux 下著名代理软件Squid, 通常被用作上网代理,比如代理内网的Web服务,起到加速浏览的作用,一般可以设为透明代理.
透明代理设置主要有:
ACL设置

acl all src 0.0.0.0/0
acl local_net dst 192.168.0.0/24
http_access local_net allow
http_access deny all

防火墙iptables设置自动转发80到监听端口3128

iptables -A PREROUTING -i eth0 -p tcp -m tcp --dport 80 -j REDIRECT --to-ports 3128

而反向代理是Squid又一大优秀功能,像Sina,Sohu,163 这种访问量大的网站,都是用到了Squid进行加速访问.
反向代理主要设置有(其中防盗链代码转自CHINAUNIX论坛)

#squid.conf
#服务器IP 192.168.1.1
#监听服务器的80端口,透明代理,支持域名和IP的虚拟主机
#2.6设置:(如不进行WEB代理可去掉transparent)
http_port 192.168.1.1:80 transparent vhost vport
#2.5设置
#http_port 192.168.1.1:80

#限制同一IP客户端的最大连接数
acl OverConnLimit maxconn 16
http_access deny OverConnLimit

#防止天涯盗链,转嫁给百度
acl tianya referer_regex -i tianya
http_access deny tianya
deny_info http://www.baidu.com/logs.gif tianya

#防止被人利用为HTTP代理,设置允许访问的IP地址
acl myip dst 192.168.1.1
http_access deny !myip

#防止百度机器人爬死服务器
acl AntiBaidu req_header User-Agent Baiduspider
http_access deny AntiBaidu

#允许本地管理
acl Manager proto cache_object
acl Localhost src 127.0.0.1 192.168.1.1
http_access allow Manager Localhost
http_access deny Manager

#仅仅允许80端口的代理
acl Safe_ports port 80 # http
http_access deny !Safe_ports
http_access allow all

#Squid信息设置
visible_hostname web
cache_mgr webmaster@web.com

#基本设置
cache_effective_user squid
cache_effective_group squid
tcp_recv_bufsize 65535 bytes

#2.5的反向代理加速配置
#httpd_accel_host 127.0.0.1
#httpd_accel_port 80
#httpd_accel_single_host on
#httpd_accel_uses_host_header on
#httpd_accel_with_proxy off   //如要既作反向加速又要WEB代理则ON
#2.6的反向代理加速配置
#代理到本机的80端口的服务,仅仅做为原始内容服务器
cache_peer 127.0.0.1 parent 80 0 no-query originserver

#错误文档
error_directory /usr/local/squid/share/errors/Simplify_Chinese

#单台使用,不使用该功能
icp_port 0

我在使用中所遇到的问题有
1.设置好后无法启动Squid:
查错误日志为:

commBind: Cannot bind socket FD 11 to 192.168.2.1:80: (13) Permission
denied
FATAL: Cannot open HTTP Port
Squid Cache (Version 2.5.STABLE6): Terminated abnormally.

似乎是显示无权限使用这个80端口

经查,这是由于开启了SELINUX的缘故,即使是root也不能任意绑定80端口,应该有办法通过修改SELINUX策略来允许开启的,但是此策略设置比较复杂,现在还不会设置,所以我采用了折中的办法,先暂时关闭SELINUX,绑定80端口后再启用SELINUX,待以后学会改策略再加~
关闭SELINUX:setenforce 0
getenforce ,显示permissive
开启SELINUX:setenforce 1
getenforce ,显示Enforcing

启用顺序:Apache->Squid->SELINUX
2.启动Squid和Apache后
显示出错:

ERROR
The requested URL could not be retrieved

--------------------------------------------------------------------------------

While trying to retrieve the URL: http://XXX

The following error was encountered:

Access Denied.
Access control configuration prevents your request from being allowed at this time. Please contact your service provider if you feel this is incorrect.

经查,为 ACL设置不当
去掉多余的ACL设置,设置:

acl all src 0.0.0.0/0.0.0.0
acl Safe_ports port 80
http_access deny !Safe_ports
http_access allow all
http_reply_access allow all

重启Squid即可