艰难的选择:Nginx
最近搭了几个站,网关的搭设变成了一道必须要迈的砍。
背景介绍,简单总结下有几个诉求要解决:
- 支持h2/h3协议,这些新协议对访问海外VPS的帮助很大。
- openresty提供的定制能力。因为一些站需要用户登录授权后才能使用,我又没有精力去给这些站挨个定制开发,打算采用openresty在网关侧统一处理了。
- 支持nginx的proxy_connect_module模块且用到了标准端口。
- 只使用标准端口,80端口重定向到443,不提供http服务,只提供https的服务。
结果发现,有下面几个坑:
- h3协议Nginx只发了个预览版,还未正式支持,更别提openresty了😢。
- ngx_proxy_connect_module模块需要对Nginx源码打patch才能正常编译使用😢。
- cloudflare提供了quiche,可以给Nginx源码打patch的方式,使Nginx支持quic,但只能给Nginx 1.16版本打patch……😢
- openresty升级Nginx core的时候恰好跳过了1.16,1.15和1.17均支持……😣
最后只能采取妥协的方式,部署两个网关openresty和nginx-quic。前者打了ngx_proxy_connect_module的patch并启用该module,负责处理https接入和业务逻辑,后者负责处理quic/h3协议接入。
没想到新技术的普及有时候还挺慢。