# Squid (简体中文)

来自 Squid 官方网站：

  Squid 是一个 Web 缓存代理，支持 HTTP, HTTPS, FTP, 以及更多。它通过缓存与重用经常请求的web页面，减少带宽使用同时提升了响应时间。Squid 具有可扩展的访问控制功能，同时可以使服务器加速。它运行在 Unix 和 Windows 中，采用 GNU GPL 协议发布。

尽管 squid 在大型公司和学校中工作的很好，它也可以为个人家庭用户使用。然而如果你在寻找一个更轻量级的单用户代理，你可以尝试使用 Polipo。

## 安装

安装位于官方软件仓库的 squid。

## 配置

默认设置下，缓存目录会创建于 `/var/cache/squid`,同时正确的权限会被同时设置好。然而，为了更好的控制，我们需要深入 `/etc/squid/squid.conf`.

所有的配置项都有注释，但是如果你想去掉注释的话，你可以运行：

    sed -i "/^#/d;/^ *$/d" /etc/squid/squid.conf

下面的选项会对你有用。如果你没有这些选项，你可以添加进去。

- `http_port` - 设置 Squid 绑定的代理端口。你可以将 Squid 绑定到多个端口，使用多个 http_port 行。默认情况下，Squid 绑定到 3128 端口。

    http_port 3128
    http_port 3129

- `http_access` - 这是访问控制列表，即谁被允许使用这个代理。默认只有 localhost 被允许访问这个代理。作为测试目的，你可以改变这个选项 `http_access deny all` 为 `http_access allow all`，这会允许所有人链接到你的代理。如果你想仅仅允许子网内访问，你可以使用：

    acl ip_acl src 192.168.1.0/24
    http_access allow ip_acl
    http_access deny all

- `cache_mgr` - 这是缓存管理员的 email 地址。

    cache_mgr squid.admin@example.com

- `shutdown_lifetime` - 指定当 squid 的 rc.d 脚本请求停止的时候等待的时间。如果你在你的桌面电脑上运行 squid，你也许需要设成短一点的时间值。

    shutdown_lifetime 10 seconds

- `cache_mem` - 这是你想让 squid 使用内存而不写入硬盘的内存量。Squid 的总内存使用量会超过这个值！默认这个值是 8MB，所以如果你有很多内存的话，你也许想增加这个值。

    cache_mem 64 MB

- `visible_hostname` - 可以在状态/错误信息中看到的 hostname。

    visible_hostname cerberus

- `cache_peer` - 如果你想让 Squid 穿过另一个代理服务器，而不是直接连到 Internet，你需要在这里指定。
- `login` - 如果上层代理需要认证的话使用这个选项。
- `never_direct` - 如果你设定了上面的选项的话，可以告诉缓存不要直接连接到 Internet 请求页面。

    cache_peer 10.1.1.100 parent 8080 0 no-query default login=user:password
    never_direct allow all

- `maximum_object_size` - 这是缓存部件的最大大小。默认这个值很小 (我认为是 256KB)，所以如果你有很多磁盘空间，你需要将这个值增大到一个合理的值。

    maximum_object_size 10 MB

- `cache_dir` - 这是你的缓存文件夹，存储缓存文件的位置。有很多个选项，但是格式大概是这样子：

    cache_dir diskd <directory> <size in MB> 16 256

所以，在一个学校的代理服务器中：

    cache_dir diskd /cache0 200000 16 256

如果你改变了默认的缓存文件夹，你需要在启动 squid 前为文件夹设置合适的权限。否则会无法创建缓存文件夹并且停止运行。

## 启动

配置完成之后，你需要检查一下配置文件是否正确：

    # squid -k check

然后创建缓存目录：

    # squid -z

最后你可以启动 Squid:

    # systemctl start squid

开机启动：

    # systemctl enable squid

Categories:

- Networking (简体中文)
- Security (简体中文)
- Proxy servers (简体中文)
- 简体中文