了解Nginx'listen'指令的不同值


10

我正在写nginx config,我有一个基本的问题。

之间有什么区别:

listen 443 ssl;vs listen [::]:443 ssl;vslisten [::]:443 ssl http2;

我的目标是确保此Web应用程序的安全,但也要与旧客户端保持兼容。

注意:我知道[::]:443ipv6必须这样做,但是在这种情况下,ipv4是否也包含在内?要清除我的概念。

Answers:


16

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 / 2,则服务器将这样通知客户端:它们之间的通信将切换为HTTP / 2。
  • 如果服务器尚未准备好HTTP / 2,则服务器将忽略以HTTP1 / 1回答的升级请求:它们之间的通信应保持足够的HTTP1 / 1。

也许更多总结在这里:http : //qnimate.com/http2-compatibility-with-old-browsers-and-servers/


但是,nginx文档在TLS上声明了有关HTTP / 2的以下内容:

请注意,通过TLS接受HTTP / 2连接需要“应用程序层协议协商”(ALPN)TLS扩展支持,仅自OpenSSL版本1.0.2起才可用。

确保老客户符合此要求。


0

有一个称为的选项ipv6only,该选项确定IPv6地址是否也适用于IPv4。默认情况下它是打开的(这意味着它没有)。

该手册指出只能设置一次,我认为这意味着,如果您在一个listen指令中将其关闭,则将其全部关闭。

有关详细信息,请参见此文档


请参阅HTTP / 2上的这篇文章
理查德·史密斯
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.