Menggunakan Nginx sebagai Proxy untuk Aplikasi Web Flask

Berikut ini contoh nginx.conf untuk aplikasi Flask saya:

server {
  listen 80;
  server_name ip_address;
  location {
    proxy_pass http://127.0.0.1:8000;
  }
}

Dengan “hanya” menggunakan modal ini, Anda sudah dapat membuat aplikasi web Anda live, misal dengan menggunakan gunicorn:

gunicorn app.views:app -b 127.0.0.1:8000

Menggunakan konfigurasi di atas, berarti kita menggunakan nginx sebagai proxy, hal ini berarti jika kita ingin mendapatkan IP Host server, maka yang muncul adalah

127.0.0.1

Untuk mendapatkan IP server “asli”, kita perlu menambahkan baris di nginx config di atas:

proxy_set_header Host $host;

Dengan begitu, kita dapat mendapatkan IP asli host di Flask dengan:

request.headers.get("Host")

Ada juga kita ingin mendapatkan IP asli dari visitor, karena aplikasi kita di belakang proxy, maka ketika kita hanya akan mendapat IP 127.0.0.1 juga. Bagaimana kita mendapatkan real IP visitor?

Tambahkan baris berikut di nginx conf kita,

proxy_set_header HTTP_X_REAL_IP $remote_addr;
proxy_set_header X-Forwarded-For $remote_addr;

Sehingga ketika kita ingin mendapatkan real IP visitor, kita dapat menggunakan:

request.headers.get("HTTP_X_REAL_IP")

atau

request.headers.get("X-Forwarded-For")

Sehingga, secara utuh, konfigurasi nginx.conf kita menjadi:

server {
 listen 80;
 server_name ip_address;
 location {
 proxy_set_header Host $host;
 proxy_set_header HTTP_X_REAL_IP $remote_addr;
 proxy_set_header X-Forwarded-For $remote_addr;
 proxy_pass http://127.0.0.1:8000;
 }
}

Demikian, sekelumit ilmu kecil tentang penerapan nginx sebagai proxy untuk aplikasi web Flask kita. Semoga bermanfaat…

Advertisements

One thought on “Menggunakan Nginx sebagai Proxy untuk Aplikasi Web Flask

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s