Apache Sanal Konak (Virtual Host) Yapılandırması Nasıl Yapılır?
Merhaba dostlar. Bugün sitemi açarken çok zorlandığım ama araştırdığımda ise çok da kolay olduğunu anladığım bir yöntem anlatacağım.
Bildiğiniz gibi bi alanadı kiraladığımız zaman ister istemez bunun alt-alanadlarını da kullanmak istiyoruz fakat temelde her alt-alanadına ayrı bi hosting açma fikriyle bunu yapmaya çalışıyoruz. Fakat belli bir süre sonra buna para yetişmez deyip belki yapacağımız işten bile vazgeçiyoruz. Ben burada size aynı sunucudan birden fazla alanadı, alt-alanadı yönlendirmelerini nasıl yapacağımızı anlatacağım. Hadi başlayalım.
Anlatımları Ubuntu 18.04 üzerinde ve DigitalOcean'ın bize sağladığı LAMP paketi üzerinden anlatacağım. Yani halihazırda çalışan Apache sunucunuzun olduğunu ve /var/www/html dizininden yayın yaptığını varsayacağım.

Ben sunucumu kurdum ve halihazırda Apache servisim çalışıyor. Siz de şu komutu kullanarak durum kontrolü yapabilirsiniz.
sudo systemctl status apache2.service
Sisteme ek olarak Pritunl VPN servisi kuracağım. İngilizce olarak anlattığım makalede detaylara pek detaylı girememiştim. Şimdi anadilime geçtiğime geçtiğime göre daha net ifadelerle bunu anlatabilirim sanırım. :)
Öncelikle alanadı konfigürasyonlarımı yapacağım. Makalenin sonunda rehber1.baykatre.com'u Apache servisiyle rehber2.baykatre.com'u da Pritunl servisiyle çalıştırmış olacağız.
Halihazırda benim DNS yönetimim CloudFlare'de olduğu için oradan A kayıtlarımı ekliyorum.

DNS kayıtlarını ekledikten sonra diğer servisimizi kurmaya başlayabiliriz.
Öncelikle Apache'nin 80 veya 443 portlarını kullanıyor olma ihtimaline karşı (şu an sadece 80 kullanılıyor ama halihazırda SSL sertifikalı çalışan bir servisiniz olabilir) devre dışı bırakıyorum. Çünkü Pritunl ilk kurulduğunda 443 portu üzerinden yayın yapacak. Port çakışması da pek istemediğimiz bir durum tabii.
sudo systemctl stop apache2.service

Apache'yi kapattığımıza göre Pritunl kurulum komutlarını sırasıyla yazıyorum aşağıya. Detaylı bilgiler için https://blog.baykatre.com/setup-a-vpn-server-with-pritunl-on-ubuntu-18-04/
sudo tee /etc/apt/sources.list.d/pritunl.list << EOF
deb http://repo.pritunl.com/stable/apt bionic main
EOF
sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com --recv 7568D9BB55FF9E5287D586017AE645C0CF8E292A
sudo apt-get update
sudo apt-get --assume-yes install pritunl mongodb-server
sudo systemctl start pritunl mongodb
sudo systemctl enable pritunl mongodb

Pritunl servisimizi kurduk ve çalışıp çalışmadığını da kontrol ettikten sonra bakıyoruz durumuna.

Halihazırda 443 portunda çalıştığını öğrendik. Ben bunu 13179 olarak kafama göre belirliyorum. Sizde TCP/IP port aralıklarına göre kafanıza göre seçebilirsiniz.
Şimdi sıra geldi Apache konfigürasyonları ile oynamaya. :)

Apache'nin varsayılan konfigürasyon dosyaları /etc/apache2/sites-available içinde bulunur. Biz aktif ettiğimizde /etc/apache2/sites-enabled içine link edilir.
İstersek 000-default.conf içine de ekleme yapabiliriz fakat bunu düzenlemesi terminal ekranından daha zahmetli olacağı için ayrı bi dosya oluşturmayı yeğliyorum ben.
cd /etc/apache2/sites-available
sudo nano vpnservis.conf

<VirtualHost *:80>
ServerName rehber2.baykatre.com
ServerAdmin iletisim@baykatre.com
ProxyPass / https://localhost:1379/
ProxyPassReverse / https://localhost:1379/
</VirtualHost>
rehber2.baykatre.com'u VPN servisimize bağlayacağız demiştik. Bunu hallettik şimdi de 000-default.conf dosyasını rehber1.baykatre.com için düzenleyelim.
sudo nano 000-default.conf

Sadece ServerName kısmını ekleyip kapatabiliriz. Eğer farklı bir konum üzerinden yayın yapacak olsaydık DocumentRoot kısmını da yayın yapacağımız dizine göre düzenleyebilirdik.
<VirtualHost *:80>
....
....
ServerName rehber1.baykatre.com
....
....
</VirtualHost>
Bunu da kaydedip çıkıyoruz.
sudo a2enmod proxy proxy_http rewrite
Apache'nin proxy modüllerini aktif ediyoruz.
Şimdi de oluşturduğumuz vpnservis.conf dosyasını apache üzerinde aktif edelim.
sudo a2ensite vpnservis
Syntax kontrolü yapalım.
sudo apache2ctl configtest

Genelde şu tarz bi hatayla karşılaşıyorum ama Syntax doğru olduğu sürece herhangi bir sorunla karşılaşmadım. Daha sonra bu hatayı çözebilirsem konuyu güncelleyeceğim.
Şimdi sunucuyu reboot edip Türk mantığı bi kapa aç yaparak sistemi kendine getiriyoruz. :)
sudo reboot


Hem Apache, hem de Pritunl servislerimiz aktif durumda. Şu an Apache yayınımıza sorunsuz şekilde ulaşabilirken VPN servisimize hala bağlanamıyoruz çünkü Pritunl 13179 portundan HTTPS yayını yaparken biz bunu 80 ile dağıtmaya çalışıyoruz ve uyumsuzluk problemi ile karşılaşıyoruz. Hemen Let's Encrypt ile SSL sertifikası tanımlayıp bu sorunu da halledelim.
sudo add-apt-repository ppa:certbot/certbot
sudo apt update
sudo apt-get install python-certbot-apache
sudo certbot --apache -d rehber1.baykatre.com -d rehber2.baykatre.com

"HTTP konfigürasyon dosyalarını yönlendireyim mi yönlendirmeyeyim mi?" diye soruyor. Redirect deyip devam ediyoruz. Pritunl yönendirmesi için ufak bir düzenleme daha yapmamız lazım.
Tekrardan apache konfigürasyon dizinine gidiyoruz. Artık SSL sertifikamız olduğu için Certbot'un ürettiği konfigürasyon dosyasına giriyoruz ve aşağıdaki eklemeleri yapıyoruz.
cd /etc/apache2/sites-available
sudo nano vpnservis-le-ssl.conf
<IfModule mod_ssl.c>
<VirtualHost *:443>
....
....
SSLEngine On
SSLProxyEngine On
SSLProxyVerify none
SSLProxyCheckPeerCN off
SSLProxyCheckPeerName off
....
....
</VirtualHost>
</IfModule>
En son Apache servisimizi yenileyip işlemi tamamlıyoruz.
sudo systemctl reload apache2.service


Ve mutlu son. :) index.html'e takılmayın rastgele bir yerden çektiğim için öyle duruyor.
Bu rehberde sunucu kurarken zorlandığım bir konu hakkında size bilgi verdim. Yine hatalı veya eksik olduğum yerleri iletisim@baykatre.com adresinden bana bildirmeyi unutmayın. :)