nghttpx 是一个 HTTP2 代理,HTTP2 是新一代的 HTTP 协议,但一些老牌的 HTTP 代理比如 squid 并不支持 HTTP2 协议,就需要 nghttpx 来将 HTTP2 协议翻译成 HTTP1.x 的协议,所以要搭建一个HTTP2 代理你需要一个 HTTP 代理来配合使用。

更新记录

  • 2017.07.27:增加了原文链接

原文链接

具体请求流程是:

国内网络 VPS 自由网络 目标网站
你的浏览器 → (加密)HTTP2 → nghttpx → squid → HTTP(S) → 目标网站

服务器安装和配置

配置 squid

在商店中选择 squid 并创建,无需填写任何选项(端口也不用填)安装即可。

**注意,如果 Squid 无法启动,日志中显示 FATAL xcalloc: Uable to allocate *** 时,这是内存不足引起的错误。你可以尝试添加交互分区来解决。

sudo su
fallocate -l 1G /swapfile
chmod 600 /swapfile
mkswap /swapfile
swapon /swapfile
echo "vm.swappiness = 10" >> /etc/sysctl.conf
sysctl -p

注意重启后swap会取消挂载.请根据相应系统查询写入fstab的命令.这里给出Ubuntu和Centos的

Ubuntu:echo '/swapfile none swap sw 0 0' | sudo tee -a /etc/fstab

Centos:echo "/swapfile swap swap defaults 0 0" | sudo tee -a /etc/fstab

然后卸载重装 Squid 即可。

配置 nghttpx

SSL 证书的获取你可以参考 如何自动生成可信的SSL证书,如果使用自签名证书你需要在客户端导入CA。

  • Port: 代理端口
  • Disable TLS: 是否禁用 TLS,不禁用的话就必须填写 SSL 参数以及提供 SSL 证书。
  • Domain: SSL 证书的域名
  • Backend: 后端 HTTP 代理,如果你下面link 了一个 backend,这里就填 backend,端口号,如果你使用其它远程代理,这里就填代理地址就行,格式 地址,端口
  • Access Log: 是否在日志中显示访问记录
  • Volumes - certs: SSL 证书的存放目录,应该包含上面所填写的 Domain 的两个文件: Domain.key 和 Domain.crt
  • Link Containers - backend: 这儿可以选择上面创建的 squid

安装即可,然后你就有一个非常安全的 HTTPS 代理了。开始配置客户端吧。

客户端

Chrome

Chrome 支持HTTP2,可以使用 Proxy SwitchyOmega 来使用

Surge

nghttpx = https, DOMAIN, 端口,

banner