我写nginxconfiguration,我有一个基本的问题。
有什么区别:
listen 443 ssl;
vs listen [::]:443 ssl;
vs listen [::]:443 ssl http2;
我的目标是确保这个Web应用程序,但也保持兼容旧客户端。
注意:我知道[::]:443
必须与ipv6,但它包含ipv4以及在这种情况下? 想清除我的概念。
listen 443 ssl
:使nginx侦听服务器上的所有ipv4地址,端口443( 0.0.0.0:443
)
而
listen [::]:443 ssl
:使nginx监听服务器上的所有ipv6地址,端口443( :::443
)
[::]:443
除非你指定参数ipv6only=off
,否则默认情况下[::]:443
不会使nginx在ipv4上响应:
listen [::]:443 ipv6only=off;
根据文档: http : //nginx.org/en/docs/http/ngx_http_core_module.html#listen
ssl:
ssl参数(0.7.14)允许指定在该端口上接受的所有连接都应该在SSL模式下工作。
http2:
http2参数(1.9.5)将端口configuration为接受HTTP / 2连接。
这并不意味着它只接受HTTP / 2连接。
根据RFC7540
在没有关于下一跳HTTP / 2支持的事先知识的情况下请求“http”URI的客户端使用HTTP升级机制。 客户端通过使用包含具有“h2c”标记的升级标题字段的HTTP / 1.1请求来这样做。
不支持HTTP / 2的服务器可以像升级标题字段不存在一样响应请求。
HTTP/1.1 200 OK Content-Length: 243 Content-Type: text/html
支持HTTP / 2的服务器接受101(交换协议)响应的升级。 在终止101响应的空行之后,服务器可以开始发送HTTP / 2帧。
总结:
不支持HTTP / 2的客户端永远不会要求服务器进行HTTP / 2通信升级:它们之间的通信将完全是HTTP1 / 1。
支持HTTP / 2的客户端将要求服务器(使用HTTP1 / 1)进行HTTP / 2升级:
也许在这里总结: http : //qnimate.com/http2-compatibility-with-old-browsers-and-servers/
然而,nginx文档声明了关于HTTP / 2 over TLS的以下内容:
请注意,通过TLS接受HTTP / 2连接需要“应用程序层协议协商”(ALPN)TLS扩展支持,该支持仅在OpenSSL版本1.0.2以后才可用。
确保老客户符合这个要求。
有一个名为ipv6only
的选项,它决定IPv6地址是否也适用于IPv4。 默认情况下,它被打开(这意味着它不)。
该手册指出,它只能被设置一次,我认为这意味着如果你关掉一个listen
指令,它将被closures。
详情请参阅此文件 。