Sunucu adları | english русский 简体中文 עברית 日本語 türkçe haberler [ing] hakkında indir [ing] güvenlik tavsiyeleri [ing] dökümantasyon sss bağlantılar [ing] kitaplar [ing] destek [ing] trac wiki nginx.com | |||||||
This translation may be out of date. Check the English version for recent changes.
Sunucu adları server { listen 80; server_name example.org www.example.org; ... } server { listen 80; server_name *.example.org; ... } server { listen 80; server_name mail.*; ... } server { listen 80; server_name ~^(?<user>.+)\.example\.net$; ... } Bu adlar şu sıra ile test edilirler:
İlk eşleşme arama işlemini bitirir. Wildcard adlar
Bir wildcard ad ancak başlangıçta veya bitişte * ifadesini içerir ve nokta ile sınırlandırılır.
Düzenli ifade adlarınginx tarafından kullanılan düzenli ifadeler, Perl programlama dili (PCRE) tarafından kullanılanlar ile tam uyumludur. Bir düzenli ifade kullanmak için sunucu adı tilda (~) ile başlamalıdır: server_name ~^www\d+\.example\.net$; diğer türlü ifade gerçek ad veya düzenli ifade * içeriyorsa wildcard ad gibi algılanacaktır (ve yüksek ihtimal geçersiz bir ad olarak). “^” ve “$” çapalarını kullanmayı unutmayın. Sentaks açısından gerekli olmasalar da mantık açısından gereklidir. Ayrıca alan adında bulunan noktalarda da \ önceli ile kullanılmalıdır. “{” ve “}” kullanan bir düzenli ifade tırnak arasına alınmalıdır: server_name "~^(?<name>\w\d{1,3}+)\.example\.net$"; diğer türlü, nginx şu şekilde bir hata verecektir: directive "server_name" is not terminated by ";" in ... Bir düzenli ifade adı değişken olarak sonraki aşamalarda kullanılabilir: server { server_name ~^(www\.)?(?<domain>.+)$; location / { root /sites/$domain; } } PCRE kütüphanesi ile ad yakalama işlemi de şu şekildedir: Eğer nginx aşağıdaki hatayı verirse: pcre_compile() failed: unrecognized character after (?< in ...
bu PCRE kütüphanesini eski olduğu ve server { server_name ~^(www\.)?(.+)$; location / { root /sites/$2; } } Ancak, dijital referanslar kolaylıkla üstüne yazılabilir olduğundan, bu şekilde kullanım basit durumlar için sınırlandırılmalıdır (yukarıdaki gibi). Diğer muhtelif adlar
Eğer server bloğu içerisinde bir Eğer varsayılan dışındaki bir server bloğuna gelen ve header bilgisinde “Host” datası yer almayan bir talebi işlemek isterseniz boş bir ad kullanmak zorundasınız: server { listen 80; server_name example.org www.example.org ""; ... }
Eğer bir istemci ad yerine IP adresini kullanarak bir talepte bulunursa, header içerisinde bulunan “Host” datası IP bilgisini içerecektir ve bu IP adresini, sunucu adı olarak kullanarak talebi işleyebilirsiniz: server { listen 80; server_name example.org www.example.org "" 192.168.1.1 ; ... }
Bir catch-all (tümünü-yakala) sunucuda “_” şeklinde garip bir ifade ile karşılaşabilirsiniz: server { listen 80 default_server; server_name _; return 444; } Bu ad ile ilgili özel bir durum söz konusu değil, sadece gerçek bir ad ile kesişmeyen sayısız geçersiz alan adlarından biridir. Ayrıca “--”, “!@#” ve benzeri ifadeler de kullanabilirsiniz.
nginx, 0.6.25 versiyonuna kadar, bir catch-all adı olmak için hatalı bir şekilde yorumlanan “*” özel adını destekliyordu.
Fakat bu bir catch-all veya wildcard sunucu adı olarak fonksiyonel değil. Bunun yerine, server { listen 80; listen 8080 default_server; server_name example.net; ... } server { listen 80 default_server; listen 8080; server_name example.org; ... }
Optimizasyon
Gerçek ve wildcard adlar çırpılarda (hash) depolanır. Çırpılar listen portlarına bağlıdırlar ve her bir listen port 3 farklı çırpıya sahip olabilir: gerçek ad çırpısı, * ile başlayan bir wildcard adı çırpısı ve * ile biten bir wildcard adı çırpısı. Çırpıların boyutu yapılandırma aşamasında optimize edilir ve böylece bir ad en az önbellek kayıpları ile bulundurulur. İlk olarak gerçek ad çırpısı aranır. Gerçek ad çırpısı kullanan bir ad bulunmaz ise, * ile başlayan wildcard ad çırpısı aranır. Bu da bulunmaz ise, * ile biten wildcard ad çırpısı aranır. Adların alanadı parçaları ile aranması nedeniyle wildcard ad çırpıları araması, gerçek ad çırpı aramasına oranla daha yavaştır. Not: Özel
Bu nedenlerden dolayı, imkanlar el veriyorsa gerçek adları kullanmak en iyisidir. Örneğin, bir sunucunun en sık talep edilen adları server { listen 80; server_name example.org www.example.org *.example.org; ... } bu kullanım aşağıdaki basit kullanımdan daha etkili olacaktır: server { listen 80; server_name .example.org; ... }
Eğer çok miktarda veya olağandışı şekilde uzun sunucu adları tanımladıysanız, http düzeyinde could not build the server_names_hash, you should increase server_names_hash_bucket_size: 32 Bu durumda yönerge değerini aşağıdaki gibi belirlemelisiniz: http { server_names_hash_bucket_size 64; ... Eğer çok fazla sunu adı belirlemiş iseniz şu şekilde bir hata alacaksınız: could not build the server_names_hash, you should increase either server_names_hash_max_size: 512 or server_names_hash_bucket_size: 32
Bu durumda ilk olarak
Eğer bir sunucu sadece bir listen port için ise, nginx sunucu adlarını test etmeyecek ve listen port için çırpılar yaratmayacaktır. Fakat bu durumun bir istisnası var; eğer Uygunluk
|