comparison xml/tr/docs/http/server_names.xml @ 0:61e04fc01027

Initial import of the nginx.org website.
author Ruslan Ermilov <ru@nginx.com>
date Thu, 11 Aug 2011 12:19:13 +0000
parents
children 9d544687d02c
comparison
equal deleted inserted replaced
-1:000000000000 0:61e04fc01027
1 <!DOCTYPE digest SYSTEM "../../../../dtd/article.dtd">
2
3 <article title="Sunucu adları"
4 link="/tr/docs/http/server_names.html"
5 lang="tr"
6 author="Igor Sysoev"
7 translator="Altan Tanrıverdi">
8
9 <section>
10
11 <para>
12 Sunucu adları <dirname>server_name</dirname> yönergesi kullanılarak tanımlanırlar ve gelen bir talep için hangi server bloğunun kullanılacağını belirlerler. Ayrıca bakınız &ldquo;<a href="/tr/docs/http/request_processing.xml" />&rdquo;. Gerçek, wildcard veya düzenli ifadeler şeklinde tanımlanabilirler.
13
14 <programlisting>
15 server {
16 listen 80;
17 server_name nginx.org www.nginx.org;
18 ...
19 }
20
21 server {
22 listen 80;
23 server_name *.nginx.org;
24 ...
25 }
26
27 server {
28 listen 80;
29 server_name mail.*;
30 ...
31 }
32
33 server {
34 listen 80;
35 server_name ~^(?&lt;user&gt;.+)\.nginx\.net$;
36 ...
37 }
38 </programlisting>
39
40 Bu adlar şu sıra ile test edilirler:
41
42 <orderedlist>
43
44 <item>
45 gerçek adlar;
46 </item>
47
48 <item>
49 * ile başlayan wildcard adlar: <url>*.nginx.org</url>;
50 </item>
51
52 <item>
53 * ile biten wildcard adlar: <url>mail.*</url>;
54 </item>
55
56 <item>
57 ve düzenli ifadeler (regular expressions).
58 </item>
59
60 </orderedlist>
61 İlk eşleşme arama işlemini bitirir.
62 </para>
63
64 </section>
65
66
67 <section name="wildcard_names"
68 title="Wildcard adlar">
69
70 <para>
71 Bir wildcard ad ancak başlangıçta veya bitişte * ifadesini içerir ve nokta ile sınırlandırılır. <dirname>www.*.nginx.org</dirname> ve <dirname>w*.nginx.org</dirname> adları geçersizdir. Ancak bu adlar düzenli ifadeler ile geçerli hale getirilebilir, örneğin, <dirname>~^www\..+\.nginx\.org$</dirname> ve <dirname>~^w.*\.nginx\.org$</dirname>. Buradaki * bir çok eşleşmeyi tanımlayabilir. <dirname>*.nginx.org</dirname> ifadesi <url>www.nginx.org</url> ve <url>www.sub.nginx.org</url> adlarına karşılık gelebilir.
72 </para>
73
74 <para>
75 <dirname>.nginx.org</dirname> şeklindeki bir wildcard <dirname>nginx.org</dirname> gerçek adı ile <dirname>*.nginx.org</dirname> wildcard adına karşılık gelir.
76 </para>
77
78 </section>
79
80
81 <section name="regex_names"
82 title="Düzenli ifade adları">
83
84 <para>
85 nginx tarafından kullanılan düzenli ifadeler, Perl programlama dili (PCRE) tarafından kullanılanlar ile tam uyumludur.
86 Bir düzenli ifade kullanmak için sunucu adı tilda (~) ile başlamalıdır:
87
88 <programlisting>
89 server_name ~^www\d+\.nginx\.net$;
90 </programlisting>
91
92 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).
93 &ldquo;^&rdquo; ve &ldquo;$&rdquo; çapalarını kullanmayı unutmayın.
94 Sentaks açısından gerekli olmasalar da mantık açısından gereklidir.
95 Ayrıca alan adında bulunan noktalarda da \ önceli ile kullanılmalıdır.
96 &ldquo;{&rdquo; ve &ldquo;}&rdquo; kullanan bir düzenli ifade tırnak arasına alınmalıdır:
97
98 <programlisting>
99 server_name "~^(?&lt;name&gt;\w\d<b>{</b>1,3<b>}</b>+)\.nginx\.net$";
100 </programlisting>
101
102 diğer türlü, nginx şu şekilde bir hata verecektir:
103
104 <programlisting>
105 directive "server_name" is not terminated by ";" in ...
106 </programlisting>
107
108 Bir düzenli ifade adı değişken olarak sonraki aşamalarda kullanılabilir:
109
110 <programlisting>
111 server {
112 server_name ~^(www\.)?(<b>?&lt;domain&gt;</b>.+)$;
113
114 location / {
115 root /sites/<b>$domain</b>;
116 }
117 }
118 </programlisting>
119
120 PCRE kütüphanesi ile ad yakalama işlemi de şu şekildedir:
121
122 <table note="yes">
123
124 <tr>
125 <td><code>?&lt;<i>name</i>&gt;</code></td>
126 <td>Perl 5.10 uyumlu sentaks, PCRE-7.0 ile gelmiştir.</td>
127 </tr>
128
129 <tr>
130 <td><code>?'<i>name</i>'</code></td>
131 <td>Perl 5.10 uyumlu sentaks, PCRE-7.0 ile gelmiştir.</td>
132 </tr>
133
134 <tr>
135 <td><code>?P&lt;<i>name</i>&gt;</code></td>
136 <td>Python uyumlu sentaks, PCRE-4.0 ile gelmiştir.</td>
137 </tr>
138
139 </table>
140
141 Eğer nginx aşağıdaki hatayı verirse:
142
143 <programlisting>
144 pcre_compile() failed: unrecognized character after (?&lt; in ...
145 </programlisting>
146
147 bu PCRE kütüphanesini eski olduğu ve <dirname>?P&lt;<i>name</i>&gt;</dirname> şeklinde kullanmanız gerektiği anlamına gelir.
148 Yakalama ayrıca dijital formda da olabilir:
149
150 <programlisting>
151 server {
152 server_name ~^(www\.)?(.+)$;
153
154 location / {
155 root /sites/<b>$2</b>;
156 }
157 }
158 </programlisting>
159
160 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).
161 </para>
162
163
164 </section>
165
166
167 <section name="miscellaneous_names"
168 title="Diğer muhtelif adlar">
169
170 <para>
171 Eğer server bloğu içerisinde bir <dirname>server_name</dirname> tanımlanmamışsa nginx, sunucu adı olarak <i>hostname</i> ifadesini kullanır.
172 </para>
173
174 <para>
175 Eğer varsayılan dışındaki bir server bloğuna gelen ve header bilgisinde &ldquo;Host&rdquo; datası yer almayan bir talebi işlemek isterseniz boş bir ad kullanmak zorundasınız:
176
177 <programlisting>
178 server {
179 listen 80;
180 server_name nginx.org www.nginx.org "";
181 ...
182 }
183 </programlisting>
184 </para>
185
186 <para>
187 Eğer bir istemci ad yerine IP adresini kullanarak bir talepte bulunursa, header içerisinde bulunan &ldquo;Host&rdquo; datası IP bilgisini içerecektir ve bu IP adresini, sunucu adı olarak kullanarak talebi işleyebilirsiniz:
188
189 <programlisting>
190 server {
191 listen 80;
192 server_name nginx.org
193 www.nginx.org
194 ""
195 <b>192.168.1.1</b>
196 ;
197 ...
198 }
199 </programlisting>
200 </para>
201
202 <para>
203 Bir catch-all (tümünü-yakala) sunucuda &ldquo;_&rdquo; şeklinde garip bir ifade ile karşılaşabilirsiniz:
204
205 <programlisting>
206 server {
207 listen 80 default_server;
208 server_name _;
209 return 444;
210 }
211 </programlisting>
212
213 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.
214 Ayrıca &ldquo;--&rdquo;, &ldquo;!@#&rdquo; ve benzeri ifadeler de kullanabilirsiniz.
215 </para>
216
217 <para>
218 nginx, 0.6.25 versiyonuna kadar, bir catch-all adı olmak için hatalı bir şekilde yorumlanan &ldquo;*&rdquo; özel adını destekliyordu.
219 Fakat bu bir catch-all veya wildcard sunucu adı olarak fonksiyonel değil. Bunun yerine, <dirname>server_name_in_redirect</dirname> yönergesini kullanarak fonksiyonelliği sağlamaya başladık.
220 &ldquo;*&rdquo; özel karakteri artık desteklenmiyor, bu yüzden <dirname>server_name_in_redirect</dirname> yönergesi kullanılmalıdır.
221 Not: <dirname>server_name</dirname> yönergesini kullanan varsayılan sunucuyu veya catch-all adını belirtmenin bir yolu bulunmuyor.
222 Bu, <dirname>server_name</dirname> yönergesinin değil, <dirname>listen</dirname> yönergesinin bir özelliğidir.
223 Ayrıca bakınız &ldquo;<a href="/tr/docs/http/request_processing.xml" />&rdquo;.
224 *:80 ve *:8080 portlarını dinleyen sunucular tanımlayabilir ve birini *:8080 portu için varsayılan olarak belirlerken, diğerini de *:80 için varsayılan olarak belirleyebilirsiniz:
225
226 <programlisting>
227 server {
228 listen 80;
229 listen 8080 default_server;
230 server_name nginx.net;
231 ...
232 }
233
234 server {
235 listen 80 default_server;
236 listen 8080;
237 server_name nginx.org;
238 ...
239 }
240 </programlisting>
241 </para>
242
243
244 </section>
245
246
247 <section name="optimization"
248 title="Optimizasyon">
249
250 <para>
251 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 <dirname>.nginx.org</dirname> wildcard formu, gerçek ad çırpısında değil, wildcard ad çırpısında saklanır. Düzenli İfadeler sırayla test edildiğinden bu en yavaş ve ölçeklenebilir olmayan yöntemdir.
252 </para>
253
254 <para>
255 Bu nedenlerden dolayı, imkanlar el veriyorsa gerçek adları kullanmak en iyisidir. Örneğin, bir sunucunun en sık talep edilen adları <url>nginx.org</url> ve <url>www.nginx.org</url> ise bunları açıkca belirtmek daha etkili olacaktır:
256
257 <programlisting>
258 server {
259 listen 80;
260 server_name nginx.org www.nginx.org *.nginx.org;
261 ...
262 }
263 </programlisting>
264
265 bu kullanım aşağıdaki basit kullanımdan daha etkili olacaktır:
266
267 <programlisting>
268 server {
269 listen 80;
270 server_name .nginx.org;
271 ...
272 }
273 </programlisting>
274 </para>
275
276 <para>
277 Eğer çok miktarda veya olağandışı şekilde uzun sunucu adları tanımladıysanız, <i>http</i> düzeyinde <dirname>server_names_hash_max_size</dirname>
278 ve <dirname>server_names_hash_bucket_size</dirname> yönergelerini tekrar ayarlamalısınız. <dirname>server_names_hash_bucket_size</dirname> yönergesinin varsayılan değeri CPU önbellek satır boyutuna göre 32, 64 veya başka bir rakam olabilir. Eğer bu değer 32 ise ve &ldquo;cok.uzun.sunucu.adi.nginx.org&rdquo; ifadesini sunucu adı olarak belirlerseniz nginx, başlamayacak ve aşağıdaki hatayı verecektir:
279
280 <programlisting>
281 could not build the server_names_hash,
282 you should increase server_names_hash_bucket_size: 32
283 </programlisting>
284
285 Bu durumda yönerge değerini aşağıdaki gibi belirlemelisiniz:
286
287 <programlisting>
288 http {
289 server_names_hash_bucket_size 64;
290 ...
291 </programlisting>
292
293 Eğer çok fazla sunu adı belirlemiş iseniz şu şekilde bir hata alacaksınız:
294
295 <programlisting>
296 could not build the server_names_hash,
297 you should increase either server_names_hash_max_size: 512
298 or server_names_hash_bucket_size: 32
299 </programlisting>
300
301 Bu durumda ilk olarak <dirname>server_names_hash_max_size</dirname> değerini sunucu ad sayısına yakın bir değeri yükseltin. Eğer bu da yardımcı sorunu çözmez ise veya nginx başlama süresi çok uzar ise <dirname>server_names_hash_bucket_size</dirname> değerini arttırın.
302 </para>
303
304 <para>
305 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 <dirname>server_name</dirname> tutuklar (capture) içeren bir düzenli ifade ise nginx, bu tutukları almak için ifadeyi yürütmek zorundadır.
306 </para>
307
308 </section>
309
310
311 <section name="compatibility"
312 title="Uygunluk">
313
314 <para>
315 <list>
316
317 <item>
318 Named düzenli ifade sunucu adı tutukları, 0.8.25 versiyonundan beri destekleniyor.
319 </item>
320
321 <item>
322 Düzenli ifade sunucu adı tutukları, 0.7.40 versiyonundan beri destekleniyor.
323 </item>
324
325 <item>
326 &ldquo;&rdquo; boş sunucu adı 0.7.12 versiyonundan beri destekleniyor.
327 </item>
328
329 <item>
330 Bir wildcard sunucu adının veya düzenli ifadenin ilk sunucu adı olarak kullanılması 0.6.25 versiyonundan beri destekleniyor.
331 </item>
332
333 <item>
334 Düzenli ifade sunucu adları 0.6.7 versiyonundan beri destekleniyor.
335 </item>
336
337 <item>
338 <url>nginx.*</url> wildcard formu 0.6.0 versiyonundan beri destekleniyor.
339 </item>
340
341 <item>
342 <url>.nginx.org</url> özel formu 0.3.18 versiyonundan beri destekleniyor.
343 </item>
344
345 <item>
346 <url>*.nginx.org</url> wildcard formu 0.1.13 versiyonundan beri destekleniyor.
347 </item>
348
349 </list>
350 </para>
351
352 </section>
353
354 </article>