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?


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.


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.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.