折腾了两天nginx反代,差点把头发薅光,今天总算搞定了,赶紧来记录一下,给后面要弄的朋友提个醒。 起因是我有个小服务跑在8080端口,想用nginx反代到域名80端口,顺便挂个SSL证书。配置写得很简单,location / { proxy_pass http://127.0.0.1:8080; } 这种,结果死活不生效,访问域名直接502。 一开始以为是防火墙问题,查了半天没毛病,端口也通着。后来看nginx错误日志,报的是upstream prematurely closed connection,这才反应过来可能是后端服务的问题。但服务明明能访问啊,curl localhost:8080都正常。 然后我就开始怀疑是proxy_pass的写法,试了带不带斜杠,各种组合都试了,还是不行。最后灵机一动,想到是不是HTTP协议版本的问题,因为我的后端服务是Go写的,默认支持HTTP/1.1,但nginx反代默认用HTTP/1.0去连后端,可能就出问题了。 果然,在location里加了proxy_http_version 1.1; 之后,立马就好了。真的是无语,这么个小细节折腾我两天,网上搜了一堆教程都没提到这个。