艰难的选择:Nginx

艰难的选择:Nginx
By Sedrubal - Own work, CC BY-SA 4.0, https://commons.wikimedia.org/w/index.php?curid=114587250

最近搭了几个站,网关的搭设变成了一道必须要迈的砍。

背景介绍,简单总结下有几个诉求要解决:

  1. 支持h2/h3协议,这些新协议对访问海外VPS的帮助很大。
  2. openresty提供的定制能力。因为一些站需要用户登录授权后才能使用,我又没有精力去给这些站挨个定制开发,打算采用openresty在网关侧统一处理了。
  3. 支持nginx的proxy_connect_module模块且用到了标准端口。
  4. 只使用标准端口,80端口重定向到443,不提供http服务,只提供https的服务。

结果发现,有下面几个坑:

  1. h3协议Nginx只发了个预览版,还未正式支持,更别提openresty了😢。
  2. ngx_proxy_connect_module模块需要对Nginx源码打patch才能正常编译使用😢。
  3. cloudflare提供了quiche,可以给Nginx源码打patch的方式,使Nginx支持quic,但只能给Nginx 1.16版本打patch……😢
  4. openresty升级Nginx core的时候恰好跳过了1.16,1.15和1.17均支持……😣

最后只能采取妥协的方式,部署两个网关openresty和nginx-quic。前者打了ngx_proxy_connect_module的patch并启用该module,负责处理https接入和业务逻辑,后者负责处理quic/h3协议接入。

没想到新技术的普及有时候还挺慢。