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

Django + Nginx di Localhost

Prinsip utama yang harus dipahami adalah nginx disini menjadi proxy untuk port 8000 (port default django untuk dev), caranya dengan menambahkan di nginx.conf atau di sites-available/default baris berikut:

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

Setelah itu jalankan perintah ./manage.py runserver dan buka localhost di browser, sekarang nginx menjadi web server di local development Anda, kalau mau lebih yakin lagi, buka tools chrome inspect -> network -> Server, localhost dilayani oleh:

Server: nginx/1.10.3

sedangkan URL localhost:8000 dilayani oleh:

Server: WSGIServer/0.2 CPython/3.6.1

Selamat mencoba!

Cara Setup nginx x-accel-redirect

Belum habis kagum dengan nginx pagespeed, barusan nemu salah satu fungsi lagi dari nginx untuk internal redirection. Contoh kasus penggunaan, kadang dalam sebuah proyek kita menyediakan file yang bisa diunduh oleh user, dan umumnya logic ini kita buat di level web app. Karena ini terkait dengan file, tentu dengan nginx kerja akan lebih efisien dan aplikasi web kita bisa bekerja untuk hal yang lain.

Continue reading “Cara Setup nginx x-accel-redirect”

Contoh nginx regex match URL

Contoh:

location ~ ^/read/([0-9]+)/([0-9a-z-]+\.png$) {
    alias /home/kholidfu/awesome/image/$1/$2;
}

Pola regex akan cocok dengan URL berikut:

/read/9999/some-awesome-image.png

Dan nginx akan mencari image tersebut di direktori

/home/kholidfu/awesome/image/9999/some-awesome-image.png

OOT dikit, kenapa menggunakan directive alias bukan root? Jawabannya di sini

Nginx — static file serving confusion with root & alias

Selamat mencoba…

Featured

Kitab Nginx

Nginx – sebuah aplikasi web server yang cepat dan multi-fungsi, saya sendiri sering memanfaatkan nginx untuk web server, http_image_filter, melayani statics file, optimasi kecepatan loading sebuah halaman, cache dan masih banyak lagi. Untuk itu pantas kiranya dibuatkan featured post tersendiri, biar lebih mudah dicari. Seperti biasa, tulisan ini juga bersifat continuously improved.

Continue reading “Kitab Nginx”