cloudflare帮助消除了8443端口
80和443不能用才改用的8080和8443

8080和8443的转发在openwrt中添加,转发给ingress-nginx即可。到此,如果你不嫌弃8080和8443端口出现在URL上,那就不用继续了,这样以及可以用了。
但如果还想去掉这可恶的自定义端口,则需要继续,让cloudflare帮忙。
一直在用cloudflare,但仅仅用来添加DNS,它的本源(CDN)和最近几年一直在上新的功能是一个都没用上。看了下cloudflare的功能,一开始觉得无法解决端口隐藏的功能,也就是说,虽然8443也是CF认可的https端口,也就是说,当你访问8443端口的时候,CF也会去original的8443端口获取数据,但并不能给隐藏啊。后来看到有人说可以加page rules直接转发,这样的话,确实可以,但最终还是不隐藏的状态,直到我看到这么多规则可以设置:

我看了下Origin Rules中写了可以rewrite port,于是添加了一条试试:

这条规则就是HTTPS的话,rewrite origin port to 8443,尝试了下,竟然就隐藏了端口。。。可以用了。
据说,CF在国内只能发到80/443, 其他国家的话,http和https除了默认的端口还有几个可选的,例如https中的8443就是一个可选的。如果这样还不行的话,我估计就要看看cloudflared tunnel了,那个似乎什么限制都没有,内网穿透的原理,现在看起来用不上了!
最后,ingress-nginx那里有个问题,当我把这套都设置好后,就把ghost的url设置成了https://xxx, 这样的影响是:ghost竟然会redirect non https to https,其实ghost做这个事情是不是有点多余了,本该是上游的nginx之类去做。ghost似乎是根据http header来决定是否redirect, 全链路变成这样:

默认安装的ingress-nginx没有启用x-forwarded-*这套header, 于是ghost就陷入了无限redirect的状态,ingress-nginx也提到,如果ingress处在另一个L7后面,那可以开启这个设置,我们现在的位置,确实是在L7后面,就是cloudflare后面,用下面的配置开启,竟然没重启也生效了。。。
apiVersion: v1
kind: ConfigMap
metadata:
annotations:
labels:
app: ingress-nginx
name: nginx-configuration
namespace: ingress-nginx
data:
use-forwarded-headers: "true"