如何禁用响应 nginx 或 apache 或 caddy 中的 http1 请求?
Posted
技术标签:
【中文标题】如何禁用响应 nginx 或 apache 或 caddy 中的 http1 请求?【英文标题】:how to disable responding to http1 requests in nginx or apache or caddy? 【发布时间】:2017-10-17 06:30:30 【问题描述】:我有一个 http2 服务器,但默认情况下它响应 http1 请求。
我想停止我的服务器响应 http1 请求?
大多数浏览器可能使用 alpn 或 npn。是否有可能只宣传 http2 ?还是自定义的应用协议列表?
【问题讨论】:
为什么要阻止 HTTP/1.x 请求? 【参考方案1】:您可以使用类似下面的规则来阻止所有 http1 请求。但不建议这样做。
if ($server_protocol ~* "HTTP/1*")
return 444;
【讨论】:
这只会关闭连接。我什至不想宣传我支持 HTTP1。【参考方案2】:在 Caddy 中,如果您愿意修改源代码,可以在 caddyhttp/httpserver/server.go
中进行以下更改。
更改以下内容:
var defaultALPN = []string"h2", "http/1.1"
…所以它说:
var defaultALPN = []string"h2"
这将阻止它通过 ALPN 发布 HTTP/1.1。
然后将这段代码添加到ServeHTTP
方法的开头:
func (s *Server) ServeHTTP(w http.ResponseWriter, r *http.Request)
if !r.ProtoAtLeast(2, 0)
if hj, ok := w.(http.Hijacker); ok
conn, _, err := hj.Hijack()
if err == nil
conn.Close()
return
…
如果使用任何早于 HTTP/2 的协议,这将立即关闭连接而不发送标头。
【讨论】:
以上是关于如何禁用响应 nginx 或 apache 或 caddy 中的 http1 请求?的主要内容,如果未能解决你的问题,请参考以下文章
Rails 应用程序中 nginx 或 apache 的职责是啥?
如何在 nginx 或 apache httpd 中构建 Angular 4 应用程序?
Node.js“服务器”与 Nginx 或 Apache 服务器相比如何?