Squid是一个成熟的代理服务器软件,我也在之前的日志用squid实现身份认证的代理描述了一下实现身份认证的正向代理功能。同样的,squid也可以实现反向代理的功能,也就是把内网中的服务器(通常是web)发布到外部,并包括cache的加速。
一、平台
引用
操作系统:红旗DC Server 5.0 Sp2
应用软件:Squid 2.5 Stable
应用软件:Squid 2.5 Stable
二、配置
squid的使用,还是参考之前的日志吧。这次我只把配置好的/etc/squid.conf文件在下面列举一下,并做必要的说明。若有问题,请看man,或Q我。
# cat squid.conf|grep -v ‘^$’|grep -v ‘^#’
引用
#定义监控端口
http_port 80
http_port 3128
#定义一些不需要cache的设置
hierarchy_stoplist cgi-bin ?
acl QUERY urlpath_regex cgi-bin \?
no_cache deny QUERY
#定义cache可用内存的大小
cache_mem 128 MB
#定义cache存放的物理路径,后面分别是总大小、dir1、dir2两个次目录的大小,最好是16的倍数
#cache_dir <目录Path>
cache_dir ufs /var/spool/squid 1024 16 256
#定义日志文件存放的路径和文件名
cache_access_log /var/log/squid/access.log
cache_log /var/log/squid/cache.log
cache_store_log /var/log/squid/store.log
#激活认证机制(正向代理有效)
auth_param basic program /usr/bin/ncsa_auth /etc/squid_user_passwd
auth_param basic children 5
auth_param basic realm Squid proxy-caching web server
auth_param basic credentialsttl 2 hours
auth_param basic casesensitive off
#一些针对不同应用预定义的最小、最大缓存更新时间和缓存百分比
refresh_pattern ^ftp: 1440 20% 10080
refresh_pattern ^gopher: 1440 0% 1440
refresh_pattern . 0 20% 4320
#定义规则列表名称,以供下面的控制命令使用
acl all src 0.0.0.0/0.0.0.0
acl manager proto cache_object
#定义需要认证的用户
acl client proxy_auth REQUIRED
acl localhost src 127.0.0.1/255.255.255.255
acl to_localhost dst 127.0.0.0/8
acl SSL_ports port 443 563
acl Safe_ports port 80 # http
acl Safe_ports port 21 # ftp
acl Safe_ports port 443 563 # https, snews
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 Safe_ports port 1863 # msn
acl CONNECT method CONNECT
#定义反向代理指向的网站域名
acl rfgz dstdomain rfgz.3322.org
acl wiki dstdomain wiki.linuxfly.org
acl bbs dstdomain bbs.linuxfly.org
acl acceleratedProtocol protocol HTTP
acl acceleratedPort port 80
#定义一些用于管理、控制的源网段
acl advuser src 192.168.228.244/32
acl baduser src 192.168.1.254/32
acl rfclient src 192.168.228.0/24
#也可以使用正规表达式定义,-i是忽略大小写
#url_regex是对整个URL匹配,urlpath_regex是仅匹配URL的部分
acl urlname url_regex -i ^http://www.linuxfly.org.*
acl gifname urlpath_regex -i \.gif$
#使用http_access命令定义规则,方向是从上往下的,匹配就不会继续了
#定义允许反向代理指向的主机
http_access allow acceleratedProtocol acceleratedPort rfgz
http_access allow acceleratedProtocol acceleratedPort wiki
http_access allow acceleratedProtocol acceleratedPort bbs
#注意,若只增加acl,但不增加http_access,则内网用户访问正常,外网用户访问失败;
#原因是,内网用户访问时,可得到/etc/hosts中的映射IP,正常访问;
#但外网用户则因即使得到IP,由于不能直接访问内网地址,所以会失败的;
#也就是说http_access就是提供给外网的反向代理控制,这通过查看日志会比较清楚。
#一些控制规则,请注意先后顺序
http_access deny baduser
http_access allow advuser
http_access allow rfclient
#把需要密码验证的用户放在后面
http_access allow client
http_access allow manager localhost
http_access deny manager
http_access deny !Safe_ports
http_access deny CONNECT !SSL_ports
http_access allow localhost
http_access deny all
http_reply_access allow all
icp_access allow all
#定义管理员邮箱,为防止垃圾,我用#代替@了
cache_mgr root#linuxfly.org
#定义本机域名
visible_hostname printserver
#这些是和反向代理有关的配置
#对于需要支持虚拟主机的话,可设置为virtual
httpd_accel_host virtual
#也可分别写入不同的域名
#http_accel_host rfgz.3322.org
#http_accel_host wiki.linuxfly.org
#http_accel_host bbs.linuxfly.org
#定义反向代理使用的端口
httpd_accel_port 80
#打开多域名主持及cache功能
httpd_accel_single_host off
httpd_accel_with_proxy on
httpd_accel_uses_host_header on
coredump_dir /var/spool/squid
http_port 80
http_port 3128
#定义一些不需要cache的设置
hierarchy_stoplist cgi-bin ?
acl QUERY urlpath_regex cgi-bin \?
no_cache deny QUERY
#定义cache可用内存的大小
cache_mem 128 MB
#定义cache存放的物理路径,后面分别是总大小、dir1、dir2两个次目录的大小,最好是16的倍数
#cache_dir
cache_dir ufs /var/spool/squid 1024 16 256
#定义日志文件存放的路径和文件名
cache_access_log /var/log/squid/access.log
cache_log /var/log/squid/cache.log
cache_store_log /var/log/squid/store.log
#激活认证机制(正向代理有效)
auth_param basic program /usr/bin/ncsa_auth /etc/squid_user_passwd
auth_param basic children 5
auth_param basic realm Squid proxy-caching web server
auth_param basic credentialsttl 2 hours
auth_param basic casesensitive off
#一些针对不同应用预定义的最小、最大缓存更新时间和缓存百分比
refresh_pattern ^ftp: 1440 20% 10080
refresh_pattern ^gopher: 1440 0% 1440
refresh_pattern . 0 20% 4320
#定义规则列表名称,以供下面的控制命令使用
acl all src 0.0.0.0/0.0.0.0
acl manager proto cache_object
#定义需要认证的用户
acl client proxy_auth REQUIRED
acl localhost src 127.0.0.1/255.255.255.255
acl to_localhost dst 127.0.0.0/8
acl SSL_ports port 443 563
acl Safe_ports port 80 # http
acl Safe_ports port 21 # ftp
acl Safe_ports port 443 563 # https, snews
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 Safe_ports port 1863 # msn
acl CONNECT method CONNECT
#定义反向代理指向的网站域名
acl rfgz dstdomain rfgz.3322.org
acl wiki dstdomain wiki.linuxfly.org
acl bbs dstdomain bbs.linuxfly.org
acl acceleratedProtocol protocol HTTP
acl acceleratedPort port 80
#定义一些用于管理、控制的源网段
acl advuser src 192.168.228.244/32
acl baduser src 192.168.1.254/32
acl rfclient src 192.168.228.0/24
#也可以使用正规表达式定义,-i是忽略大小写
#url_regex是对整个URL匹配,urlpath_regex是仅匹配URL的部分
acl urlname url_regex -i ^http://www.linuxfly.org.*
acl gifname urlpath_regex -i \.gif$
#使用http_access命令定义规则,方向是从上往下的,匹配就不会继续了
#定义允许反向代理指向的主机
http_access allow acceleratedProtocol acceleratedPort rfgz
http_access allow acceleratedProtocol acceleratedPort wiki
http_access allow acceleratedProtocol acceleratedPort bbs
#注意,若只增加acl,但不增加http_access,则内网用户访问正常,外网用户访问失败;
#原因是,内网用户访问时,可得到/etc/hosts中的映射IP,正常访问;
#但外网用户则因即使得到IP,由于不能直接访问内网地址,所以会失败的;
#也就是说http_access就是提供给外网的反向代理控制,这通过查看日志会比较清楚。
#一些控制规则,请注意先后顺序
http_access deny baduser
http_access allow advuser
http_access allow rfclient
#把需要密码验证的用户放在后面
http_access allow client
http_access allow manager localhost
http_access deny manager
http_access deny !Safe_ports
http_access deny CONNECT !SSL_ports
http_access allow localhost
http_access deny all
http_reply_access allow all
icp_access allow all
#定义管理员邮箱,为防止垃圾,我用#代替@了
cache_mgr root#linuxfly.org
#定义本机域名
visible_hostname printserver
#这些是和反向代理有关的配置
#对于需要支持虚拟主机的话,可设置为virtual
httpd_accel_host virtual
#也可分别写入不同的域名
#http_accel_host rfgz.3322.org
#http_accel_host wiki.linuxfly.org
#http_accel_host bbs.linuxfly.org
#定义反向代理使用的端口
httpd_accel_port 80
#打开多域名主持及cache功能
httpd_accel_single_host off
httpd_accel_with_proxy on
httpd_accel_uses_host_header on
coredump_dir /var/spool/squid
三、相关设置
为实现相关的功能,还需要附加一些设置:
1、主机名和IP对应
# cat /etc/hosts
引用
127.0.0.1 localhost.localdomain localhost
192.168.228.153 printserver
192.168.228.155 rfgz.3322.org
192.168.228.155 wiki.linuxfly.org
192.168.228.155 bbs.linuxfly.org
192.168.228.153 printserver
192.168.228.155 rfgz.3322.org
192.168.228.155 wiki.linuxfly.org
192.168.228.155 bbs.linuxfly.org
2、打开NAT的转发,以把对外的web访问都交给squid,利用cache加速
iptables -t nat -A PREROUTING -s 192.168.228.0/24 -p tcp –dport 80 -j REDIRECT –to-port 3128
3、为防止日志文件太大影响效率,设置定时循环日志
引用
# crontab -l
0 0 * * * (/usr/sbin/squid -k rotate)
0 0 * * * (/usr/sbin/squid -k rotate)
配置Squid 2.6实现反向代理
用squid实现身份认证的代理
用squid实现身份认证的代理
原创文章,作者:kepupublish,如若转载,请注明出处:https://blog.ytso.com/tech/linux/113026.html