码迷,mamicode.com
首页 > 其他好文 > 详细

2015/05/25   squid

时间:2015-05-25 11:39:19      阅读:457      评论:0      收藏:0      [点我收藏+]

标签: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

2015/05/25   squid

标签:squid

原文地址:http://chenxiaojian.blog.51cto.com/9345444/1654851

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!