Temel kimlik doğrulama, bir test sitesini, yönetim klasörünü veya özel bir aracı giriş penceresinin arkasına gizlemenin en hızlı yoludur. Bu rehber, htpasswd ile oluşturulan bir parola dosyasıyla VPS Linux Infrawire sunucunuzda hem Apache'yi hem Nginx'i kapsar.
📋 Ön koşullar
- Root SSH erişimli bir Linux VPS (Ubuntu 24.04 / Debian 12 veya AlmaLinux 9 / Rocky 9). IP adresi ve root parolası müşteri alanınızdadır.
- Zaten bir site sunan Apache veya Nginx.
example.comiçin geçerli bir HTTPS sertifikası. Temel kimlik doğrulama parolayı Base64 ile kodlanmış gönderir; bu şifreleme değildir: düz HTTP üzerinden asla kullanmayın.
📦 htpasswd aracını kurma
htpasswd komutu, Nginx kullansanız bile küçük bir paketten gelir:
Bash# Debian / Ubuntu sudo apt install -y apache2-utils # AlmaLinux / Rocky sudo dnf install -y httpd-tools
🔐 Parola dosyasını oluşturma
Dosyayı kimsenin indirememesi için herhangi bir web kök dizininin dışında tutun:
Bashsudo mkdir -p /etc/htpasswd sudo htpasswd -c -B /etc/htpasswd/example.com USER
-B bcrypt kullanır. -c dosyayı oluşturur: yalnızca ilk kullanıcı için kullanın, çünkü mevcut dosyada her şeyin üzerine yazar (yıkıcı). Diğer kullanıcıları -c olmadan ekleyin:
Bashsudo htpasswd -B /etc/htpasswd/example.com USER2
Web sunucusunun dosyayı okuyabilmesi gerekir:
Bash# Debian / Ubuntu (Apache ve Nginx www-data olarak çalışır) sudo chown root:www-data /etc/htpasswd/example.com # AlmaLinux / Rocky: apache (Apache) veya nginx (Nginx) grubu sudo chmod 640 /etc/htpasswd/example.com
Bir kullanıcıyı silmek için: sudo htpasswd -D /etc/htpasswd/example.com USER2.
🪶 Seçenek A: .htaccess ile Apache
Korumak istediğiniz klasöre bir .htaccess dosyası koyun, örneğin /var/www/example.com/private/.htaccess:
ApacheAuthType Basic AuthName "Kısıtlı alan" AuthUserFile /etc/htpasswd/example.com Require valid-user
Sanal sunucu izin vermedikçe .htaccess dosyaları yok sayılır. <Directory> bloğunuzda (Debian/Ubuntu'da /etc/apache2/sites-available/, AlmaLinux/Rocky'da /etc/httpd/conf.d/ içindeki dosya):
Apache<Directory /var/www/example.com> AllowOverride AuthConfig </Directory>
Sonra test edip yeniden yükleyin:
Bashsudo apachectl configtest sudo systemctl reload apache2 # Debian / Ubuntu sudo systemctl reload httpd # AlmaLinux / Rocky
.htaccess kullanmak istemezseniz dört kimlik doğrulama satırını doğrudan bir <Directory> veya <Location> bloğuna koyun: daha hızlı ve daha güvenlidir.
🚀 Seçenek B: auth_basic ile Nginx
Nginx .htaccess okumaz. Yönergeleri server bloğuna ekleyin:
Nginx1server { 2 listen 443 ssl; 3 server_name example.com; 4 # ssl_certificate satırları burada 5 6 location /private/ { 7 auth_basic "Kısıtlı alan"; 8 auth_basic_user_file /etc/htpasswd/example.com; 9 } 10}
Tüm siteyi korumak için bu iki satırı server bloğuna koyun. Korunan sitede bir yolu herkese açık bırakmak için (örneğin bir webhook), kendi location bloğuna auth_basic off; ekleyin. Sonra:
Bashsudo nginx -t && sudo systemctl reload nginx
✅ Test
Kimlik bilgisi olmadan 401, kimlik bilgisiyle 200 almalısınız:
Bashcurl -I https://example.com/private/ curl -I -u USER https://example.com/private/
Beklenen ilk yanıt:
HTTP/1.1 401 Unauthorized
WWW-Authenticate: Basic realm="Kısıtlı alan"
-u USER tek başına verildiğinde curl parolayı sorar; böylece parola kabuk geçmişinizde kalmaz.
🛠️ Sorun giderme
Apache'de giriş penceresi çıkmıyor. AllowOverride hâlâ None ya da .htaccess yanlış klasörde. <Directory> bloğunu yeniden kontrol edin ve yeniden yükleyin.
Doğru parolayla bile hep 401. Web sunucusu dosyayı okuyamıyor (chown ve chmod değerlerini kontrol edin) ya da AuthUserFile veya auth_basic_user_file yolu yanlış. Hata günlüğü bunu söyler: /var/log/apache2/error.log, /var/log/httpd/error_log veya /var/log/nginx/error.log.
.htaccess ekledikten sonra 500 hatası. Bir yönerge geçersiz ya da gerekli modül eksik. sudo apachectl configtest çalıştırıp mesajı okuyun.
HTTP üzerinden parola istemi. Kimlik bilgileri asla açık gitmesin diye önce HTTP'yi HTTPS'e yönlendirin.
🎉 Özel klasörünüz artık giriş istiyor; özetlenmiş parolalar erişilemez bir yerde saklanıyor ve yalnızca HTTPS üzerinden sunuluyor.