利用squid实现反向代理(同时具备内网代理)
我的站点上的所有文件都是静态html,为了进一步的加快网页速度,于是使用squid实现反向代理缓存功能。 
@ 安装squid 
    为了偷懒就直接使用ports安装,因为我将所有的服务器系统都安装在/s分区中,所以设置了PREFIX为/s/squid 
    # cd /usr/ports/www/squid 
    # setenv PREFIX /s/squid 
    # make install clean 
安装完成后编辑/s/squid/etc/squid/squid.conf,我的配置内容如下: 
    ########## Base control ########## 
    cache_mgr webmaster 
    cache_effective_user squid 
    cache_effective_group squid 
    visible_hostname sleepcat.3322.org 
    http_port 127.0.0.1:3128 
    icp_port 0 
    cache_dir ufs /usr/cache 300 16 256 
    cache_access_log /dev/null 
    cache_log /dev/null 
    cache_store_log /dev/null 
    error_directory /s/squid/etc/squid/errors/Simplify_Chinese 
    icon_directory /s/squid/etc/squid/icons 
    mime_table /s/squid/etc/squid/mime.conf 
    coredump_dir /s/squid/squid/cache 
    pid_filename /s/squid/squid/logs/squid.pid 
    hosts_file /etc/hosts 
    unlinkd_program /s/squid/libexec/squid/unlinkd
########## Performance control ########## 
    cache_mem 8 MB 
    cache_swap_low 90 
    cache_swap_high 95 
    maximum_object_size 4096 KB 
    minimum_object_size 0 KB 
    maximum_object_size_in_memory 8 KB 
    ipcache_size 1024 
    ipcache_low 90 
    ipcache_high 95 
    fqdncache_size 1024 
    cache_replacement_policy lru 
    memory_replacement_policy lru 
    emulate_httpd_log off 
    log_ip_on_direct on 
    log_mime_hdrs off 
    dns_timeout 2 minutes 
    request_header_max_size 10 KB 
    request_body_max_size 0 KB 
    refresh_pattern ^ftp: 1440 20% 10080 
    refresh_pattern ^gopher: 1440 0% 1440 
    refresh_pattern . 0 20% 4320 
    negative_ttl 5 minutes 
    positive_dns_ttl 6 hours 
    negative_dns_ttl 1 minute 
    connect_timeout 1 minute 
    read_timeout 15 minutes 
    request_timeout 5 minutes 
    client_lifetime 1 day 
    half_closed_clients on 
    maximum_single_addr_tries 1 
    uri_whitespace strip 
    ie_refresh off 
########## Access control ############ 
    acl all src 0.0.0.0/0.0.0.0 
    http_access allow all 
    http_reply_access allow all 
    hierarchy_stoplist cgi-bin ? 
########## Accelator control ############ 
    httpd_accel_host virtual 
    httpd_accel_port 80 
    httpd_accel_with_proxy on 
    httpd_accel_uses_host_header on 
########## Misc control ########### 
    ftp_user Squid@ 
    ftp_list_width 32 
    ftp_passive on 
    ftp_sanitycheck on 
初始化cache 
    # /s/squid/sbin/squid -z
启动squid 
    # /s/squid/etc/rc.d/squid.sh start
@ 设置apache 
     因为要对外部实现反向透明代理,所以apache不能再在外网IP的80端口服务,我将它设置到127.0.0.1的80端口,修改httpd.conf 中的Listen为: 
    Listen 127.0.0.1:80 
    刷新apache配置: 
    # apachectl restart
@ 重定向外网IP的80端口访问 
    我使用 
,所以外网接口为ng0,将所有发往ng0上的80端口请求转发到127.0.0.1的3128端口上,即转发到squid的服务端口。转发规则如下: 
    rdr ng0 0.0.0.0/0 port 80 -> 127.0.0.1 port 3128 
    同时为了使rdr规则转换后的包能通过防火墙,增加如下ipfilter过滤规则: 
    pass in quick on ng0 proto tcp from any to 127.0.0.1 port 3128 keep  state
@ 设置/etc/hosts文件 
    现在我们已经实现下面的功能: 
    client ------> ng0:80 ------> 127.0.0.1:3128 
接下来就要使squid访问真正的服务以实现反向代理缓存。刚才我已经将apache设置到在127.0.0.1:80端口监听,现在只要让squid访
问127.0.0.1:80便可,由于我们在squid的配置文件中设置了hosts文件的位置为/etc/hosts,所以我们只要在hosts文件中
设置所有我们的WWW主机(包括虚拟主机)指向127.0.0.1便可。 
    127.0.0.1 matthew.3322.org sleepcat.3322.org mirrors.2288.org 
    同时请确保你的主机搜索顺序为 file bind,如果不是,请执行以下命令: 
    # echo "file" > /etc/host.conf 
    # echo "bind" >> /etc/host.conf" 
现在整个流程如下: 
    client ------> ng0:80 ------> 127.0.0.1:3128 ------->  127.0.0.1:80 
    127.0.0.1:80 ----------> 127.0.0.1:3128 ----------> ng0:80  ----------> client 
现在反向代理已经建成,刷新ipfilter和ipnat规则,启动squid,你会发现从外网访问你的网站的速度明显比以前快了很多,而且也支持虚拟主 机。
- 最新评论
 
