Arama Yap Mesaj Gönder
Biz Sizi Arayalım
+90
X

Lütfen Ülke (Bölge) Seçiniz

Türkiye (Türkçe)Türkiye (Türkçe) Almanya (German)Almanya (German) Worldwide (English)Worldwide (English)
X

Lütfen Para Birimi Seçiniz

Türk Lirası $ US Dollar Euro
X

Lütfen Ülke (Bölge) Seçiniz

Türkiye (Türkçe)Türkiye (Türkçe) Almanya (German)Almanya (German) Worldwide (English)Worldwide (English)
X

Lütfen Para Birimi Seçiniz

Türk Lirası $ US Dollar Euro

Bize Ulaşın

Konum Halkalı merkez mahallesi fatih cd ozgur apt no 46 , Küçükçekmece , İstanbul , 34303 , TR
Toplu domain otomasyonu

Kontrol panelsiz Linux VPS'e Nginx veya Apache ile yüzlerce domain ekleyin

Panel olmadığında domain eklemek; document root oluşturma, web sunucusu sanal host dosyası üretme, yapılandırma testi, DNS ve TLS işlemlerinin tamamını sizin yönetmeniz anlamına gelir. Bu rehber Debian ve RHEL ailesini tek betikte ayırır.

Nginx Apache 2.4 Ubuntu Debian AlmaLinux Rocky Linux
root@eka-server
WEB="nginx"
mkdir -p /var/www/ornek.com/public_html
nginx -t && systemctl reload nginx
apachectl configtest && systemctl reload httpd
2Nginx ve Apache modu
4Yaygın Linux dağıtımı
VHostDomain başına yapılandırma
TLSDNS sonrası sertifika
01
Mimari kararı

Yüzlerce domaini eklemeden önce doğru barındırma modelini seçin

Toplu otomasyon yanlış mimariyi hızlandırmamalıdır. Müşteri izolasyonu, kaynak limiti, uygulama kökü, mail ve DNS sahipliği kararlarını önce verin.

01

Nginx server block

Statik içerik, reverse proxy ve PHP-FPM yapılarında düşük ek yük ve net server_name yönetimi sunar.

02

Apache VirtualHost

.htaccess uyumluluğu ve paylaşımlı hosting benzeri yapı gereken projelerde uygundur.

03

Domain başına ayrı kök

Her domaini /var/www/domain/public_html altında tutmak yedekleme, izin ve deployment süreçlerini sadeleştirir.

04

Dinamik mass virtual hosting

Binlerce benzer domain için dinamik vhost düşünülebilir; ancak müşteri izolasyonu ve farklı ayarlar varsa dosya başına vhost daha güvenlidir.

02
Ön hazırlık

Toplu işlem başlamadan önce tamamlanması gerekenler

Root veya sudo SSH erişimi01
Kurulu ve çalışan Nginx ya da Apache 2.402
Doğru firewall kurallarıyla açık 80 ve 443 portları03
Domain listesinin sunucu IP'sine yönlendirilebilir olması04
Dosya sahipliği için kullanılacak web kullanıcısının belirlenmesi05
Yapılandırma dizinlerinin ve /var/www alanının yedeği06
03
Uygulama sırası

Kesintisiz ve geri alınabilir toplu ekleme akışı

01

Web sunucusunu ve dağıtımı tespit edin

Debian ailesinde sites-available, RHEL ailesinde conf.d yolu yaygındır; betik her ikisini algılar.

cat /etc/os-release
nginx -v 2>&1 || httpd -v 2>&1 || apache2 -v
02

Domain listesini doğrulayın

Yalnız Punycode/ASCII domain ve her satırda tek kayıt kullanın.

awk 'NF{print tolower($0)}' /root/domainler.txt | sort -u > /root/domainler-temiz.txt
03

WEB değişkenini seçin

Kurulu stack'e göre nginx veya apache değerini belirleyin.

WEB="nginx"
04

İki domainle config testi yapın

Dosya yollarını, kullanıcı izinlerini ve varsayılan vhost davranışını kontrol edin.

head -n 2 /root/domainler-temiz.txt > /root/domainler-test.txt
05

