Zrozumienie różnych wartości dyrektywy „nasłuchuj” nginx

10

Piszę konfigurację nginx i mam podstawowe pytanie.

Jakie są różnice między:

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

Moim celem jest zabezpieczenie tej aplikacji internetowej, ale także zachowanie zgodności ze starymi klientami.

Uwaga: Rozumiem, że [::]:443tak samo jest z ipv6, ale czy w tym przypadku obejmuje on również ipv4? Chcesz wyczyścić moje koncepcje.

Hassan Baig
źródło

Odpowiedzi:

16

listen 443 ssl: sprawia, że ​​nginx nasłuchuje na wszystkich adresach IPv4 na serwerze, na porcie 443 ( 0.0.0.0:443)

podczas

listen [::]:443 ssl: sprawia, że ​​nginx nasłuchuje na wszystkich adresach IPv6 na serwerze, na porcie 443 ( :::443)


[::]:443nie spowoduje domyślnej odpowiedzi nginx na ipv4, chyba że podasz parametr ipv6only=off:

listen [::]:443 ipv6only=off;


Zgodnie z dokumentem: http://nginx.org/en/docs/http/ngx_http_core_module.html#listen

ssl:

Parametr ssl (0.7.14) pozwala określić, że wszystkie połączenia akceptowane na tym porcie powinny działać w trybie SSL.

http2:

Parametr http2 (1.9.5) konfiguruje port do akceptowania połączeń HTTP / 2 .

Nie oznacza to, że akceptuje tylko połączenia HTTP / 2.

Zgodnie z RFC7540

Klient, który wysyła żądanie URI „http” bez wcześniejszej wiedzy o obsłudze HTTP / 2 przy następnym przeskoku, korzysta z mechanizmu aktualizacji HTTP. Klient robi to, wysyłając żądanie HTTP / 1.1, które zawiera pole nagłówka Upgrade z tokenem „h2c”.

Serwer, który nie obsługuje protokołu HTTP / 2, może odpowiedzieć na żądanie, tak jakby pole nagłówka aktualizacji było nieobecne.

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

Serwer obsługujący HTTP / 2 akceptuje aktualizację z odpowiedzią 101 (Protokoły przełączające). Po pustej linii kończącej odpowiedź 101 serwer może rozpocząć wysyłanie ramek HTTP / 2.

Podsumowując:

Klient, który nie obsługuje protokołu HTTP / 2, nigdy nie poprosi serwera o aktualizację komunikacji HTTP / 2: komunikacja między nimi będzie w pełni HTTP1 / 1.

Klient obsługujący HTTP / 2 poprosi serwer (używając HTTP1 / 1) o aktualizację HTTP / 2:

  • Jeśli serwer jest gotowy na HTTP / 2, serwer zauważy klienta jako takiego: komunikacja między nimi zostanie przełączona na HTTP / 2.
  • Jeśli serwer nie jest gotowy na HTTP / 2, wówczas zignoruje żądanie aktualizacji odpowiadając na HTTP1 / 1: komunikacja między nimi powinna pozostać obfita przez HTTP1 / 1.

Może bardziej podsumowane tutaj: http://qnimate.com/http2-compatibility-with-old-browsers-and-servers/


Jednak dokument nginx stwierdza, że ​​HTTP / 2 przez TLS:

Należy pamiętać, że akceptowanie połączeń HTTP / 2 przez TLS wymaga obsługi rozszerzenia TLS „ALPN” (Application-Layer Protocol Negotiation), która jest dostępna tylko od wersji OpenSSL 1.0.2.

Upewnij się, że starzy klienci spełniają ten wymóg.

krisFR
źródło
0

Istnieje wywołana opcja, ipv6onlyktóra określa, czy adres IPv6 dotyczy również IPv4. Domyślnie jest włączony (co oznacza, że ​​nie działa).

Podręcznik stwierdza, że ​​można go ustawić tylko raz, co moim zdaniem oznacza, że ​​jeśli wyłączysz go w jednej listendyrektywie, zostanie on wyłączony dla wszystkich.

Szczegółowe informacje można znaleźć w tym dokumencie .

Richard Smith
źródło
Zobacz ten artykuł na temat HTTP / 2.
Richard Smith,