- Konu sahibi
- #1
Nginx’te
Aşağıdaki iki yapılandırma farklı dosya yolları üretir:
İlk blokta
İkinci blokta
Yani
Bu fark özellikle yüklenen dosyalar, statik varlıklar ve başka bir dizinde tutulan doğrulama dosyalarında önemlidir.
Aşağıdaki varsayımda ana site
Her iki tablo satırında location /media/ ve istek /media/logo.svg varsayılır:
Bu yollar yalnız kendi yalıtılmış laboratuvarınız için örnektir. Önceden var olan site dosyalarının üzerine yazmayın. Örnek yapılandırma, iki dizinin önceden hazırlanmasını; site altında index.html, assets altında logo.svg bulunmasını varsayar. Nginx kullanıcısı dosyaları okuyabilmeli ve üst dizinlerden geçebilmelidir. Geniş izin vermek yerine gerçek sahiplik ve gerekli izinleri kontrol edin.
example.com temsilidir; komutları internetteki bu alan adına göndermeyin. Kendi test sunucunuza çözümlenen yetkili deneme adını server_name ve curl adreslerinde tutarlı kullanın.
Yapılandırma dosyanızı etkin Nginx yapılandırmasına ekledikten sonra şu sırayı izleyin:
Site dosyalarının tamamı tek bir kök dizinin altındaysa
URL’deki bir bölümü bağımsız bir dizine yönlendirmek istiyorsanız
Düzenli ifade kullanan
root, istenen URL yolunu belirtilen dizinin sonuna ekler. alias ise location içinde eşleşen URL bölümünü belirtilen dosya sistemi yolu ile değiştirir. Bu nedenle normal site kökü için genellikle root, belirli bir URL yolunu başka bir fiziksel dizine bağlamak için ise alias kullanılır.Nasıl çalışırlar?
Aşağıdaki iki yapılandırma farklı dosya yolları üretir:
Kod:
location / {
root /srv/www/site;
}
location /assets/ {
alias /srv/www/assets/;
}
İlk blokta
/index.html isteği şu dosyaya çevrilir:/srv/www/site/index.htmlİkinci blokta
/assets/logo.svg isteği şu dosyaya çevrilir:/srv/www/assets/logo.svgYani
root URL yolunu kök dizinin altına ekler. alias ise /assets/ bölümünü kaldırıp yerine /srv/www/assets/ yolunu koyar.Bu fark özellikle yüklenen dosyalar, statik varlıklar ve başka bir dizinde tutulan doğrulama dosyalarında önemlidir.
alias kullanırken URL’deki location önekinin ve hedef dizinin sondaki eğik çizgilerini tutarlı yazmak hataları azaltır.Yalıtılmış deneme yapılandırması
Aşağıdaki varsayımda ana site
/srv/www/site, görseller ise /srv/www/assets altında bulunur:
Kod:
server {
listen 80;
server_name example.com;
location / {
root /srv/www/site;
index index.html;
}
location /assets/ {
alias /srv/www/assets/;
}
}
Her iki tablo satırında location /media/ ve istek /media/logo.svg varsayılır:
| Yapılandırma | Oluşan dosya yolu | Uygun kullanım |
|---|---|---|
root /srv/www/site; | /srv/www/site/media/logo.svg | Site içindeki normal yollar |
alias /srv/www/assets/; | /srv/www/assets/logo.svg | URL yolunu ayrı dizine bağlamak |
Bu yollar yalnız kendi yalıtılmış laboratuvarınız için örnektir. Önceden var olan site dosyalarının üzerine yazmayın. Örnek yapılandırma, iki dizinin önceden hazırlanmasını; site altında index.html, assets altında logo.svg bulunmasını varsayar. Nginx kullanıcısı dosyaları okuyabilmeli ve üst dizinlerden geçebilmelidir. Geniş izin vermek yerine gerçek sahiplik ve gerekli izinleri kontrol edin.
example.com temsilidir; komutları internetteki bu alan adına göndermeyin. Kendi test sunucunuza çözümlenen yetkili deneme adını server_name ve curl adreslerinde tutarlı kullanın.
Yapılandırma dosyanızı etkin Nginx yapılandırmasına ekledikten sonra şu sırayı izleyin:
- Yapılandırma sözdizimini denetleyin:
sudo nginx -t. Komut başarılı dönmüyorsa yeniden yükleme yapmayın; hata mesajındaki dosya ve satır numarasını düzeltin. - Yapılandırmayı yeniden yükleyin:
sudo systemctl reload nginx. Bu komut sisteminizde Nginx’in systemd hizmeti olarak çalıştığını varsayar. - İki yolu ayrı ayrı test edin:
curl -i http://example.com/vecurl -i http://example.com/assets/logo.svg. Dosyalar doğru yerdeyse başarılı HTTP yanıtı ve ilgili içerik görülmelidir. - Varlık isteği başarısızsa önce gerçek dosya yolunu kontrol edin:
/assets/logo.svgisteği için dosya/srv/www/assets/logo.svgolmalıdır. Dosyayı/srv/www/assets/assets/logo.svgaltında aramak,rootmantığını yanlışlıklaaliasiçin uyguladığınızı gösterir.
Hangi durumda hangisini seçmeli?
Site dosyalarının tamamı tek bir kök dizinin altındaysa
root daha anlaşılır seçimdir. Örneğin /blog/post.html isteğinin /srv/www/site/blog/post.html dosyasına gitmesini istiyorsanız root /srv/www/site; kullanın.URL’deki bir bölümü bağımsız bir dizine yönlendirmek istiyorsanız
alias kullanın. Örneğin /downloads/ adresini /srv/files/ dizinine bağlamak için location /downloads/ { alias /srv/files/; } yazılabilir.Sık yapılan hatalar
Alias hedefinde sondaki eğik çizgiyi unutmak
location /assets/ ile alias /srv/www/assets/; biçimindeki eşleşme en açık kullanımdır. Eğik çizgileri rastgele değiştirmek, özellikle alt yollar ve yeniden yazma kuralları devreye girdiğinde beklenmeyen dosya yollarına yol açabilir.Alias yerine root kullanmak
location /assets/ { root /srv/www/assets; } yazılırsa Nginx, /assets/logo.svg isteğini genellikle /srv/www/assets/assets/logo.svg olarak arar. Hedefte fazladan assets oluşmasını istemiyorsanız alias kullanın veya root dizinini buna göre belirleyin.Regex location içinde alias eşleşmesini varsaymak
Düzenli ifade kullanan
location bloklarında hangi URL bölümünün hedef yola taşındığı açık olmayabilir; alias tam dosya yolunu tanımlar; yolun regex yakalamalarını kullanması genellikle gerekir. Basit bir dizin eşlemesi için önce önek tabanlı location /assets/ kullanın. Daha karmaşık bir regex gerekli değilse yalnızca kısa olduğu için tercih etmeyin.