centos5.5+NAT+Squid透明代理总结

本文涉及的产品
公网NAT网关,每月750个小时 15CU
云解析 DNS,旗舰版 1个月
全局流量管理 GTM,标准版 1个月
简介:

1.安装squid软件包这里用yum来安装。
[root@zh888 ~]# yum -y install squid
Loaded plugins: fastestmirror
Loading mirror speeds from cached hostfile
addons                                                   |  951 B     00:00     
base                                                     | 1.1 kB     00:00     
extras                                                   | 2.1 kB     00:00     
updates                                                  | 1.9 kB     00:00     
Setting up Install Process
Resolving Dependencies
--> Running transaction check
---> Package squid.i386 7:2.6.STABLE21-6.el5 set to be updated
--> Processing Dependency: perl(URI::URL) for package: squid
--> Running transaction check
---> Package perl-URI.noarch 0:1.35-3 set to be updated
--> Finished Dependency Resolution

Dependencies Resolved

================================================================================
 Package         Arch          Version                        Repository   Size
================================================================================
Installing:
 squid           i386          7:2.6.STABLE21-6.el5           base        1.3 M
Installing for dependencies:
 perl-URI        noarch        1.35-3                         base        116 k

Transaction Summary
================================================================================
Install       2 Package(s)
Upgrade       0 Package(s)

Total download size: 1.4 M
Downloading Packages:
(1/2): perl-URI-1.35-3.noarch.rpm                        | 116 kB     00:01     
(2/2): squid-2.6.STABLE21-6.el5.i386.rpm                 | 1.3 MB     00:03     
--------------------------------------------------------------------------------
Total                                           239 kB/s | 1.4 MB     00:05     
Running rpm_check_debug
Running Transaction Test
Finished Transaction Test
Transaction Test Succeeded
Running Transaction
  Installing     : perl-URI                                                 1/2 
  Installing     : squid                                                    2/2

Installed:
  squid.i386 7:2.6.STABLE21-6.el5                                              

Dependency Installed:
  perl-URI.noarch 0:1.35-3                                                     

Complete!

 

2.[root@zh888 ~]# /etc/rc.d/init.d/squid start//启动squid服务
init_cache_dir /var/spool/squid... Starting squid: .       [  OK  ]

[root@zh888 ~]# chkconfig --list squid
squid           0:off   1:off   2:off   3:off   4:off   5:off   6:off

[root@zh888 ~]# chkconfig squid on//让系统开机runlevel 234级别启动

[root@zh888 ~]# chkconfig --list squid
squid           0:off   1:off   2:on    3:on    4:on    5:on    6:off

[root@zh888 ~]# /etc/rc.d/init.d/squid status//查看squid的状态
squid (pid  1646) is running...

3.[root@zh888 ~]# cd /etc/squid/
  [root@zh888 ~]# wc squid.conf
  [root@zh888 ~]# diff squid.conf.default squid.conf
  [root@zh888 ~]#sed -e '/\(^#\|^$\)/d' squid.conf.default > squid.conf

4.贴上自己2.6版本squid的/etc/squid/squid.conf文件

http_port 192.168.100.1:3128 transparent// 指定Squid监听浏览器客户请求的端口号3128
cache_mem 200 MB //配置内存缓存数
cache_swap_high  85//最多允许使用swap 85% ipcache_size 2048  
cache_swap_low  70 // 最小允许ipcache使用swap 70%
cache_log /dev/null //定义日志存放记录
cache_store_log /dev/null //store日志 
emulate_httpd_log on //使用HTTPD登录格式
pid_filename /var/run/squid.pid //pid文件
useragent_log /var/log/squid/useragent.log //用户代理登录文件
ident_timeout 1 seconds //RFC931 身份查找超时:1秒 ident_timeout 1 seconds


cache_dir ufs  /home/samba/software/squid 30000 16 256 //高速缓存目录:/home/samba/software/squid 默认目录是/var/spool/squid类型:ufs大小:30000 一级目录:16 二级目录:256

dns_nameservers 202.101.172.35 //dns域名这个为浙江电信
cache_effective_user squid //以unix用户身份运行
cache_effective_group squid //以unix用户身份运行
cache_mgr enjoygoodboy@163.com//高速缓存管理邮件地址
visible_hostname zh888.com//可见主机名

acl all src 0.0.0.0/0.0.0.0 #允许所有IP访问
acl manager proto cache_object #manager 
acl localhost src 127.0.0.1/255.255.255.255#允午本机IP
acl to_localhost dst 127.0.0.0/8#允许目的地址为本机IP
acl SSL_ports port 443
acl Safe_ports port 80          # http
acl Safe_ports port 21          # ftp
acl Safe_ports port 443         # https
acl Safe_ports port 70          # gopher
acl Safe_ports port 210         # wais
acl Safe_ports port 1025-65535  # unregistered ports
acl Safe_ports port 280         # http-mgmt
acl Safe_ports port 488         # gss-http
acl Safe_ports port 591         # filemaker
acl Safe_ports port 777         # multiling http
acl CONNECT method CONNECT#请求方法以CONNECT
http_access allow all#允许所有人使用该代理.因为这里是代理加速web服务器

