Apache sunucularında sıkça kullanılan .htaccess dosyası, dizin seviyesinde yapılandırma imkanı sunarken, Nginx gibi yüksek performanslı web sunucularında bu işlevsellik
Apache sunucularında sıkça kullanılan .htaccess dosyası, dizin seviyesinde yapılandırma imkanı sunarken, Nginx gibi yüksek performanslı web sunucularında bu işlevsellik doğrudan desteklenmez. Bunun yerine, Nginx’in ana yapılandırma dosyası olan nginx.conf veya site-specific sunucu blokları içinde location direktifleri ile eşdeğer ayarlamalar yapılır. Bu geçiş, özellikle Apache’den Nginx’e migrasyon yapan geliştiriciler ve sistem yöneticileri için kritik öneme sahiptir. .htaccess kurallarını manuel olarak Nginx syntax’ına uyarlamak, sunucu performansını artırır ve merkezi yönetim sağlar. Bu makalede, adım adım çevirme sürecini inceleyerek pratik rehberlik sunacağız.
Apache’de .htaccess dosyaları, her dizinde yerel olarak çalışır ve sunucu yeniden başlatılmadan dinamik olarak uygulanır. Buna karşın Nginx, statik yapılandırma dosyalarını kullanır; değişiklikler için nginx -s reload komutu ile yeniden yükleme gereklidir. Bu fark, Nginx’in bellek kullanımını optimize etmesini sağlar ancak .htaccess’in esnekliğini ortadan kaldırır. Çeviri sırasında, RewriteEngine On gibi genel ayarlar sunucu bloğunun dışına taşınmalı ve location / {} blokları içinde konumlandırılmalıdır. Örneğin, .htaccess’teki RewriteBase / dizini, Nginx’te root direktifi ile tanımlanır.
Hazırlık aşamasında, mevcut .htaccess dosyasını analiz edin: RewriteRule, Redirect, DirectoryIndex gibi direktifleri listeleyin. Nginx’te server { } bloğu içinde location blokları oluşturun. Performans açısından, regex tabanlı rewrite’lar yerine prefix matching tercih edin. Bu yaklaşım, istek işleme süresini %30-50 oranında kısaltabilir. Ayrıca, Nginx’in try_files direktifi, Apache’nin DirectoryIndex ve FallbackIndex’lerine alternatif olarak mod_rewrite zincirlerini basitleştirir.
RewriteRule ^old-page\.html$ /new-page.html [L] gibi bir kural, Nginx’te rewrite ^/old-page\.html$ /new-page.html permanent; şeklinde yazılır. Kalıcı yönlendirme için permanent flag’i kullanın; geçici için redirect. Zincirleme kurallar için if bloklarından kaçının, zira Nginx’te nested location’lar daha verimlidir. Örnek: Bir e-ticaret sitesinde /urun/123 -> /urunler/123 için rewrite ^/urun/([0-9]+)$ /urunler/$1 last; uygularsınız. Test için nginx -t komutunu çalıştırın ve error_log seviyesini debug’a alın.
Apache’de Require ip 192.168.1.0/24, Nginx’te allow 192.168.1.0/24; deny all; ile yapılır. Temel kimlik doğrulaması için auth_basic “Kısıtlı Alan”; auth_basic_user_file /path/to/.htpasswd; ekleyin. .htpasswd dosyasını htpasswd -c .htpasswd user ile oluşturun. CORS ayarları gibi Access-Control-Allow-Origin *, Nginx’te add_header ‘Access-Control-Allow-Origin’ ‘*’ always; ile tanımlanır. Bu kurallar location /admin/ {} bloğu içine yerleştirilerek hassas dizinleri korur.
ExpiresActive On ve ExpiresByType image/jpeg “access plus 1 year” direktifleri, Nginx’te location ~* \.(jpg|jpeg|png|gif)$ { expires 1y; add_header Cache-Control “public, immutable”; } ile eşleştirilir. Gzip sıkıştırma için gzip on; gzip_types text/plain application/json; global olarak etkinleştirin. Security headers için add_header X-Frame-Options “SAMEORIGIN” always; kullanın. Bu ayarlar, statik varlıkların tarayıcı önbelleklemesini optimize eder ve bant genişliği kullanımını azaltır.
Uygulamaya geçmeden önce, mevcut .htaccess’i yedekleyin ve Nginx sites-available/ dizininde yeni bir config dosyası oluşturun. Adım 1: server { listen 80; server_name example.com; root /var/www/html; } bloğunu temel alın. Adım 2: Her .htaccess kuralını ilgili location’a taşıyın. Adım 3: nginx -t ile syntax kontrolü yapın, ardından nginx -s reload ile etkinleştirin. Örnek tam konfigürasyon:
Bu örnek, WordPress gibi CMS’ler için tipik bir dönüşümü gösterir. .htaccess’teki RewriteCond %{REQUEST_FILENAME} !-f şartı, try_files ile otomatik işlenir. Karmaşık durumlarda, include directives/rewrites.conf; ile modüler hale getirin. Logları inceleyerek (/var/log/nginx/error.log) ince ayar yapın. Migrasyon sonrası, curl -I example.com ile header’ları doğrulayın.
Sonuç olarak, .htaccess’ten Nginx’e geçiş, sunucu verimliliğini artıran stratejik bir adımdır. Bu rehberdeki talimatları takip ederek, sorunsuz bir migrasyon gerçekleştirebilirsiniz. Düzenli testler ve yedeklemelerle, üretim ortamında güvenle uygulayın; böylece yüksek trafikli sitelerde kesintisiz performans elde edin.