Apache'ye gönderilen isteklerini başka makineye yönlendirmek (Apache Proxy)

Son zamanlarda sanal sunucularla haşır neşir olduğumu son iki yazımdan anlamışsınızdır. Tabi çok profesyonel çözümler olmamakla birlikte şirket içinde 4 çekirdekli 8GB bellekli bir sunucunun hiçbir çekirdeğini ve 1mb belleğini heba etmeyecek şekilde hem dışarıya hem içeriye hizmet verebilmesini sağlamak amacıyla çözüm üretme çabası içindeyim. Buna sebep olarak geçen iki yazımdan sonra şimdi de Host makinedeki Apache dışarıya hizmet verirken Guest makinada kurulu olan Apache’nin apayrı veritabanı motoru ile apayrı bir projeyi sunmasını sağlamak gerekliliği doğdu.

Bunu yapmak için daha önce kurmuş olduğumuz sanal makineye geçen yazımda belirttiğim gibi Host makinedeki herhangi boş bir portu (faraza 2156.port) Guest makinenin 80.portuna yönledirerek işe başlayabiliriz. Daha sonra Guest makineye yayımlanacak olan projemizi yerleştiriyoruz ve Guest lokalinde çalıştığından emin olduktan sonra, Host makinenin http://localhost:2156/ adresinden de yönlendirmenin çalışıp çalışmadığın kontrol edebiliriz. Buraya kadar her şey yolunda ise bundan sonra Host makinemizin Apache ayarlarında yapacağımız değişiklikler ile http://adres:port/ yerine http://proje.falanca.com.tr/ adresi ile herhangi bir yerden sanal makinedeki projemize erişebilir hale geleceğiz.

Bu işin her zaman olduğu gibi bir hazırlık aşaması var. Her şeyden önce eğer kurulu değilse Apache için gerekli olan “libapache2-mod-proxy-html” paketini kurup bu modülleri aktive etmemiz gerekmektedir.

a2enmod proxy
a2enmod proxy_http

Bu modülleri aktif hale getirdikten sonra (eğer ubuntu kullanıyorsanız) “/etc/apache2/mod-available” klasöründe barınan “proxy.conf” dosyasında ufak bir değişiklik yapacağız. Normalde ön tanımlı “proxy.conf” şöyle görünmektedir:

<IfModule mod_proxy.c>
#turning ProxyRequests on and allowing proxying from all may allow
#spammers to use your proxy to send email.

ProxyRequests Off

<Proxy *>
AddDefaultCharset off
Order deny,allow
Allow from all
#Allow from example.com
</Proxy>

# Enable/disable the handling of HTTP/1.1 “Via:” headers.
# (“Full” adds the server version; “Block” removes all outgoing Via: headers)
# Set to one of: Off | On | Full | Block

ProxyVia On
</IfModule>

Bu ayarlarıyla aslında Proxy güvenlik nedeni yüzünden çalışmayacaktır.  Onun için;

<Proxy *> satırına Host makinenin dış IP’sini  eklemek gerek

<Proxy http://dis.ip.321.112>

Ayrıca “#Allow from example.com” satırını yorum halinden çıkartıp, “example.com” yerine bu sefer protokol belirtmeden dış IP adresini yazmanız ve dosyayı kaydedip çıkın.

Ayarların çalıştığından emin olmak için Host makinedeki Apache’yi yeniden başlatın.

Ayarların çalıştığından emin olduktan sonra Host makinede çalışan Apache’de, Guest makinedeki yönlendirmeye erişmesi için sanal host dosyası oluşturalım.

<VirtualHost *:80>
ServerName proje.falanca.com.tr
ProxyPass / http://www.falanca.com.tr:2156/
ProxyPassReverse / http://www.falanca.com.tr:2156/
ProxyPreserveHost On
</VirtualHost>

Ve son olarak Host makinedeki Apache’yi yeniden başlatıp internet olan herhangi bir yerden http://proje.falanca.com.tr/ adresi ile Sanal makinenizden yayınladığınız projenize ulaşabilirsiniz.

Etiketler:  ,