Nginx ile Reverse Proxy Nasıl Kurulur ?

Nginx ile reverse proxy kurarak sitenizin hızına hız katabilir ve sayfalarınızın cachelenmesi daha düzgün bir hale getirebilirsiniz. Nginx, Varnish veya Squid gibi diğer reverse proxy sunuculara göre çok daha basit ve anlaşılması daha kolay bir konfigürasyona sahiptir. Diğer reverse proxylerden daha hızlı olup olmadığı soru işareti olsa da bizce önemli olan kolay ayarlanabilir olmasıdır. Eğer reverse proxynin işleyiş mantığını anlamazsanız Varnish, Squid ya da Nginx de her zaman problem yaşarsınız.

Nginx İle Reverse Proxy Centos’da Nasıl Kurulur ?

Sıfırdan başlayacak olursak Centos’da sourcedan compile etmekle uğraşmayıp, aşağıdaki şekilde Nginx’i 2 saniyede kurabiliriz. Source’dan compile etmenin avantajı her zaman en son Nginx sürümünü kullanmak olsa da bu makalede bu işleme girmiyoruz. Nginx ile reverse proxy kurmak için ilk adım:

Kurulum işlemi tamamlandıktan sonra konfigürasyon dosyalarına el atmamız gerekiyor. Nano ya da vi gibi bir editörle Nginx’in kendi ayarlarına girelim.

Konfigürasyon dosyasında önemli bir çok parametre olsa da konumuz reverse proxy olduğu için her bir parametreyi açıklamak yerine standart ve basit bir dosya paylaşmayı uygun görüyoruz çünkü asıl ayarlarımızı farklı bir dosya üzerinde yapmamız gerekiyor.

Yukarıda paylaştığımız dosyada worker_process Nginx’in aynı anda kaç tane CPU’yu kullanabileceğini belirtmektedir. Bunu Nginx’in kurulu olduğu sunucunuza göre değiştirmelisiniz. Alttaki komut kaç tane CPU’nuz olduğunuzu gösterir.

Bunun dışındaki diğer tüm ayarlarla oynamak size kalmış. Örneğin error logları açmak isteyebilir ve GZIP ayarlarını değiştirmek isteyebilirsiniz. Daha önce dediğimiz gibi asıl konumuz bu ayarlar olmadığı için işlem yapacağımız konfigürasyon dosyasını anlatacağız.

Reverse Proxy Ne İşe Yarar ?

Yukarıda Nginx’i sadece Centos’a kurduk ve bir kaç ayarını değiştirdik. Biraz sonra nginx ile reverse proxy yapabilmek için ayarlarının nasıl yapılacağına geçeceğiz fakat öncelikle reverse proxy’nin ne işe yaradığını anlatmamız daha doğru olacaktır. Eğer mantığı kavramazsanız aklınıza hiç gelmeyecek yüzlerce problemle karşılaşabilirsiniz.
Reverse proxy ile temel amaç bir sayfanın cachelenmiş halini son kullanıcıya sunmaktır. Bir WordPress sitesi üzerinden örnek verecek olursak; bir sitenin sayfaları oluşturulurken veritabanından alınan bilgiler ışığında sayfa render edilir. Bu site örneğin Apache üzerinde çalışıyorsa, her gelen kullanıcı için bir PHP process Apache tarafından yaratılır. Sayfalarınızdaki kullanıcı sayısı arttıkça işlemler (processler) fazlalaşır ve kullandığınız sunucu üzerindeki yük gittikçe artar.
Reverse proxy’nin amacı bir kere yaratılmış bir sayfanın bu işlemlere tekrar tabi tutulmadan cacheden gelmesini sağlamak ve böylelik performansı arttırmaktır. Mesela bu okumuş olduğunuz makalenin sürekli değişmesi olası bir şey olmadığından bu sayfayı belli bir süreliğine cachede tutmak mantıklıdır. Her defasında veritabanına ne oldu diye sorgu atmak ve sonucu render etmekle uğraşan bir process yaratmak pek de performans açısından doğru değildir. Makale değil de sürekli değişen, yani dinamik bir sayfanın cachelenmesi ise pek uygun değildir.
Bu çerçeveden bakılırsa reverse proxy konfigürasyonu hangi sayfaların ne kadar süreliğine cachelenmesi ya da hiç cachelenmeden ana sunucudan sayfanın getirilmesi üzerine kurgulanır.

Nginx ile Reverse Proxy Yapmak İçin Backend Ayarları

Bir site Apache sunucunun (Apache yerine tabi bu IIS yada NGINX de tabi olabilir) 80 portundan kullanıcıya cevap veriyorsa önce bu port farklı bir portla değiştirilir ki reverse proxy sunucusu 80’den kullanıcılara cevap verebilsin. Reverse proxy Apache’ye atadığınız yeni portdan sayfaları talep eder. Aşağıdaki konfigürasyona geçmeden önce Apache sunucunuzun 80 yerine 82 portundan cevap vermesi için httpd.conf dosyanızı değiştirip apacheyi restart edin.

Nginx İle Reverse Proxy Yapmak İçin Virtual.Conf Ayarı

Aşağıdaki konfigürasyon dosyası bir WordPress sitesini cachelemek için yaratılmıştır. Sırasıyla şu işlemleri yaptığımız zaman Nginx ile gelen konfigürasyonları uçurup, nginx ile reverse proxy kurulumu için gerekli konfigürasyonu oluşturacağız:

Virtual.conf dosyasını ayarlayalım:

Yukarıdaki konfigürasyon dosyasının yorum satırlarından da anlaşabileceği gibi temel amaç gelen istekleri 82 portuna yönlendirmek ve 82’den gelen cevapların da hangilerinin cachelenip hangilerinin cachelenmemesi gerektiğine karar vermektir. Bu dosyayı kaydettikten sonra aşağıdaki komutu çalıştırdığımız zaman Nginx artık reverse proxy olarak çalışmaya başlar. IPTables’den 82 nolu portun dışarıya kapalı olduğuna emin olun yoksa hem 80 hem de 82 nolu portlarda sayfanız ulaşılır olur ki bu da SEO açısından negatif sonuçlar doğurabilir.

Yukarıdaki konfigürasyona göre birşeyler cacheleniyorsa aşağıdaki klasörün büyüklüğü file cache yaptığımız için artacaktır:

Konfigürasyonu test etmenin en basit yollarından biri HTTP Spy gibi bir extension’ı Chrome’a yükleyip, headerları incelemektedir. Herhangi bir sayfa Nginx’de cachelenmiş ise header’da HIT, eğer cachede yoksa MISS, konfigürasyona göre cachelenmemesi gereken wp-admin tarzı bir path is BYPASS tarzı cevaplar header’da görülecektir.