Setup Nginx Proxy remote server

Beberapa hari yang lalu saya sempat utak-atik seputar nginx dan berkeinginan untuk membuat proxy website sendiri (tanpa menggunakan cloudflare). Soalnya kepingin tahu bagaimana sih cara buatnya.

nginx http server

Perlu kalian tahu juga, istilah nginx proxy ini ada banyak istilah lho. Bisa disebut CDN (content delivery network), reverse proxy, bisa juga disebut semi web load balancer, dan sebagainya (aku cuma tahu itu doang). Pada intinya, penggunaan nginx sebagai proxy remote server ini bertujuan mengurangi beban load dari origin server. Kita bisa menambahkan fitur lain seperti melindungi dari serangan ddos tipe syn attack flood.

Skema

Secara umum, skema dari server yang saya buat sebelumnya adalah seperti di bawah ini.

Internet ---> CDN nginx ---> Apache webserver (origin)

Dalam hal ini saya membutuhkan 2 server saja. 1 server berisi Apache dan php secara umum yang kita sebut dengan origin server. Lalu 1 server hanya di install nginx saja, namun menggunakan RAM minimal 1 GB dan berkapasitas network Gigabit ethernet (1 Gbps port). Jika memang dirasa kurang, bisa menambahkan CDN nginx menjadi 2 server.

Setup Nginx

Di sini saya asumsikan pada server origin (berisi Apache + mysql) sudah di setup dan dalam status ready. Kita beralih ke setup nginx dengan 1 server kosongan. Di sini saya menggunakan centos 6.

Kita upgrade dulu

yum -y update

Install nginx dengan repo epel

yum -y install epel-release
yum -y install nginx

Konfigurasi nginx.conf

Kita kofigurasi nginx sesuai dengan kebutuhan. Karena saat ini saya menggunan server 1GB ram dan 4core, maka saya memodifikasi file bernama /etc/nginx/nginx.conf

worker_processes 4
worker_connections 1536

Saat ini traffik pada website masih belum terlalu tinggi, jika memang dirasa agak tinggi maka kita ubah worker_connection ke yang lebih tinggi, misal 2048, 4096, dsb.

Masih pada /etc/nginx/nginx.conf kita pasangkan fitur preventif untuk proteksi flood yang berpotensi membebani ke server origin. Tambahkan pada stack http.

 limit_req_zone $binary_remote_addr zone=slimitss:10m rate=1r/s;
 limit_req zone=slimitss burst=10;

Oke, selesai.

Konfigurasi virtual host

Kita menuju direktori /etc/nginx/conf.d/ untuk membuat file virtual host website kita. Sebelum itu, kita ubah nama default.conf menjadi sesuatu seperti defaut.conf_save ya.

Buat virtual host website kita. contohnya: domainsaya.la.

vi domainsaya.la.conf

Kemudian isikan seperti ini. Konfigurasi di bawah ini sudah support http dan https.

server {
 listen 80;
 listen 443 ssl;

ssl_certificate /etc/letsencrypt/live/domain.la/cert.pem;
 ssl_certificate_key /etc/letsencrypt/live/domain.la/privkey.key;

server_name domain.la;
 access_log /var/log/nginx/domain.la-access.log;
 error_log /var/log/nginx/domain.la-error.log;
 location / {
 proxy_pass http://ip.server.origin/;
 proxy_redirect off;
 proxy_set_header Host $host;
 proxy_set_header X-Real-IP $remote_addr;
 proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
 proxy_max_temp_file_size 0;
 client_max_body_size 10m;
 client_body_buffer_size 128k;
 proxy_connect_timeout 90;
 proxy_send_timeout 90;
 proxy_read_timeout 90;
 proxy_buffer_size 4k;
 proxy_buffers 4 32k;
 proxy_busy_buffers_size 64k;
 proxy_temp_file_write_size 64k;


   }
}

Konfigurasi di atas sudah support http dan https. Jika kamu belum setup SSL nya, maka kita beri komentar untuk baris di bawah ini.

#listen 443 ssl;
#ssl_certificate /etc/letsencrypt/live/domain.la/cert.pem;
#ssl_certificate_key /etc/letsencrypt/live/domain.la/privkey.key;

Untuk support https kamu harus install certificate di server nginx, bukan di origin server. Kita bahas di topik lain.

Jika sudah, tinggal kita start proses nginx.

service nginx start

Oh ya jangan lupa kita set start up untuk service nginx. Jadi ketika nginx server reboot atau gimana, nanti service nginx start sendiri.

chkconfig nginx on

Ubah A record ke IP nginx

Setelah itu, kita ke DNS server domain.la. Pada konfigurasi DNS, pastikan A record dari domain.la dan www.domain.la diarahkan ke IP server nginx. Dengan begitu, semua traffik domain.la akan terakses ke server nginx dulu, baru ke server origin.

Selesai, kini kamu sudah mempunyai nginx proxy remote server untuk domain.la. Simpelnya seperti itu dengan asumsi kamu tidak menemui masalah hahaha…

Lanjutan : Cara install ssl di nginx

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.