Toplu vhost betiğini çalıştırın

Betik klasör ve vhost üretir; sonunda config test başarılıysa tek reload yapar.

chmod 700 /root/linux-toplu-domain.sh
/root/linux-toplu-domain.sh
06

DNS ve TLS'yi ayrı aşamada tamamlayın

Önce A/AAAA çözümlemesini doğrulayın; daha sonra Certbot veya tercih edilen ACME istemcisini kontrollü partilerle çalıştırın.

dig +short ornek.com A
curl -I http://ornek.com
04
SSH, CLI ve API

Kopyalanabilir komutlar ve tam otomasyon betiği

01

Nginx/Apache ortak toplu betik

Dağıtım yollarını algılar, document root ve vhost üretir, yapılandırmayı test edip reload eder.

#!/usr/bin/env bash
set -Eeuo pipefail

WEB="nginx"
DOMAIN_DOSYASI="/root/domainler.txt"
WEB_KOKU="/var/www"
SONUC="/root/linux-domain-sonuclari.csv"
HATA="/root/linux-domain-hatalari.log"

[[ "$EUID" -eq 0 ]] || { echo "root gerekli"; exit 1; }
[[ -f "$DOMAIN_DOSYASI" ]] || { echo "domain listesi bulunamadi"; exit 1; }

if [[ -d /etc/nginx/sites-available ]]; then
    NGINX_DIZIN="/etc/nginx/sites-available"
    NGINX_ETKIN="/etc/nginx/sites-enabled"
else
    NGINX_DIZIN="/etc/nginx/conf.d"
    NGINX_ETKIN=""
fi

if [[ -d /etc/apache2/sites-available ]]; then
    APACHE_DIZIN="/etc/apache2/sites-available"
    APACHE_LOG="/var/log/apache2"
    APACHE_SERVIS="apache2"
else
    APACHE_DIZIN="/etc/httpd/conf.d"
    APACHE_LOG="/var/log/httpd"
    APACHE_SERVIS="httpd"
fi

if id -u www-data >/dev/null 2>&1; then
    WEB_KULLANICI="www-data"
elif id -u nginx >/dev/null 2>&1; then
    WEB_KULLANICI="nginx"
elif id -u apache >/dev/null 2>&1; then
    WEB_KULLANICI="apache"
else
    WEB_KULLANICI="root"
fi

printf '"domain","web","durum","document_root"\n' > "$SONUC"
: > "$HATA"
chmod 600 "$SONUC" "$HATA"

