Merhabalar.

azureui.muratbilginer.net ve azurerest.muratbilginer.net subdomainlerinin DNS yönlendirmelerini sağladık.

Bu uygulamaları Nginx Web Server kullanarak servis edeceğimiz için subdomainlere erişecek portların Nginx config yapılandırmasının yapılması gerekiyor.

Şimdi bunu gerçekleştireceğiz.

Flask uygulamamızı 2001 portundan, Next.js uygulamamızı 3000 portundan yayına alacağız. Config dosyasını düzenlerken bu bilgiler ışığında güncelleyeceğiz.

1 Sunucuya Terminal Bağlantısı Sağlayalım

İstediğiniz herhangi bir uygulamadan sunucuya terminal bağlantısı sağlayınız.

Ben MobaXterm kullanarak bunu yapacağım.

2 root Kullanıcısına Geçiş Yapınız

Aşağıdaki komutu çalıştırarak root kullanıcısına geçiş yapalım.

sudo -i

3 sites-available Dizinine Ulaş

Aşağıdaki komutu çalıştırarak sites-available dizinine erişelim.

cd /etc/nginx/sites-available/

4 default Dosyasını Aç ve Düzenle

Bulunduğumuz konumda bir ls çekersek. default isimli bir klasör olduğunu göreceğiz.

Aşağıdaki komutla dosyayı düzenlemek için açalım.

nano default

Dosyadaki default kodlamalar aşağıdaki gibi.

Biz imleç en yukardayken Ctrl+K kombinasyonunu kullanarak tüm dosya temizlenene kadar her şeyi sileceğiz.

Kalbimiz gibi tertemiz kaldı mı?

5 Subdomain Yönlendirme Kodlarını Ekle

Şimdi bu dosya içerisine Flask uygulamasının Proxy ayarları için aşağıdaki kodları ekleyelim.

server {
    server_name azurerest.muratbilginer.net;

    client_max_body_size 100M;
    proxy_read_timeout 300;
    proxy_connect_timeout 300;
    proxy_send_timeout 300;
   
    location / {
        proxy_pass http://127.0.0.1:2001;
        proxy_set_header Host $host;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_read_timeout 300000;
        proxy_connect_timeout 300000;
        proxy_send_timeout 300000;

    }
}

Buradaki kodları biraz açıklayalım.

server_name oluşturduğumuz subdomain. Siz kendiniz ne oluşturduysanız onu buraya yazınız. Bu illa subdomain olacak diye bir şey yok domain de olabilir.

client_max_body_size 100M;
proxy_read_timeout 300;
proxy_connect_timeout 300;
proxy_send_timeout 300;

client_max_body_size 100M;: Bu direktif, Nginx sunucusuna gönderilen isteklerin boyutunu sınırlar. Burada belirtilen “100M”, maksimum istek boyutunu 100 megabayt olarak ayarlar. Bu, sunucuya gönderilen isteklerin boyutunu kontrol etmek ve gerektiğinde sınırlamak için önemlidir, böylece sunucu aşırı yükleme durumlarında korunabilir.

proxy_read_timeout 300;: Bu direktif, Nginx’in bir arkadaki sunucuya (örneğin, bir uygulama sunucusuna veya başka bir web sunucusuna) yaptığı okuma işleminin zaman aşımını belirler. Burada belirtilen “300”, okuma işleminin maksimum süresini saniye cinsinden ifade eder. Bu süre zarfında yanıt alınmazsa, Nginx işlemi sonlandırır ve hata mesajı gönderebilir.

proxy_connect_timeout 300;: Bu direktif, Nginx’in bir arkadaki sunucuya bağlantı kurma işleminin zaman aşımını belirler. Yine, “300” bağlantı süresini saniye cinsinden ifade eder. Bu süre zarfında sunucuya bağlanılamazsa, Nginx işlemi sonlandırır.

proxy_send_timeout 300;: Bu direktif, Nginx’in bir arkadaki sunucuya veri gönderme işleminin zaman aşımını belirler. Yine, “300” gönderme süresini saniye cinsinden ifade eder. Bu süre zarfında veri gönderilemezse, Nginx işlemi sonlandırır.

Bu direktifler, Nginx sunucusunun performansını ve güvenilirliğini yönetmek için kullanılır. Özellikle, büyük dosyaların veya uzun süren işlemlerin yönetildiği durumlarda önemli rol oynarlar.

