Nginx Subdomain Yönetimi ve Let’s Encrypt SSL Kurulumu

Bu rehberde Nginx üzerinde subdomain yönetimini, server_name eşleşme problemlerini ve Let’s Encrypt ile SSL kurulumunu adım adım ele alıyoruz. Özellikle admin.latestsoftwaredevelopers.com gibi bir admin panel subdomain’i kullanıyorsanız, yanlış yönlenme ve HTTPS problemlerini bu yapı ile kolayca çözebilirsiniz.

Kısa özet: Eğer bir subdomain açıldığında ana site görünüyorsa, sorun çoğu zaman server_name, default server veya eksik 443 ssl bloğundan kaynaklanır. Bu yazıda admin panel için ayrı Nginx config dosyası oluşturmayı, Certbot ile SSL eklemeyi ve HTTP → HTTPS yönlendirmesini öğreneceksiniz.

Sunucu tarafında metrik ve log izleme de yapıyorsanız Loki + Grafana + Alloy ile log izleme rehberine de göz atabilirsiniz.


Subdomain Açılıyor Ama Ana Site Görünüyor

En sık karşılaşılan senaryolardan biri şudur: admin.latestsoftwaredevelopers.com açılır, ancak beklenen admin panel yerine ana blog veya ana site görünür.

Bunun temel nedenleri genellikle şunlardır:

  • Admin subdomain için ayrı server bloğu yoktur
  • server_name yanlış yazılmıştır
  • İstek default server bloğuna düşüyordur
  • HTTP tanımlıdır ama HTTPS için ayrı 443 ssl bloğu yoktur
Dikkat: Tarayıcıda https://admin.domain.com açıyorsanız, sadece listen 80; bloğu yeterli değildir. HTTPS için ayrıca listen 443 ssl; tanımı gerekir.

Nginx Sites-Available Yapısı

Production ortamlarında temiz ve sürdürülebilir bir yapı için her domain veya subdomain adına karşılık gelen ayrı config dosyaları kullanmak iyi bir pratiktir.

/etc/nginx/sites-available/

latestsoftwaredevelopers.com.conf
admin.latestsoftwaredevelopers.com.conf
monitor.latestsoftwaredevelopers.com.conf

Bu dosyalar daha sonra sites-enabled içine linklenir:

sudo ln -s /etc/nginx/sites-available/admin.latestsoftwaredevelopers.com.conf \
/etc/nginx/sites-enabled/

Böylece hangi hostun hangi config ile servis edildiği çok daha net hale gelir.

Admin Panel için Nginx Config

Eğer admin paneliniz Angular build olarak statik servis ediliyorsa, temel HTTP config aşağıdaki gibi olabilir:

server {
    listen 80;
    server_name admin.latestsoftwaredevelopers.com;

    root /var/www/html/blogfrontendadmin;
    index index.html;

    location / {
        try_files $uri $uri/ /index.html;
    }

    error_log  /var/log/nginx/admin_error.log;
    access_log /var/log/nginx/admin_access.log;
}

Bu yapı Angular gibi SPA uygulamalarında route yenileme problemini try_files $uri $uri/ /index.html; satırı ile çözer.

Nginx Config Kontrol Komutları

Yeni config ekledikten veya düzenledikten sonra mutlaka syntax testi yapılmalıdır.

sudo nginx -t
sudo systemctl reload nginx

Aktif server bloklarını kontrol etmek için:

sudo nginx -T | grep -n "server_name"

Sadece admin subdomain’in Nginx içinde tanımlı olup olmadığını görmek için:

sudo nginx -T | grep -n "admin.latestsoftwaredevelopers.com"

Eğer burada sonuç görmüyorsanız, Nginx ilgili hostu henüz tanımıyordur.

Let’s Encrypt ile SSL Kurulumu

Admin panel için HTTPS kullanmak istiyorsanız, Let’s Encrypt ile ücretsiz SSL sertifikası alabilirsiniz.

Certbot Kurulumu

sudo apt update
sudo apt install certbot python3-certbot-nginx -y

Sertifika Alma

sudo certbot --nginx -d admin.latestsoftwaredevelopers.com

İşlem sırasında e-posta adresi, kullanım koşulları ve HTTP isteklerinin HTTPS’e yönlendirilip yönlendirilmeyeceği sorulur. Burada Redirect seçmek genellikle en doğru yaklaşımdır.

SSL Sonrası Final Nginx Config

Certbot kurulumdan sonra çoğu zaman config’i otomatik olarak aşağıdaki yapıya yakın bir hale getirir:

server {
    server_name admin.latestsoftwaredevelopers.com;

    root /var/www/html/blogfrontendadmin;
    index index.html;

    location / {
        try_files $uri $uri/ /index.html;
    }

    error_log  /var/log/nginx/admin_error.log;
    access_log /var/log/nginx/admin_access.log;

    listen 443 ssl http2;
    ssl_certificate /etc/letsencrypt/live/admin.latestsoftwaredevelopers.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/admin.latestsoftwaredevelopers.com/privkey.pem;
    include /etc/letsencrypt/options-ssl-nginx.conf;
    ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem;
}

server {
    listen 80;
    server_name admin.latestsoftwaredevelopers.com;

    return 301 https://$host$request_uri;
}

Böylece HTTP istekleri otomatik olarak HTTPS’e yönlendirilir.

Kurulumu Test Etme

Yapılandırma tamamlandıktan sonra aşağıdaki komutlarla bağlantıyı test edebilirsiniz:

curl -I http://admin.latestsoftwaredevelopers.com
curl -I https://admin.latestsoftwaredevelopers.com

HTTP isteğinde aşağıdakine benzer bir yanıt görmeniz gerekir:

301 Moved Permanently
Location: https://admin.latestsoftwaredevelopers.com

SSL yenileme sistemini kontrol etmek için:

sudo certbot renew --dry-run

Güvenlik ve SEO Notları

Admin paneli genellikle arama motorlarında indexlenmemelidir. Bunun için Nginx config içine şu header eklenebilir:

add_header X-Robots-Tag "noindex, nofollow" always;

Ayrıca admin panel ile ana site config dosyalarını ayrı tutmak, hem hata ayıklamayı kolaylaştırır hem de production ortamında yapı yönetimini daha güvenli hale getirir.

Sonuç

Bu rehberde Nginx subdomain yönetimini, server_name kaynaklı yönlendirme problemlerini ve Let’s Encrypt ile SSL kurulumunu adım adım inceledik.

  • Admin panel için ayrı config dosyası oluşturduk
  • sites-available ve sites-enabled yapısını düzenledik
  • Nginx config testlerini yaptık
  • Certbot ile SSL ekledik
  • HTTP → HTTPS yönlendirmesini tamamladık

Bu yapı sayesinde admin paneliniz hem daha güvenli hem de daha stabil şekilde çalışacaktır.

Latest Software Developers - Yazılım Blog Yazarı Profil Resmi

Yazar

LatestSoftwareDevelopers

Blog where the most up-to-date software is followed. (En güncel yazılımların takip edildiği blog sitesi)

Devops ile ilgili yorumlar

Yorum Paylaş

EMail Zorunlu alanlar * *