GNU/Linux >> Belajar Linux >  >> Linux

Cara Mengatur Nginx sebagai loadbalancer untuk Apache atau Tomcat untuk HTTP/HTTPS

Anda dapat menggunakan Nginx sebagai penyeimbang beban di depan aplikasi web Anda.

Misalnya, jika aplikasi perusahaan Anda berjalan di Apache (atau Tomcat), Anda dapat menyiapkan instance ke-2 dari aplikasi perusahaan Anda di Apache (atau Tomcat) di server yang berbeda.

Kemudian, Anda dapat menempatkan Nginx di front-end, yang akan memuat keseimbangan antara dua server Apache (atau Tomcat, atau JBoss).

Jika Anda baru mengenal Nginx, penting untuk memahami perbedaan antara Nginx vs Apache, dan Arsitektur Nginx.

Nginx mendukung tiga jenis penyeimbangan beban berikut:

  1. round-robin – Ini adalah tipe default untuk Nginx, yang menggunakan algoritme round-robin tipikal untuk memutuskan ke mana harus mengirim permintaan masuk
  2. paling tidak terhubung – Seperti namanya, permintaan yang masuk akan dikirim ke server yang memiliki jumlah koneksi lebih sedikit.
  3. ip-hash – Ini berguna ketika Anda ingin memiliki koneksi persisten atau tetap dari permintaan yang masuk. Dalam jenis ini, alamat ip klien digunakan untuk memutuskan ke server mana permintaan harus dikirim.

1. Tentukan upstream dan proxy_pass di Nginx Config File

Untuk load balancing, Anda perlu menambahkan dua hal ke file konfigurasi nginx:1) upstream 2) proxy_pass

Pertama, hulu: Tentukan nama unik (mungkin nama aplikasi Anda) dan daftar semua server yang akan diseimbangkan beban oleh Nginx ini.

Dalam contoh berikut, "crmdev" adalah nama upstream, yang merupakan nama aplikasi yang berjalan pada server web Apache individu (101.1 dan 102.2 seperti yang ditunjukkan di bawah). Alih-alih "crmdev", Anda dapat menentukan apa pun yang Anda suka di sini.

Catatan:Upstream harus ditentukan di dalam konteks "http" Nginx Anda.

upstream crmdev {
    server 192.168.101.1;
    server 192.168.101.2;
}

Catatan:Jika masing-masing server berjalan pada port yang berbeda (selain port 80), tentukan nomor port seperti yang ditunjukkan di bawah ini di upstream

upstream crmdev {
    server 192.168.101.1:8080;
    server 192.168.101.2:8080;
}

Kedua, proxy_pass: Tentukan nama upstream unik yang ditentukan pada langkah sebelumnya sebagai proxy_pass di dalam bagian “lokasi” Anda, yang akan berada di bawah bagian “server” seperti yang ditunjukkan di bawah ini.

server {
  listen 80;
  
  location / {
    proxy_pass http://crmdev;
  }
}

Catatan:Dalam contoh ini, nginx sendiri mendengarkan pada port 80 seperti yang ditunjukkan di atas oleh parameter listen.

Harap diperhatikan bahwa Anda juga dapat menggunakan proxy_pass untuk Mengatur Nginx sebagai Proxy Terbalik ke Apache/PHP.

2. Tentukan upstream dan proxy_pass di Nginx Default Config File

Catatan:Biasanya, di atas harus di bawah http atau https seperti yang ditunjukkan di bawah ini.

http {
  upstream crmdev {
   server 192.168.101.1:8080;
   server 192.168.101.2:8080;
  }

  server {
      listen 80;

      location / {
          proxy_pass http://crmdev;
      }
  }
}

Tetapi, jika Anda menggunakan default.conf yang disertakan dengan file nginx.conf default, Anda tidak perlu memberikan “http”, karena sudah didefinisikan dalam konteks http.

Catatan:Untuk HTTPS, ganti konteks “http” (pada baris pertama di atas) dengan https. Juga, di baris proxy_pass, gunakan https://{your-upstream-name}

Dalam hal ini, jika Anda menggunakan "http" seperti yang ditunjukkan di atas, Anda mungkin mendapatkan pesan kesalahan arahan http tidak diizinkan berikut:

Starting nginx: nginx: [emerg] "http" directive is not allowed here in /etc/nginx/conf.d/default.conf:1

Ini adalah salinan file default.conf saya, di mana saya telah menambahkan upstream di bagian atas (tanpa http), dan kemudian mengomentari lokasi default, dan menambahkan lokasi baru menggunakan proxy_pass.

# vi /etc/nginx/conf.d/default.conf
upstream crmdev {
    server 127.0.0.1:4080;
    server 127.0.0.1:7080;
}
server {
  listen       3080;
  server_name  localhost;
  
  #location / {
  #    root   /usr/share/nginx/html;
  #    index  index.html index.htm;
  #}
  
  location / {
    proxy_pass http://crmdev;
  }
..
..
}

3. Siapkan Algoritma yang paling tidak terhubung untuk Nginx Load Balancer

Dalam algoritme ini, permintaan yang masuk dikirim ke server yang memiliki jumlah koneksi aktif paling sedikit.

Untuk ini, tambahkan kata kunci “least_conn” di bagian atas upstream seperti yang ditunjukkan di bawah ini.

