12月 19th, 2006Squid反向代理加速WEB
简介:
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
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
#服务器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.
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.
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
acl Safe_ports port 80
http_access deny !Safe_ports
http_access allow all
http_reply_access allow all
重启Squid即可
12月 21st, 2006 at 7:04 pm
反向代理对于一台服务器作用不大,而且局限于静态页面,或者不常跟新的动态页面(经过rewrite),
跟生成静态页面差不多吧~~~,主要是两台服务器以上作用比较好的~~~~
12月 21st, 2006 at 9:12 pm
是的,单台效果不明显,Squid反向代理需要大内存,多服务器,静态页面效果才好,比如,Sina,Sohu这类大型站点
03月 6th, 2008 at 1:30 pm
看了老兄的文章,觉得有配置上有少许问题。iptables是防火墙软件,一定要它做路由,不是可以,但是在高并发下尤其是squid在一个服务器是不合理的。比如:(防火墙iptables设置自动转发80到监听端口3128) 这个没有必要,这个是加重负担的东西。squid就只做7层要做的事情不要做过多的操作,比如入端地址过滤,这个不是squid的强项,只要你在iptables上做FORWORD链表上的过滤就可以满足,至于单IP并发限制,也可以在iptables的connlimit上完成。网络服务器真正高并发优化,在于将合适的部分放在它最擅长的位置。
04月 16th, 2008 at 11:20 pm
单台作用很大,会有明显的加速
06月 5th, 2009 at 10:09 am
Hi, cool post. I have been wondering about this topic,so thanks for writing.