Nginx 'listen' yönergesi için farklı değerleri anlama


10

Nginx config yazıyorum ve temel bir sorum var.

Arasındaki farklar nelerdir:

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

Amacım bu web uygulamasını güvende tutmak, ancak aynı zamanda eski istemciler için uyumlu olmaya devam ediyor.

Not: Bunun [::]:443ipv6 ile ilgili olduğunu anlıyorum , ancak bu durumda ipv4'ü de kapsıyor mu? Kavramlarımı temizlemek istiyorum.

Yanıtlar:


16

listen 443 ssl: nginx'in 443 numaralı bağlantı noktasında sunucudaki tüm ipv4 adreslerini dinlemesini sağlar ( 0.0.0.0:443)

süre

listen [::]:443 ssl: nginx'in 443 numaralı bağlantı noktasında sunucudaki tüm ipv6 adreslerini dinlemesini sağlar ( :::443)


[::]:443parametre belirtmedikçe, nginx'in ipv4'te varsayılan olarak yanıt vermesini sağlamaz ipv6only=off:

listen [::]:443 ipv6only=off;


Dokümana göre: http://nginx.org/tr/docs/http/ngx_http_core_module.html#listen

ssl:

Ssl parametresi (0.7.14), bu bağlantı noktasında kabul edilen tüm bağlantıların SSL modunda çalışması gerektiğini belirtmeye izin verir.

http2:

Http2 parametresi (1.9.5) bağlantı noktasını HTTP / 2 bağlantılarını kabul edecek şekilde yapılandırır .

Bu sadece HTTP / 2 bağlantılarını kabul ettiği anlamına gelmez.

Gereğince RFC7540

Bir sonraki atlamada HTTP / 2 desteği hakkında önceden bilgi sahibi olmadan "http" URI'si için istekte bulunan istemci, HTTP Yükseltme mekanizmasını kullanır. Istemci bunu, "h2c" belirtecine sahip bir Yükseltme üstbilgisi alanı içeren bir HTTP / 1.1 isteği yaparak yapar.

HTTP / 2'yi desteklemeyen bir sunucu, Yükseltme üstbilgisi alanı yokmuş gibi isteğe yanıt verebilir.

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

HTTP / 2'yi destekleyen bir sunucu, 101 (Anahtarlama Protokolleri) yanıtıyla yükseltmeyi kabul eder. 101 yanıtını sonlandıran boş satırdan sonra sunucu HTTP / 2 kare göndermeye başlayabilir.

Özetlemek :

HTTP / 2'yi desteklemeyen bir istemci hiçbir zaman sunucudan HTTP / 2 iletişim yükseltmesini istemez: aralarındaki iletişim tamamen HTTP1 / 1 olacaktır.

HTTP / 2'yi destekleyen bir istemci, sunucudan (HTTP1 / 1 kullanarak) bir HTTP / 2 yükseltmesi isteyecektir:

  • Sunucu HTTP / 2'ye hazırsa, sunucu istemciyi şu şekilde fark eder: aralarındaki iletişim HTTP / 2'ye geçirilir.
  • Sunucu HTTP / 2 için hazır değilse, HTTP1 / 1 ile yanıtlayan yükseltme isteğini yok sayacaktır: aralarındaki iletişim bol miktarda HTTP1 / 1 olarak kalmalıdır.

Belki burada daha fazla özetlenmiştir: http://qnimate.com/http2-compatibility-with-old-browsers-and-servers/


Ancak nginx dokümanı TLS üzerinden HTTP / 2 hakkında şunları belirtir:

TLS üzerinden HTTP / 2 bağlantılarını kabul etmenin, yalnızca OpenSSL sürüm 1.0.2'den beri kullanılabilen “Uygulama Katmanı Protokolü Müzakere” (ALPN) TLS uzantı desteği gerektirdiğini unutmayın.

Eski müşterilerin bu gereksinimle uyumlu olduğundan emin olun.


0

ipv6onlyIPv6 adresinin IPv4 için de geçerli olup olmadığını belirleyen bir seçenek vardır . Varsayılan olarak açıktır (yani açılmaz).

Kılavuz, yalnızca bir kez ayarlanabileceğini belirtir; bu, bir listenyönergede kapatırsanız, herkes için kapatıldığı anlamına gelir .

Ayrıntılar için bu belgeye bakın.


HTTP / 2 ile ilgili bu makaleye bakın .
Richard Smith
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.