Comprendre les différentes valeurs de la directive d'écoute nginx

10

J'écris la configuration de nginx, et j'ai une question fondamentale.

Quelles sont les différences entre:

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

Mon objectif est de sécuriser cette application web, mais aussi de rester compatible pour les anciens clients.

Remarque: je comprends que cela [::]:443doit être avec ipv6, mais cela englobe-t-il également ipv4 dans ce cas? Je veux effacer mes concepts.

Hassan Baig
la source

Réponses:

16

listen 443 ssl: fait écouter nginx sur toutes les adresses ipv4 du serveur, sur le port 443 ( 0.0.0.0:443)

tandis que

listen [::]:443 ssl: fait écouter nginx sur toutes les adresses ipv6 du serveur, sur le port 443 ( :::443)


[::]:443ne fera pas répondre nginx sur ipv4 par défaut, sauf si vous spécifiez un paramètre ipv6only=off:

listen [::]:443 ipv6only=off;


Selon le doc: http://nginx.org/en/docs/http/ngx_http_core_module.html#listen

ssl:

Le paramètre ssl (0.7.14) permet de spécifier que toutes les connexions acceptées sur ce port doivent fonctionner en mode SSL.

http2:

Le paramètre http2 (1.9.5) configure le port pour accepter les connexions HTTP / 2 .

Cela ne signifie pas qu'il accepte uniquement les connexions HTTP / 2.

Selon RFC7540

Un client qui demande un URI "http" sans connaissance préalable de la prise en charge de HTTP / 2 sur le tronçon suivant utilise le mécanisme de mise à niveau HTTP. Le client le fait en faisant une requête HTTP / 1.1 qui inclut un champ d'en-tête Upgrade avec le jeton "h2c".

Un serveur qui ne prend pas en charge HTTP / 2 peut répondre à la demande comme si le champ d'en-tête de mise à niveau était absent.

HTTP/1.1 200 OK Content-Length: 243 Content-Type: text/html

Un serveur qui prend en charge HTTP / 2 accepte la mise à niveau avec une réponse 101 (Switching Protocols). Après la ligne vide qui termine la réponse 101, le serveur peut commencer à envoyer des trames HTTP / 2.

Résumer :

Un client qui ne prend pas en charge HTTP / 2 ne demandera jamais au serveur une mise à niveau de la communication HTTP / 2: la communication entre eux sera entièrement HTTP1 / 1.

Un client qui prend en charge HTTP / 2 demandera au serveur (en utilisant HTTP1 / 1) une mise à niveau HTTP / 2:

  • Si le serveur est prêt pour HTTP / 2, alors le serveur remarquera le client en tant que tel: la communication entre eux sera commutée sur HTTP / 2.
  • Si le serveur n'est pas prêt pour HTTP / 2, alors le serveur ignorera la demande de mise à niveau répondant avec HTTP1 / 1: la communication entre eux devrait rester largement HTTP1 / 1.

Peut-être plus résumé ici: http://qnimate.com/http2-compatibility-with-old-browsers-and-servers/


Cependant, le document nginx indique ce qui suit à propos de HTTP / 2 sur TLS:

Notez que l'acceptation des connexions HTTP / 2 sur TLS nécessite la prise en charge de l'extension TLS «Application-Layer Protocol Negotiation» (ALPN), qui n'est disponible que depuis OpenSSL version 1.0.2.

Assurez-vous que les anciens clients sont conformes à cette exigence.

krisFR
la source
0

Il existe une option appelée ipv6onlyqui détermine si l'adresse IPv6 s'applique également à IPv4. Par défaut, il est activé (ce qui signifie que ce n'est pas le cas).

Le manuel indique qu'il ne peut être réglé qu'une seule fois, ce qui signifie, je pense, que si vous le désactivez dans une seule listendirective, il est désactivé pour tous.

Consultez ce document pour plus de détails.

Richard Smith
la source
Voir cet article sur HTTP / 2.
Richard Smith