nginx我们定义了400错误的特定页面,却仍然显示了默认页面,这种情况其实是发生了

400 Bad Request,The plain HTTP request was sent to HTTPS port

这个错误。这个错误的翻译是400 请求错误 普通的http请求被发送到https端口了。

这种错误的引起是因为配置的ssl端口忘记写ssl标志了,比如listen 443; 这样nginx不会认为这是一个https端口,而是http端口,你需要把它变成listen 443 ssl http2;就可以消除这个问题。

那么可能你会问了,要是有人用http请求去访问这个挂了ssl的端口该怎么办呢?那就会返回上面那个400错误,但是你会发现你自定义的400根本就没起作用,是怎么回事?

其实那个错误的代码是497,是nginx专有代码,并不属于一个标准的http错误码,因此你需要error_page 497 /400.html; 也就是这种情况才会跳到你设定好的400错误页面上来。


你是否会像清风拂过花儿一样与我相遇呢?