Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
nginx
GitHub Repository: nginx/nginx.org
Path: blob/main/xml/tr/docs/http/server_names.xml
1 views
1
<!DOCTYPE article SYSTEM "../../../../dtd/article.dtd">
2
3
<article name="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ı <literal>server_name</literal> 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;<link doc="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 example.org www.example.org;
18
...
19
}
20
21
server {
22
listen 80;
23
server_name *.example.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;.+)\.example\.net$;
36
...
37
}
38
</programlisting>
39
40
Bu adlar şu sıra ile test edilirler:
41
42
<list type="enum">
43
44
<listitem>
45
gerçek adlar;
46
</listitem>
47
48
<listitem>
49
* ile başlayan wildcard adlar: <literal>*.example.org</literal>;
50
</listitem>
51
52
<listitem>
53
* ile biten wildcard adlar: <literal>mail.*</literal>;
54
</listitem>
55
56
<listitem>
57
ve düzenli ifadeler (regular expressions).
58
</listitem>
59
60
</list>
61
İlk eşleşme arama işlemini bitirir.
62
</para>
63
64
</section>
65
66
67
<section id="wildcard_names"
68
name="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. <literal>www.*.example.org</literal> ve <literal>w*.example.org</literal> adları geçersizdir. Ancak bu adlar düzenli ifadeler ile geçerli hale getirilebilir, örneğin, <literal>~^www\..+\.example\.org$</literal> ve <literal>~^w.*\.example\.org$</literal>. Buradaki * bir çok eşleşmeyi tanımlayabilir. <literal>*.example.org</literal> ifadesi <literal>www.example.org</literal> ve <literal>www.sub.example.org</literal> adlarına karşılık gelebilir.
72
</para>
73
74
<para>
75
<literal>.example.org</literal> şeklindeki bir wildcard <literal>example.org</literal> gerçek adı ile <literal>*.example.org</literal> wildcard adına karşılık gelir.
76
</para>
77
78
</section>
79
80
81
<section id="regex_names"
82
name="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+\.example\.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>+)\.example\.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><literal>?&lt;<value>name</value>&gt;</literal></td>
126
<td>Perl 5.10 uyumlu sentaks, PCRE-7.0 ile gelmiştir.</td>
127
</tr>
128
129
<tr>
130
<td><literal>?'<value>name</value>'</literal></td>
131
<td>Perl 5.10 uyumlu sentaks, PCRE-7.0 ile gelmiştir.</td>
132
</tr>
133
134
<tr>
135
<td><literal>?P&lt;<value>name</value>&gt;</literal></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 <literal>?P&lt;<value>name</value>&gt;</literal> ş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 id="miscellaneous_names"
168
name="Diğer muhtelif adlar">
169
170
<para>
171
Eğer server bloğu içerisinde bir <literal>server_name</literal> 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 example.org www.example.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 example.org
193
www.example.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, <literal>server_name_in_redirect</literal> yönergesini kullanarak fonksiyonelliği sağlamaya başladık.
220
&ldquo;*&rdquo; özel karakteri artık desteklenmiyor, bu yüzden <literal>server_name_in_redirect</literal> yönergesi kullanılmalıdır.
221
Not: <literal>server_name</literal> yönergesini kullanan varsayılan sunucuyu veya catch-all adını belirtmenin bir yolu bulunmuyor.
222
Bu, <literal>server_name</literal> yönergesinin değil, <literal>listen</literal> yönergesinin bir özelliğidir.
223
Ayrıca bakınız &ldquo;<link doc="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 example.net;
231
...
232
}
233
234
server {
235
listen 80 default_server;
236
listen 8080;
237
server_name example.org;
238
...
239
}
240
</programlisting>
241
</para>
242
243
244
</section>
245
246
247
<section id="optimization"
248
name="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 <literal>.example.org</literal> 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ı <literal>example.org</literal> ve <literal>www.example.org</literal> ise bunları açıkca belirtmek daha etkili olacaktır:
256
257
<programlisting>
258
server {
259
listen 80;
260
server_name example.org www.example.org *.example.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 .example.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 <literal>server_names_hash_max_size</literal>
278
ve <literal>server_names_hash_bucket_size</literal> yönergelerini tekrar ayarlamalısınız. <literal>server_names_hash_bucket_size</literal> 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.example.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 <literal>server_names_hash_max_size</literal> 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 <literal>server_names_hash_bucket_size</literal> 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 <literal>server_name</literal> 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 id="compatibility"
312
name="Uygunluk">
313
314
<para>
315
<list type="bullet">
316
317
<listitem>
318
Named düzenli ifade sunucu adı tutukları, 0.8.25 versiyonundan beri destekleniyor.
319
</listitem>
320
321
<listitem>
322
Düzenli ifade sunucu adı tutukları, 0.7.40 versiyonundan beri destekleniyor.
323
</listitem>
324
325
<listitem>
326
&ldquo;&rdquo; boş sunucu adı 0.7.12 versiyonundan beri destekleniyor.
327
</listitem>
328
329
<listitem>
330
Bir wildcard sunucu adının veya düzenli ifadenin ilk sunucu adı olarak kullanılması 0.6.25 versiyonundan beri destekleniyor.
331
</listitem>
332
333
<listitem>
334
Düzenli ifade sunucu adları 0.6.7 versiyonundan beri destekleniyor.
335
</listitem>
336
337
<listitem>
338
<literal>example.*</literal> wildcard formu 0.6.0 versiyonundan beri destekleniyor.
339
</listitem>
340
341
<listitem>
342
<literal>.example.org</literal> özel formu 0.3.18 versiyonundan beri destekleniyor.
343
</listitem>
344
345
<listitem>
346
<literal>*.example.org</literal> wildcard formu 0.1.13 versiyonundan beri destekleniyor.
347
</listitem>
348
349
</list>
350
</para>
351
352
</section>
353
354
</article>
355
356