我正在写nginx config,我有一个基本的问题。
之间有什么区别:
listen 443 ssl;
vs listen [::]:443 ssl;
vslisten [::]:443 ssl http2;
我的目标是确保此Web应用程序的安全,但也要与旧客户端保持兼容。
注意:我知道[::]:443
ipv6必须这样做,但是在这种情况下,ipv4是否也包含在内?要清除我的概念。
我正在写nginx config,我有一个基本的问题。
之间有什么区别:
listen 443 ssl;
vs listen [::]:443 ssl;
vslisten [::]:443 ssl http2;
我的目标是确保此Web应用程序的安全,但也要与旧客户端保持兼容。
注意:我知道[::]:443
ipv6必须这样做,但是在这种情况下,ipv4是否也包含在内?要清除我的概念。
Answers:
listen 443 ssl
:使Nginx侦听服务器上端口443(0.0.0.0:443
)上的所有ipv4地址
而
listen [::]:443 ssl
:使Nginx侦听服务器上端口443(:::443
)上的所有ipv6地址
[::]:443
默认情况下不会使IPv4的nginx的回应,除非你指定参数ipv6only=off
:
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)将端口配置为接受HTTP / 2连接。
这并不意味着它仅接受HTTP / 2连接。
根据RFC7540
在不具有有关下一跳对HTTP / 2支持的先验知识的情况下,请求“ http” URI的客户端使用HTTP升级机制。客户端通过发出HTTP / 1.1请求来做到这一点,该请求包括带有“ h2c”令牌的Upgrade标头字段。
不支持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文档在TLS上声明了有关HTTP / 2的以下内容:
请注意,通过TLS接受HTTP / 2连接需要“应用程序层协议协商”(ALPN)TLS扩展支持,仅自OpenSSL版本1.0.2起才可用。
确保老客户符合此要求。