Menjaga koneksi SSL tetap aktif antara proxy balik dan server backend

Aug 19 2020

Saya memiliki server back-end (Apache) yang terlalu jauh dari sebagian besar pengguna kami, jadi ide kami adalah menerapkan proxy balik yang lebih dekat yang akan bertindak sebagai cache.

Sekilas itu berhasil sebagai pesona. File statis yang di-cache disajikan dengan sangat cepat, tetapi untuk hal lain, reverse proxy (NGINX) perlu terhubung ke server back-end, yang membutuhkan waktu untuk handshaking SSL, membuat permintaan pertama ini menjadi lambat.

Saya sedang mencari informasi tentang ini tetapi saya tidak dapat menemukan cara untuk menjaga koneksi ini. Apakah ada cara untuk melakukannya?

Saya bahkan telah mencoba mempelajari lebih lanjut tentang websockets, tetapi semua implementasi yang dapat saya temukan adalah untuk menjawab permintaan tertentu, bukan untuk menjaga koneksi menjadi perantara kedua server web (NGINX di proxy terbalik dan Apache di ujung belakang).

Apakah ada di antara Anda yang memiliki ide atau tip tentang apa yang harus dipelajari / digunakan / dicari untuk mencapainya?

Terima kasih banyak sebelumnya!

Jawaban

MichaelHampton Aug 19 2020 at 07:54

Di nginx Anda hanya dapat menentukan keepalivekoneksi upstream jika koneksi didefinisikan dalam sebuah upstreamblok. Sebagai contoh:

upstream backend {
    server private-api.example.com:443;

    keepalive 32;
}

Di sini, keepalivemenentukan jumlah maksimum koneksi terbuka simultan ke server upstream per proses pekerja .

Untuk menggunakan upstream, Anda menentukan namanya di alamat Anda, proxy_passbukan di alamat backend.

Misalnya, jika Anda sebelumnya menggunakan:

     proxy_pass https://private-api.example.com:443;

Anda akan mengubahnya menjadi:

     proxy_pass https://backend;

Secara harfiah mengganti nama upstream untuk yang ditentukan server.

Anda juga harus menyetel versi HTTP ke 1.1 (karena secara default agak tidak masuk akal ke 1.0) dan menghapus header Connection:

    proxy_http_version 1.1;
    proxy_set_header Connection "";

Ingatlah bahwa ada juga yang keepalive_timeoutdapat Anda tentukan di upstreammana Anda mungkin perlu menyetel. Secara default adalah 60 detik, jadi jika koneksi diam selama itu akan ditutup, bahkan jika jumlah keepalivekoneksi terbuka. Server backend akan memiliki waktu tunggu keepalive sendiri yang juga perlu Anda setel secara terpisah.