Memahami nilai yang berbeda untuk arahan 'mendengarkan' nginx

10

Saya sedang menulis nginx config, dan saya punya pertanyaan mendasar.

Apa perbedaan antara:

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

Tujuan saya adalah mengamankan aplikasi web ini, tetapi juga tetap kompatibel untuk klien lama.

Catatan: Saya mengerti bahwa [::]:443ini berkaitan dengan ipv6, tetapi apakah itu mencakup ipv4 juga dalam kasus ini? Ingin membersihkan konsep saya.

Hassan Baig
sumber

Jawaban:

16

listen 443 ssl: membuat nginx mendengarkan semua alamat ipv4 di server, pada port 443 ( 0.0.0.0:443)

sementara

listen [::]:443 ssl: membuat nginx mendengarkan semua alamat ipv6 di server, pada port 443 ( :::443)


[::]:443tidak akan membuat nginx merespons pada ipv4 secara default, kecuali jika Anda menentukan parameter ipv6only=off:

listen [::]:443 ipv6only=off;


Sesuai dokumen: http://nginx.org/en/docs/http/ngx_http_core_module.html#listen

ssl:

Parameter ssl (0.7.14) memungkinkan untuk menentukan bahwa semua koneksi yang diterima pada port ini harus bekerja dalam mode SSL.

http2:

Parameter http2 (1.9.5) mengkonfigurasi port untuk menerima koneksi HTTP / 2 .

Ini tidak berarti hanya menerima koneksi HTTP / 2.

Sesuai RFC7540

Klien yang mengajukan permintaan untuk URI "http" tanpa pengetahuan sebelumnya tentang dukungan untuk HTTP / 2 pada hop berikutnya menggunakan mekanisme Peningkatan HTTP. Klien melakukannya dengan membuat permintaan HTTP / 1.1 yang mencakup bidang tajuk Peningkatan dengan token "h2c".

Server yang tidak mendukung HTTP / 2 dapat menanggapi permintaan seolah-olah bidang header Upgrade tidak ada.

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

Server yang mendukung HTTP / 2 menerima pembaruan dengan respons 101 (Protokol Pengalihan). Setelah baris kosong yang menghentikan respons 101, server dapat mulai mengirim frame HTTP / 2.

Untuk meringkas :

Klien yang tidak mendukung HTTP / 2 tidak akan pernah meminta server untuk upgrade komunikasi HTTP / 2: komunikasi di antara mereka akan sepenuhnya HTTP1 / 1.

Klien yang mendukung HTTP / 2 akan meminta server (menggunakan HTTP1 / 1) untuk peningkatan HTTP / 2:

  • Jika server siap HTTP / 2, maka server akan melihat klien seperti itu: komunikasi di antara mereka akan dialihkan ke HTTP / 2.
  • Jika server tidak siap HTTP / 2, maka server akan mengabaikan permintaan pembaruan yang menjawab dengan HTTP1 / 1: komunikasi di antara mereka harus tetap banyak HTTP1 / 1.

Mungkin lebih diringkas di sini: http://qnimate.com/http2-compatibility-with-old-browsers-and-servers/


Namun nginx doc menyatakan yang berikut tentang HTTP / 2 dari TLS:

Perhatikan bahwa menerima koneksi HTTP / 2 melalui TLS memerlukan dukungan ekstensi TLS "Aplikasi-Lapisan Protokol" (ALPN), yang hanya tersedia sejak OpenSSL versi 1.0.2.

Pastikan klien lama mematuhi persyaratan ini.

KRFFR
sumber
0

Ada opsi yang disebut ipv6onlyyang menentukan apakah alamat IPv6 berlaku untuk IPv4 juga. Secara default diaktifkan (yang artinya tidak).

Manual menyatakan bahwa itu hanya dapat diatur sekali, yang menurut saya berarti bahwa jika Anda mematikannya dalam satu listenarahan, itu dimatikan untuk semua.

Lihat dokumen ini untuk detailnya.

Richard Smith
sumber
Lihat artikel ini di HTTP / 2.
Richard Smith