标签:squid
http://symphony.b3log.org/article/1381403388981 #正向、反向代理解释
一、什么是squid?
squid可以做代理也可以做缓存。
squid缓存不仅可以节省宝贵的带宽资源, 也可以大大降低服务器的I/O。
squid不仅可以做正向代理, 又可以做反向代理。
正向代理, squid后面是客户端, 客户端上网铜鼓squid去上。
反向代理, squid后面是服务器, 服务器返回给用户数据需要走squid。
正向代理用在企业的办公环境中, 客户端上网通过squid代理来上网,这样可以节省网络带宽资源。
反向代理用来搭建网站静态项(图片、html、流媒体、js、css等)的缓存服务器, 它用于网站架构中。
二、搭建squid正向代理
1. 用yum安装squid;
[root@squid ~]# yum -y install squid
2. 搭建squid正向代理;
[root@squid ~]# squid -v #查看squid版本;
[root@squid ~]# cd /etc/squid/
[root@squid squid]# cp squid.conf squid.conf.20150523
[root@squid squid]# vim squid.conf #编辑squid主配置文件
把默认的squid.conf里的内容全部删除, 添加下面的配置..
###### 添加如下 ######
http_port 3128 #squid端口号;
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
acl localnet src 10.0.0.0/8 # RFC1918 possible internal network
acl localnet src 172.16.0.0/12 # RFC1918 possible internal network
acl localnet src 192.168.0.0/16 # RFC1918 possible internal network
acl SSL_ports port 443
acl Safe_ports port 80 8080 # http
acl Safe_ports port 21 # ftp
acl Safe_ports port 443 # https
acl CONNECT method CONNECT
http_access allow manager localhost
http_access deny manager
http_access deny !Safe_ports
http_access deny CONNECT !SSL_ports
http_access allow localnet
http_access allow localhost
http_access allow all
cache_dir aufs /data/cache 1024 16 256 #缓存目录
cache_mem 128 MB
hierarchy_stoplist cgi-bin ?
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 \.(jpg|png|gif|mp3|xml) 1440 50% 2880 ignore-reload #缓存时间
refresh_pattern . 0 20% 4320
###### 结束 ######
[root@squid squid]# mkdir /data/cache #创建缓存目录
[root@squid squid]# chown -R squid /data/cache/ #更改权限
[root@squid squid]# squid -z #初始化缓存目录.
[root@squid squid]# squid -kcheck #检测配置文件是否有错
[root@squid squid]# /etc/init.d/squid start #启动squid服务
Starting squid: ....................[FAILED]
启动squid失败, 能看到squid进程, 不能看见squid的3128端口号. 解决办法如下
[root@squid ~]# vim /etc/hosts #添加本地hosts文件
192.168.15.12 squid.com
[root@squid squid]# vim squid.conf #编辑squid主配置文件
http_port 192.168.15.12:3128 #添加本机IP:3128
[root@squid squid]# /etc/init.d/squid start #启动squid服务
[root@squid ~]# netstat -anpt |grep 3128 #检查3128端口是否存在;
tcp 0 0 192.168.15.12:3128 0.0.0.0:* LISTEN 3425/(squid)
用curl验证正向代理.
[root@LAMP ~]# curl -x192.168.15.12:3128 www.90root.com -I #验证正向代理
HTTP/1.0 200 OK
Server: nginx
Date: Fri, 22 May 2015 18:07:49 GMT
Content-Type: text/html
X-Powered-By: PHP/5.4.37
X-Cache: MISS from squid.com
X-Cache-Lookup: MISS from squid.com:3128
Via: 1.0 squid.com (squid/3.1.10) #squid代理访问;
Connection: keep-alive
3. 需求: 禁止访问淘宝、京东网站;
[root@squid squid]# vim squid.conf
#####建议添加acl后面#####
acl http proto HTTP
acl bad_domain dstdomain .taobao.com .jd.com
http_access deny http bad_domain
##### 结束 #####
在没重启squid之前, 使用正常代理能够访问淘宝、京东。 只截取几条重要信息。
[root@LAMP ~]# curl -x192.168.15.12:3128 www.jd.com -I
HTTP/1.0 200 OK
Server: JDWS
X-Cache-Lookup: MISS from squid.com:3128
[root@LAMP ~]# curl -x192.168.15.12:3128 www.taobao.com -I
HTTP/1.0 200 OK
Server: Tengine
X-Cache-Lookup: MISS from squid.com:3128
[root@squid squid]# squid -kcheck #检查squid语法是否有误;
[root@squid squid]# squid -kreconfig #重新加载配置文件;
用curl验证正向代理
[root@LAMP ~]# curl -x192.168.15.12:3128 www.taobao.com -I
HTTP/1.0 403 Forbidden
Server: squid/3.1.10
X-Cache-Lookup: NONE from squid.com:3128
[root@LAMP ~]# curl -x192.168.15.12:3128 www.jd.com -I
HTTP/1.0 403 Forbidden
Server: squid/3.1.10
X-Cache-Lookup: NONE from squid.com:3128
用windows主机验证正向代理
打开IE浏览器, 点击工具---Internet选项.
用IE访问www.taobao.com和www.jd.com
三、搭建squid反向代理
1. 编辑squid主配置文件;
[root@squid squid]# vim squid.conf
###### 添加如下 ######
http_port 192.168.15.12:8081 accel vhost vport #将3128端口改为8081, 并在后面添加ccel vhost vport
cache_peer 182.254.18.159 parent 80 0 originserver name=a #代理域名的IP、端口号、a为域名的别名,可自定义。
cache_peer_domain a www.qq.com
cache_peer 112.74.113.61 parent 80 0 originserver name=b
cache_peer_domain b www.90root.com
如果是squid要代理一台web上的所有域名, 那么就写成这样: cache_pper 192.168.10.11 80 0 originserver
cache_peer_domain 都可以省掉
之前增加的域名白/黑名单相关配置去掉. 在下面2行前面添加注释;
#acl bad_domain dstdomain .taobao.com .jd.com
#http_access deny http bad_domain
###### 结束 ######
[root@squid squid]# squid -kcheck
[root@squid squid]# squid -kreconfig
用curl验证反向代理.
[root@LAMP ~]# curl -x192.168.15.12:8081 www.qq.com -I
HTTP/1.0 200 OK
Server: squid/3.4.1
X-Cache-Lookup: MISS from squid.com:8081
[root@LAMP ~]# curl -x192.168.15.12:8081 www.90root.com -I
HTTP/1.0 200 OK
Server: nginx
X-Cache-Lookup: MISS from squid.com:8081
[root@LAMP ~]# curl -x192.168.15.12:8081 www.taobao.com -I
HTTP/1.0 503 Service Unavailable
Server: squid/3.1.10
X-Cache-Lookup: MISS from squid.com:8081
当访问qq和90root域名时, 能访问.. 访问其它域名时出现503. 这样反向代理验证成功。
四、搭建透明代理
透明代理的意思是客户端根本不需要知道有代理服务器的存在, 它改变你的request fields(报文), 并会传送真实IP, 多用于路由器的NAT转发中.
透明代理的原理是这样的:
①. 假设A为内部网络客户机
②. B为外部网络服务器, B提供的服务为httpd服务, 监听端口为80
③. C为代理服务器(也就是我们的网关), 架设代理服务器提供服务端口为3128
过程: 当A向B的80端口请求数据时,TCP连接请求要先经过C,C看到A请求的是B的80端口时,C由于已经设置了转发规则,所以C会把A的请求80端口转发到自己的3128端口,也就是说A将要直接访问C的3128端口,而非B服务器的80端口,此时,C会先去访问B的80端口,把A要访问B的请求数据先请求过来,保存到C上,然后C再把请求数据吐给A。而在A看来,它貌似是直接请求的B,而实际并非如此。由于这些连接过程是自动的,不需要客户端手工配置代理服务器,甚至用户根本不知道代理服务器的存在,因而对用户来说是透明的。
需求: 透明代理服务器的eth0网卡地址为10.2.1.100(可以上公网的IP), eth1网卡地址为192.168.1.10, 那么要通过透明代理上网的局域网段应该为192.168.1.0/24, 并且在该局域的客户机应该设置的网关地址为192.168.1.10
通过上面的原理分析,可知,只有您的代理服务器为网关时,才可以实现透明代理的功能,否则无效。实际应用中,透明代理服务器应该有至少两个网卡,第一个网卡连接到外网,或者它可以直接上网,第二个网卡连接的是内部的一个局域网段,也就是想使用代理上网的网段。
1. 编辑squid主配置文件
[root@squid ~]# cd /etc/squid/
[root@squid squid]# cp squid.conf squid.conf.20150524
[root@squid squid]# vim squid.conf
把默认的squid.conf里的内容全部删除, 添加下面的配置..
###### 添加如下 ######
http_port 3128 transparent
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
acl localnet src 10.0.0.0/8 # RFC1918 possible internal network
acl localnet src 172.16.0.0/12 # RFC1918 possible internal network
acl localnet src 192.168.0.0/16 # RFC1918 possible internal network
acl SSL_ports port 443
acl Safe_ports port 80 8080 # http
acl Safe_ports port 21 # ftp
acl Safe_ports port 443 # https
acl CONNECT method CONNECT
http_access allow all
http_access deny manager
http_access deny !Safe_ports
http_access deny CONNECT !SSL_ports
http_access allow localnet
http_access allow localhost
http_access deny all
cache_dir aufs /data/cache 1024 16 256
cache_mem 128 MB
hierarchy_stoplist cgi-bin ?
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 \.(jpg|png|gif|mp3|xml) 1440 50% 2880 ignore-reload
refresh_pattern . 0 20% 4320
###### 结束 ######
2. 创建缓存目录, 并修改权限.
[root@squid squid]# mkdir /data/cache/
[root@squid squid]# chown -R squid:squid /data/cache/
3. 初始化缓存目录
[root@squid squid]# squid -z
4. 打开端口转发
[root@squid squid]# echo "1" > /proc/sys/net/ipv4/ip_forward
5. 设置防火墙规则
[root@squid squid]# iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
[root@squid squid]# iptables -t nat -A PREROUTING -p tcp -s 192.168.1.0/24 --dport 80 -j REDIRECT --to-ports 3128
6. 客户机验证
本文出自 “陈小贱。” 博客,请务必保留此出处http://chenxiaojian.blog.51cto.com/9345444/1654851
标签:squid
原文地址:http://chenxiaojian.blog.51cto.com/9345444/1654851