hierarchy_stoplist cgi-bin ?
access_log /var/log/squid/access.log squid
acl QUERY urlpath_regex cgi-bin \?
cache deny QUERY
refresh_pattern ^ftp:           1440    20%     10080
refresh_pattern ^gopher:        1440    0%      1440
refresh_pattern .               0       20%     4320
acl apache rep_header Server ^Apache
broken_vary_encoding allow apache
coredump_dir /var/spool/squid
重要提示
由于squid的访问控制规则是从上到下寻找匹配,如果匹配到规则,则停止往下匹配.
所以如果要做访问控制,allow和deny的顺序是很有讲究的.
此外,squid.conf默认的4000多行配置不是白给的,真的很有用.有兴趣深入研究squid的哥们
建议花时间看一下.

5.squid常用命令:
/usr/local/squid/sbin/squid -z 初始化缓存空间
/usr/local/squid/sbin/squid 启动
/usr/local/squid/sbin/squid -k shutdown 停止
/usr/local/squid/sbin/squid -k reconfigure 重新载入配置文件
/usr/local/squid/sbin/squid -k rotate 轮循日志

6.启动nat地址转换启动80到3128转换 eth1为lan地址,eth0为wan地址,具体情况可以自行修改。

echo "iptables -t nat -A POSTROUTING -s 192.168.100.0/24 -o eth0 -j SNAT --to-source 192.168.20.xx" >>/etc/rc.local
echo "iptables -t nat -A PREROUTING -i eth1 -p tcp -s 192.168.100.0/24 --dport 80 -j REDIRECT --to-ports 3128" >>/etc/rc.local
 echo "echo 1 >/proc/sys/net/ipv4/ip_forward">>/etc/rc.local

7.最后客户端xp的ip地址设置ip 192.168.100.12 网络掩码 255.255.255.0

网关为192.168.100.1为代理服务器的lan的ip地址,dns为202.101.172.35也可以是192.168.100.1因为这个我是做bind的所以可以设置为192.168.100.1如果没做过域名解析那就添加8.8.8.8即可。

8. 疑惑的问题

1.cat /var/log/squid/access.log 
73 192.168.100.12 TCP_MISS/304 298 GET h - DIRECT/118.144.78.59 总是tcp_miss但是客户端访问没问题。

[root@zh888 squid]# cat /var/log/squid/access.log|gawk '{print $4}'|sort|uniq -c|sort -nr
     40 TCP_MISS/200
     27 TCP_MISS/304
     10 TCP_IMS_HIT/304
      6 TCP_MISS/301
      1 TCP_NEGATIVE_HIT/404
      1 TCP_MISS/204
      1 TCP_MEM_HIT/200
      1

2./etc/squid/squid.conf//

http_access allow manager localhost
http_access deny manager
http_access deny !Safe_ports
http_access deny CONNECT !SSL_ports
icp_access allow all
http_access allow all
这四句话到底要不加入,但是加入是可以的。

http_access有访问的顺序的,因为默认是全部deny。不过用普通代理也是可以的如图所示:

 

 9.最后介绍一下/var/log/squid/access.log 
相应于HTTP请求,下列标签可能出现在access.log文件的第四个域。

TCP_HIT

Squid发现请求资源的貌似新鲜的拷贝,并将其立即发送到客户端。

TCP_MISS

Squid没有请求资源的cache拷贝。

TCP_REFERSH_HIT

Squid发现请求资源的貌似陈旧的拷贝,并发送确认请求到原始服务器。原始服务器返回304(未修改)响应,指示squid的拷贝仍旧是新鲜的。

TCP_REF_FAIL_HIT

Squid发现请求资源的貌似陈旧的拷贝,并发送确认请求到原始服务器。然而,原始服务器响应失败,或者返回的响应Squid不能理解。在此情形下,squid发送现有cache拷贝(很可能是陈旧的)到客户端。

TCP_REFRESH_MISS

Squid发现请求资源的貌似陈旧的拷贝,并发送确认请求到原始服务器。原始服务器响应新的内容,指示这个cache拷贝确实是陈旧的。

TCP_CLIENT_REFRESH_MISS

Squid发现了请求资源的拷贝,但客户端的请求包含了Cache-Control: no-cache指令。Squid转发客户端的请求到原始服务器,强迫cache确认。

TCP_IMS_HIT

客户端发送确认请求,Squid发现更近来的、貌似新鲜的请求资源的拷贝。Squid发送更新的内容到客户端,而不联系原始服务器。

TCP_SWAPFAIL_MISS

Squid发现请求资源的有效拷贝,但从磁盘装载它失败。这时squid发送请求到原始服务器,就如同这是个cache丢失一样。

TCP_NEGATIVE_HIT

在对原始服务器的请求导致HTTP错误时,Squid也会cache这个响应。在短时间内对这些资源的重复请求,导致了否命中。 negative_ttl指令控制这些错误被cache的时间数量。请注意这些错误只在内存cache,不会写往磁盘。下列HTTP状态码可能导致否定 cache(也遵循于其他约束): 204, 305, 400, 403, 404, 405, 414, 500, 501, 502, 503, 504。