location / {
        proxy_pass http://127.0.0.1:2001;
        proxy_set_header Host $host;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_read_timeout 300000;
        proxy_connect_timeout 300000;
        proxy_send_timeout 300000;

    }

Nginx yapılandırma bloğu, bir istemcinin (genellikle bir web tarayıcısı) Nginx sunucusuna yaptığı isteklerin işlenmesini yönlendirir. Bu yapılandırma, belirli bir URL yoluna gelen istekleri başka bir sunucuya yönlendirir ve bu durumda 127.0.0.1:2001 adresinde çalışan bir uygulama sunucusuna yönlendirir.

Yapılandırma aşağıdaki direktiflerden oluşur:

location / { … }: Bu direktif, belirtilen URL yoluna gelen tüm istekleri yönetir. Burada “/” ile belirtilen URL yolu, ana dizini temsil eder. Yani, bu yapılandırma bloğu, sunucuya gönderilen tüm istekleri ele alır.

proxy_pass http://127.0.0.1:2001;: Bu direktif, gelen istekleri belirtilen URL’ye (127.0.0.1:2001) yönlendirir. Bu durumda, istekler yerel makinede çalışan bir uygulama sunucusuna yönlendirilir. Bu uygulama sunucusu, genellikle dinamik içerik oluşturmak veya işlemek için kullanılır.

proxy_set_header Host $host;: Bu direktif, gelen isteğin başlıklarına bir Host başlığı ekler. Bu başlık, orijinal isteğin hangi ana bilgisayara yönlendirildiğini belirtir.

proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;: Bu direktif, X-Forwarded-For başlığını ayarlar. Bu başlık, isteği geçiren her bir aracın IP adresini içerir. Bu, isteğin kaynağını belirlemek için kullanışlı olabilir.

proxy_read_timeout 300000;, proxy_connect_timeout 300000;, proxy_send_timeout 300000;: Bu direktifler, Nginx’in bir arkadaki sunucuya gönderilen isteklerle ilgili zaman aşımını belirler. Örneğin, proxy_read_timeout direktifi, sunucudan gelen yanıtın okunması için maksimum süreyi belirler.

6 Nginx’e Ne Demiş Olduk?

Şimdi aslında bu yaptığımız işlemle Nginx’e şunu demiş olduk. Bir http ya da https ile istek geldiğinde 80 portundan bu istek dinlenir. Eğer gelen istek azurerest.muratbilginer.net adresinden geliyorsa ona göndereceğimiz uygulama 2001 portunda çalışan uygulama demiş olduk.

Şimdi bunun bir benzerini 3000 portuna yönlendirecek şekilde ui için yapalım.

Dosyanın içine 1 satır aşağıya geçip aşağıdaki kodları ekleyelim. Siz yine kendi subdomain ve portlarınıza göre düzenleme yapınız.

server {
    server_name azureui.muratbilginer.net;

    client_max_body_size 100M;
    proxy_read_timeout 300;
    proxy_connect_timeout 300;
    proxy_send_timeout 300;
   
    location / {
        proxy_pass http://127.0.0.1:3000;
        proxy_set_header Host $host;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_read_timeout 300000;
        proxy_connect_timeout 300000;
        proxy_send_timeout 300000;

    }
}

Dosyanız aşağıdaki gibi olduysa Ctrl+X sonrasında y Enter yaparak bu dosyayı kaydedelim.

Kaydolup kaydolmadığından bir şüpheniz oluştuysa tekrar nano default komutunu çalıştırabilirsiniz.

7 Nginx Restart

Bunların Nginx tarafından tanınması için Nginx server’ı restart edelim.

systemctl restart nginx

Sonra active olup olmadığını kontrol etmek için aşağıdaki komutu çalıştıralım.

systemctl status nginx

Nginx configurasyonlarını başarılı şekilde gerçekleştirdik.

Burada yayınlamak istediğiniz tüm subdomainleri aynı bu şekilde sonuna ekleyerek devam edebilirsiniz.

Bir sonraki yazımda görüşmek üzere.


Murat Bilginer
21 Şubat 1992'de doğdum. Endüstri Mühendisi olarak lisansımı 2016 yılında tamamladım. Industryolog Akademi - NGenius oluşumlarının kurucusuyum. Şu anda kendi şirketim Brainy Tech ile Web ve Mobil Geliştirme, AWS, Google Cloud Platform Sistemleri için DevOps, Big Data Analiz ve Görselleştirme hizmetleri sunmakta ve Online Eğitimler vermekteyiz.