upstream crmdev {
    least_conn;
    server 192.168.101.1:8080;
    server 192.168.101.2:8080;
}

Jika Anda memiliki beberapa server yang terdaftar di least_conn, dan jika beberapa server memiliki jumlah koneksi aktif yang sama, maka di antara server tersebut, satu akan dipilih berdasarkan round-robin berbobot.

4. Siapkan Algoritma Persisten atau Sticky untuk Nginx Load Balancer

Kerugian dari metode round-robin dan paling tidak terhubung adalah bahwa, koneksi berikutnya dari klien tidak akan pergi ke server yang sama di pool. Ini mungkin OK untuk aplikasi yang tidak bergantung pada sesi.

Tetapi jika aplikasi Anda bergantung pada sesi, maka setelah koneksi awal dibuat dengan server tertentu, maka Anda ingin semua koneksi di masa mendatang dari klien tertentu itu pergi ke server yang sama. Untuk ini, gunakan algoritma ip_hash seperti yang ditunjukkan di bawah ini.

upstream crmdev {
    ip_hash;
    server 192.168.101.1:8080;
    server 192.168.101.2:8080;
} 

Untuk hash, untuk alamat IPv4, tiga oktet pertama digunakan. Jika alamat IPv6, seluruh alamat akan digunakan.

5. Opsi Bobot untuk Server Individual

Anda juga dapat menentukan bobot untuk server tertentu di kumpulan Anda. Secara default, semua server memiliki prioritas (bobot) yang sama. yaitu Nilai default bobot adalah 1.

Namun, Anda dapat mengubah perilaku ini dengan menetapkan bobot ke server seperti yang ditunjukkan di bawah ini.

upstream crmdev {
    server 192.168.101.1:8080;
    server 192.168.101.2:8080;
    server 192.168.101.3:8080 weight 2;
    server 192.168.101.4:8080;
    server 192.168.101.5:8080;
}

Dalam contoh ini, kami memiliki total 5 server. Tetapi bobot pada server ke-3 adalah 2. Artinya untuk setiap 6 permintaan baru, 2 permintaan akan masuk ke server ke-3, dan server lainnya akan mendapatkan 1 permintaan.

Jadi, ini berguna untuk mendistribusikan lebih banyak beban pada server tertentu yang memiliki lebih banyak tenaga kuda.

Meskipun dalam contoh di atas, bobot digunakan dengan algoritme round-robin default, Anda juga dapat menggunakan bobot untuk least_conn dan ip_hash.

6. Opsi Timeout untuk Server Individual – max_fails dan fail_timeout

Anda juga dapat menentukan max_fails dan fail_timeout ke server tertentu seperti yang ditunjukkan di bawah ini.

upstream crmdev {
    server 192.168.101.1:8080 max_fails=3 fail_timeout=30s;
    server 192.168.101.2:8080;
    server 192.168.101.3:8080 weight 2;
    server 192.168.101.4:8080;
    server 192.168.101.5:8080;
}

Di atas:

  • Fail_timeout default adalah 10 detik. Dalam contoh di atas, ini diatur ke 30 detik. Ini berarti bahwa dalam 30 detik jika ada x jumlah percobaan yang gagal (seperti yang didefinisikan oleh max_fails), maka server tidak akan tersedia. Selain itu, server akan tetap tidak tersedia selama 30 detik.
  • Max_fails default adalah 1 percobaan. Dalam contoh di atas, ini diatur ke 3 upaya. Ini berarti bahwa setelah 3 kali gagal untuk terhubung ke server tertentu, Nginx akan menganggap server ini tidak tersedia selama durasi fail_timeout yaitu 30 detik.

7. Tetapkan Server Cadangan di Nginx LoadBalancer Pool

Pada contoh berikut, server ke-5 ditandai sebagai cadangan menggunakan kata kunci “cadangan” di akhir parameter server.

upstream crmdev {
    server 192.168.101.1:8080 max_fails=3 fail_timeout=30s;
    server 192.168.101.2:8080;
    server 192.168.101.3:8080 weight 2;
    server 192.168.101.4:8080;
    server 192.168.101.5:8080 backup;
}

Di atas akan menjadikan server ke-5 (192.168.101.5) sebagai server cadangan. Permintaan yang masuk tidak akan diteruskan ke server ini kecuali 4 server lainnya sedang down.


Linux
  1. Cara Mengarahkan HTTP ke HTTPS di Nginx

  2. Mengarahkan HTTP ke HTTPS di NginX

  3. Bagaimana cara mengarahkan HTTP ke HTTPS secara otomatis di server Apache?

  1. Cara Mengonfigurasi Nginx sebagai Server Web dan Reverse Proxy untuk Apache di CentOS 8

  2. Cara Mengatur Nginx sebagai Proxy Terbalik untuk Apache di Debian 11

  3. Cara Mengatur Apache Sebagai Proxy Frontend untuk Node.js

  1. Cara Mengatur HAProxy sebagai Load Balancer untuk Nginx di CentOS 8

  2. Cara Mengaktifkan HTTP/2 di Apache di Sistem Linux

  3. Cara Mengaktifkan HTTP/2.0 di Server Nginx:Panduan Langkah-demi-Langkah