TCP_MEM_HIT

Squid在内存cache里发现请求资源的有效拷贝,并将其立即发送到客户端。注意这点并非精确的呈现了所有从内存服务的响应。例如,某些cache在内存里,但要求确认的响应,会以TCP_REFRESH_HIT, TCP_REFRESH_MISS等形式记录。

TCP_DENIED

因为http_access或http_reply_access规则,客户端的请求被拒绝了。注意被http_access拒绝的请求在第9域的值是NONE/-,然而被http_reply_access拒绝的请求,在相应地方有一个有效值。

TCP_OFFLINE_HIT

当offline_mode激活时,Squid对任何cache响应返回cache命中,而不用考虑它的新鲜程度。

TCP_REDIRECT

重定向程序告诉Squid产生一个HTTP重定向到新的URI(见11.1节)。正常的,Squid不会记录这些重定向。假如要这样做,必须在编译squid前,手工定义LOG_TCP_REDIRECTS预处理指令。

NONE

无分类的结果用于特定错误,例如无效主机名。

相应于ICP查询,下列标签可能出现在access.log文件的第四域。

UDP_HIT

Squid在cache里发现请求资源的貌似新鲜的拷贝。

UDP_MISS

Squid没有在cache里发现请求资源的貌似新鲜的拷贝。假如同一目标通过HTTP请求,就可能是个cache丢失。请对比UDP_MISS_NOFETCH。

UDP_MISS_NOFETCH

跟UDP_MISS类似,不同的是这里也指示了Squid不愿去处理相应的HTTP请求。假如使用了-Y命令行选项,Squid在启动并编译其内存索引时,会返回这个标签而不是UDP_MISS。

UDP_DENIED

因为icp_access规则,ICP查询被拒绝。假如超过95%的到某客户端的ICP响应是UDP_DENIED,并且客户端数据库激活了(见附录A),Squid在1小时内,停止发送任何ICP响应到该客户端。若这点发生,你也可在cache.log里见到一个警告。

UDP_INVALID

Squid接受到无效查询(例如截断的消息、无效协议版本、URI里的空格等)。Squid发送UDP_INVALID响应到客户端。
 

总结:squid命中率很低原因是:找到cach_hit命中率低的原因了:我的squid.conf配置文件中,cache_mem 200 MB,这个值设置的太低,网上建议应该设置为内存的1/3大小,之后,将其改为cache_mem 300 MB后,用命令: squidclient -h host-squid-01 -p 3128 mgr:info结果如下:

Median Service Times (seconds)  5 min    60 min:
        HTTP Requests (All):   0.12783  0.13498
        Cache Misses:          0.24524  0.30459
        Cache Hits:            0.00865  0.00562  //cach_hit命中率86.5%
        Near Hits:             0.17711  0.18699
        Not-Modified Replies:  0.00286  0.00286
        DNS Lookups:           0.04237  0.04639
        ICP Queries:           0.00000  0.00000 
 


本文转自zh888 51CTO博客,原文链接:http://blog.51cto.com/zh888/653215,如需转载请自行联系原作者


相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
相关文章
|
监控 Linux 网络安全
百度搜索:蓝易云【CentOS7上安装Squid代理详细教程【附带使用教程】】
通过以上步骤,你已经成功安装和配置了Squid代理服务器,并且可以在客户端设备或应用程序中使用它进行代理访问。根据需要,你可以进一步定制Squid的配置,例如添加更多的访问控制规则或进行高级功能的配置。请注意,Squid还有许多其他的功能和选项,你可以参考Squid的官方文档以获取更详细的信息和配置指南。
448 0
|
Linux 网络安全 数据安全/隐私保护
百度搜索:蓝易云【CentOS搭建squid正向代理教程。】
现在,Squid正向代理已经成功搭建在你的CentOS系统上。你可以配置客户端设备或应用程序以使用Squid作为代理服务器,并将HTTP流量通过Squid进行转发和过滤。
335 0
|
7月前
|
网络协议 应用服务中间件 Linux
centos7下Nginx正向代理操作步骤
centos7下Nginx正向代理操作步骤
|
7月前
|
域名解析 缓存 网络协议
|
7月前
|
Linux
Linux/CentOS设置全局代理(http)
Linux/CentOS设置全局代理(http)
411 0
|
负载均衡 网络协议 应用服务中间件
CentOS7下使用nginx实现TCP和UDP代理
CentOS7下使用nginx实现TCP和UDP代理
969 0
CentOS7下使用nginx实现TCP和UDP代理
|
网络协议 应用服务中间件 Linux
Linux(centos7)安装nginx并配置代理
本文介绍一下如何在linux下安装nginx,并配置反向代理,使我们可以通过子域名访问不同的接口。
1246 0
|
Java 应用服务中间件 PHP
CentOS7 nginx+tomcat实现代理访问java web项目让项目支持jsp和php
首先配置:nginx # cd /etc/nginx/conf.d/ # cp default.conf tomcat.conf # nano tomcat.conf 请在tomcat.
1639 0