while IFS= read -r SATIR || [[ -n "$SATIR" ]]; do
    DOMAIN="$(printf '%s' "$SATIR" | tr -d '\r' | tr '[:upper:]' '[:lower:]' | sed -E 's#^[[:space:]]+##;s#[[:space:]]+$##;s#^https?://##;s#^www\.##;s#/.*$##')"
    [[ -z "$DOMAIN" ]] && continue
    [[ "$DOMAIN" == \#* ]] && continue

    if [[ ! "$DOMAIN" =~ ^[a-z0-9][a-z0-9.-]*\.[a-z]{2,63}$ ]]; then
        printf '"%s","%s","gecersiz",""\n' "$DOMAIN" "$WEB" >> "$SONUC"
        continue
    fi

    KOK="${WEB_KOKU}/${DOMAIN}/public_html"
    mkdir -p "$KOK"
    printf '<!doctype html><html lang="tr"><meta charset="utf-8"><title>%s</title><h1>%s hazır</h1></html>\n' "$DOMAIN" "$DOMAIN" > "${KOK}/index.html"
    chown -R "$WEB_KULLANICI:$WEB_KULLANICI" "${WEB_KOKU}/${DOMAIN}"
    chmod -R u=rwX,g=rX,o=rX "${WEB_KOKU}/${DOMAIN}"

    if [[ "$WEB" == "nginx" ]]; then
        DOSYA="${NGINX_DIZIN}/${DOMAIN}.conf"
        cat > "$DOSYA" <<EOF
server {
    listen 80;
    listen [::]:80;
    server_name ${DOMAIN} www.${DOMAIN};
    root ${KOK};
    index index.html index.php;
    access_log /var/log/nginx/${DOMAIN}.access.log;
    error_log /var/log/nginx/${DOMAIN}.error.log;
    location / {
        try_files \$uri \$uri/ /index.php?\$query_string;
    }
}
EOF
        if [[ -n "$NGINX_ETKIN" ]]; then
            ln -sfn "$DOSYA" "${NGINX_ETKIN}/${DOMAIN}.conf"
        fi
    else
        DOSYA="${APACHE_DIZIN}/${DOMAIN}.conf"
        cat > "$DOSYA" <<EOF
<VirtualHost *:80>
    ServerName ${DOMAIN}
    ServerAlias www.${DOMAIN}
    DocumentRoot "${KOK}"
    ErrorLog "${APACHE_LOG}/${DOMAIN}.error.log"
    CustomLog "${APACHE_LOG}/${DOMAIN}.access.log" combined
    <Directory "${KOK}">
        Options FollowSymLinks
        AllowOverride All
        Require all granted
    </Directory>
</VirtualHost>
EOF
        if command -v a2ensite >/dev/null 2>&1; then
            a2ensite "${DOMAIN}.conf" >/dev/null
        fi
    fi

    printf '"%s","%s","hazir","%s"\n' "$DOMAIN" "$WEB" "$KOK" >> "$SONUC"
done < "$DOMAIN_DOSYASI"

if [[ "$WEB" == "nginx" ]]; then
    nginx -t
    systemctl reload nginx
else
    apachectl configtest
    systemctl reload "$APACHE_SERVIS"
fi

echo "Tamamlandi: $SONUC"
echo "Hatalar: $HATA"
02

Nginx tek domain server block

server_name ve root alanlarının domainle eşleştiğini doğrulayın.

server {
    listen 80;
    server_name ornek.com www.ornek.com;
    root /var/www/ornek.com/public_html;
    index index.html index.php;
    location / {
        try_files $uri $uri/ /index.php?$query_string;
    }
}
03

Apache tek domain VirtualHost

DocumentRoot dizinine Require all granted verin; AllowOverride ihtiyacını uygulamaya göre seçin.

<VirtualHost *:80>
    ServerName ornek.com
    ServerAlias www.ornek.com
    DocumentRoot "/var/www/ornek.com/public_html"
    <Directory "/var/www/ornek.com/public_html">
        AllowOverride All
        Require all granted
    </Directory>
</VirtualHost>
04

Toplu HTTP doğrulama

Domain listesindeki durum kodlarını paralelliği sınırlayarak ölçün.

xargs -a /root/domainler.txt -P 10 -I{} sh -c 'printf "%s " "{}"; curl -LksS -o /dev/null -w "%{http_code}\n" --max-time 10 "http://{}"'
05
İşletim sistemi ve stack

Dağıtıma ve web sunucusuna göre değişen noktalar

Ubuntu / Debian

Nginx ve Apache için sites-available/sites-enabled düzeni yaygındır. Web kullanıcısı çoğunlukla www-data'dır.

  • nginx -t
  • apache2ctl configtest
  • systemctl reload nginx || systemctl reload apache2

AlmaLinux / Rocky / RHEL

Nginx ve httpd genellikle conf.d kullanır. SELinux bağlamı ve firewalld kuralları ayrıca doğrulanmalıdır.

  • nginx -t || httpd -t
  • restorecon -Rv /var/www
  • firewall-cmd --list-services

CloudLinux panelsiz kullanım

LVE ve CageFS çoğunlukla panel entegrasyonuyla anlam kazanır. Panelsiz stack'te standart systemd, PHP-FPM pool ve izin modelini açıkça tasarlayın.

  • cat /etc/cloudlinux-release 2>/dev/null || true
  • systemctl list-units 'php*fpm*'
  • find /var/www -maxdepth 2 -type d -printf '%u:%g %p\n' | head
06
Hata çözümü

Toplu domain eklerken karşılaşılan yaygın hatalar

5 kayıt
Hata mesajı

nginx: configuration file test failed

Aynı server_name, eksik noktalı virgül, yanlış include veya izin hatası olabilir.

Hata mesajı

AH00526 Syntax error

VirtualHost dosyasında hatalı directive, tırnak veya modül bağımlılığı bulunur.

Hata mesajı

403 Forbidden

Document root sahipliği, execute dizin izni, SELinux bağlamı veya Apache Directory kuralı hatalı olabilir.

Hata mesajı

Default server page opens

Host adı doğru vhost ile eşleşmiyor veya DNS başka IP'ye gidiyor olabilir.

Hata mesajı

Certbot authorization failed

DNS yayılmamış, port 80 kapalı, proxy açık veya challenge yolu başka uygulamaya gidiyor olabilir.

Aramayla eşleşen hata bulunamadı.

Güvenlik ve operasyon riskleri

Bunları yapmadan üretime geçmeyin

  • İlk çalıştırmayı 2 test domainiyle yapın; tüm domain listesini doğrudan üretime aktarmayın.
  • Domain listesini HTTPS, www ve yol içermeyen yalın alan adlarıyla hazırlayın.
  • İşlem öncesi panel yapılandırması, DNS bölgeleri ve web sunucusu dosyalarının yedeğini alın.
  • API anahtarı, root parolası ve oluşturulan kullanıcı parolalarını web kökünde saklamayın.
  • DNS yayılımı tamamlanmadan toplu SSL isteği göndermek hız sınırına ve başarısız doğrulamaya yol açabilir.
Doğrulama listesi

İşlemin başarılı sayılması için

  • Domainler panel veya web sunucusu listesinde görünüyor.
  • Her domain doğru document root klasörüne bağlanıyor.
  • HTTP isteği beklenen durum kodunu döndürüyor.
  • DNS A/AAAA kayıtları doğru sunucu IP adresini gösteriyor.
  • Başarısız kayıtlar ayrı log dosyasına yazılıyor ve tekrar çalıştırılabiliyor.
  • SSL yalnızca DNS doğrulaması başarılı domainlerde etkinleştiriliyor.
07
Sık sorulan sorular

Panelsiz Linux VPS toplu domain yönetimi hakkında yanıtlar

Nginx mi Apache mi seçmeliyim?

Uygulama ihtiyacı belirleyicidir. .htaccess bağımlılığı varsa Apache kolaydır; reverse proxy ve merkezi yapılandırma için Nginx uygundur.

Yüzlerce ayrı vhost performansı düşürür mü?

Modern sunucularda yüzlerce vhost tek başına olağan dışı değildir. Sertifika sayısı, log dosyaları, worker limitleri, config reload süresi ve gerçek trafik ölçülmelidir.

Her domain için ayrı PHP-FPM pool gerekli mi?

Aynı güven sınırındaki düşük trafikli siteler pool paylaşabilir. Farklı müşteriler, farklı kullanıcılar veya kaynak limitleri için ayrı pool daha güvenlidir.

Wildcard vhost kullanılabilir mi?

Benzer yapıdaki domainlerde kullanılabilir; ancak her domainin farklı kökü, sertifikası veya uygulaması varsa açık server block/VirtualHost daha yönetilebilirdir.

SSL'yi betiğe dahil etmek doğru mu?

Genellikle ayrı aşama daha güvenlidir. DNS yayılımı ve HTTP erişimi doğrulanmadan ACME isteği göndermeyin.

SEO açısından tüm domainlerde aynı içerik kullanılmalı mı?

Aynı içeriği yüzlerce domainde çoğaltmak yerine ana domain, canonical ve gerektiğinde 301 yönlendirme stratejisi kullanın.

08
Konu kümesi

Diğer toplu domain ekleme rehberleri

09
Birincil kaynaklar

Resmî panel, web sunucusu ve Google belgeleri

EKA YAZILIM VE BİLİŞİM SİSTEMLERİ

Yüzlerce domainlik geçişi veri kaybı ve kesinti oluşturmadan planlayalım

Panel seçimi, DNS, SSL, web sunucusu, güvenlik, yedekleme ve doğrulama adımlarını sunucunuzun gerçek yapısına göre uyguluyoruz.

Top