Nginx ile Reverse Proxy

Bu yazıda kısaca nginx server’da proxy ayarlarının nasıl yapılacağına değineceğim. Kurulum olayını direk apt-get ile kolayca yapıyoruz o kısmı atlıyorum. Ayrıca nginx ayarları da nginx.conf dosyasında tanımlanıyor. Bu ayarlar da şimdilik bizi aşıyor biz asıl konumuza odaklanıyoruz.

Proxy, bildiğiniz gibi internet erişiminde kullanılan ara sunucuya denir. Türkçe meali vekil sunucudur.

Ne yapar?
Kullanıcı/tarayıcı isteği yapar, tabii bu istek direk vekil sunucumuza gelir. İstekte “ben şunu şurdan istiyorum” denir. Vekil sunucu ilgili adrese bağlanır ve datayı çekip, response oluşturur ve kullanıcıya döndürür.

Nasıl?
Nginx’in kurulduğu yerde (root dosyasında) sites-available klasörü içerisinde default adında bir config dosyası vardır. Eğer ellemediyseniz orada default ayarlar bulursunuz haliyle. Tabii ben buna şatdadanak “default” isminde dedim diye illaki “default” olacak diye birşey yok, nginx.conf dosyasında sonralara doğru bakarsanız “include..” ile başlayan satırlarda tanımlanmıştır.

Dosyayı açında json tadında bir tanımlama ile karşılaşılıyor:

 
 
  1. server {
  2.     listen 80;
  3.     root /xxx/web-root;
  4.     index index.html index.htm;
  5.     server_name xxx.com;
  6.     <strong>location /api/v1/ {
  7.         proxy_pass http://xx.xxx.xxx.xx:8090/;
  8.     }</strong>
  9. }

 

Burada ki önemli kısım “location” ile başlayan bir kısım. Biz burada aslında http://ngnixroot/api/v1 adresine bir request yapıldığında bunu direk olarak http://xx.xxx.xxx.xx:8090/ bu adrese yönleniriyor (xx ler ip blockları,kafanız karışmasın herhangi bir domain de olabilir).

Ne zaman ?

Web olaylarında genellikle ajax request’lerinde “cross origin domain policy” hatası alırız (aslında bu bir hata değil de genellikle böyle diyoruz. “Abiii cross origin domain yedim :P”). Velhasılkelam başka bir domain altında çalışan bir API’miz var ve buna başka domain’de olan bir web arayüzünden  request atmaya çalışıyoruz. Direk jsonp vs kullanmazsak veya ajax request’imiz arasına kendi yaptığımız php/.net ile yazdığımız bir filter koymazsak dediğim hatayı alırız.

Tam bu anda eğer bu web sitemiz nginx’in altında çalışıyorsa buna bi reverse proxy çakarız ve API’yı sanki lokalimizde bir path’de çalılıyormuşcasına gösterebiliriz. Ve alavere dalavereye de fazlaca girmemiş oluruz.

Kolay Gelsin

“Yaşamak bir ağaç gibi tek ve hür ve bir orman gibi kardeşçesine”
Nazım Hikmet