Gunakan HTTP / 2.0 antara nginx reverse-proxy dan server web backend

19

Saya menggunakan nginx sebagai reverse-ssl-proxy di depan server web backend yang mampu melakukan HTTP / 2.0.

Saya perhatikan bahwa nginx proksi permintaan ke server backend melalui HTTP / 1.1 daripada HTTP / 2.0. Apakah mungkin untuk memberitahu nginx untuk menggunakan koneksi HTTP / 2.0 yang tidak dienkripsi? Apakah ini akan meningkatkan kinerja?

S1lentSt0rm
sumber
walaupun spesifikasi http2 mengatakan bahwa itu tidak memerlukan enkripsi, nginx saat ini tidak mendukung http2 tanpa ssl.
Marco
Jadi itu akan menggunakan HTTP / 2.0 jika saya telah menetapkan alamat https: //? Nah, kalau begitu saya kira saya lebih baik menggunakan HTTP / 1.1. Tidak masuk akal untuk mengenkripsi lalu lintas dua kali dan kinerja HTTP / 2.0 dengan ssl mungkin tidak akan sebaik HTTP / 1.1 tanpa ssl, bukan? Maksudku, semacam itu membuat reverse-ssl-proxy tidak berguna;)
S1lentSt0rm
Tidak masalah jika Anda mengenkripsi lalu lintas antara server depan dan backend jika mereka berada di mesin yang sama. adapun kinerja: http2 ist sedikit lebih cepat dari http1.1, bahkan dengan enkripsi. tidak bisa mengatakan tanpa mencoba jika itu akan membuat perbedaan.
Marco

Jawaban:

21

Menemukan ini: https://trac.nginx.org/nginx/ticket/923

Tidak ada rencana untuk mengimplementasikan dukungan HTTP / 2 dalam modul proxy di masa mendatang

Kutipan dari surat yang dirujuk dalam tiket:

Hampir tidak ada gunanya mengimplementasikannya, karena manfaat utama HTTP / 2 adalah memungkinkan banyak permintaan multiplexing dalam satu koneksi, sehingga [hampir] menghilangkan batas jumlah permintaan simaltenous - dan tidak ada batasan seperti itu ketika berbicara dengan backend Anda sendiri. Selain itu, hal-hal bahkan dapat menjadi lebih buruk ketika menggunakan HTTP / 2 untuk backend, karena koneksi TCP tunggal digunakan alih-alih banyak koneksi.

S1lentSt0rm
sumber
9
Sepertinya ini berarti Anda tidak dapat menggunakan HTTP / 2 Server Push jika Anda melakukan proxy dengan nginx, bahkan jika server backend akan mendukungnya jika diakses langsung.
thomasrutter
3
Saya menggunakan proxy reverse nginx untuk situs non-lokal melalui koneksi lambat sehingga HTTP / 2 akan membantu saya. Sayang sekali bahwa pengembang nginx belum mempertimbangkan penggunaan case :-(.
markshep
5

Sayangnya nginx tidak mendukung proxy ke server backend http / 2, dirujuk dari https://www.nginx.com/blog/http2-module-nginx/#QandA

T: Apakah Anda mendukung HTTP / 2 di sisi atas juga, atau hanya mendukung HTTP / 2 di sisi klien?

A: Saat ini, kami hanya mendukung HTTP / 2 di sisi klien. Anda tidak dapat mengonfigurasi HTTP / 2 dengan proxy_pass. [Editor - Dalam versi asli dari posting ini, kalimat ini salah dituliskan sebagai “Anda dapat mengonfigurasi HTTP / 2 dengan proxy_pass.” Kami mohon maaf atas kebingungan yang mungkin disebabkan oleh hal ini.]

Tapi apa gunanya HTTP / 2 di sisi backend? Karena seperti yang Anda lihat dari tolok ukur, tidak ada banyak manfaat dalam HTTP / 2 untuk jaringan low-latency seperti koneksi hulu.

Juga, di NGINX Anda memiliki modul keepalive, dan Anda dapat mengonfigurasi cache keepalive. Manfaat kinerja utama dari HTTP / 2 adalah untuk menghilangkan jabat tangan tambahan, tetapi jika Anda sudah melakukannya dengan cache keepalive, Anda tidak perlu HTTP / 2 di sisi hulu.

tangxinfa
sumber