comparison xml/tr/docs/http/request_processing.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="nginx bir talebi nasıl işler"
4 link="/tr/docs/http/request_processing.html"
5 lang="tr"
6 author="Igor Sysoev"
7 translator="Altan Tanrıverdi">
8
9 <section title="Ad-tabanlı sanal sunucular">
10
11 <para>
12 nginx, ilk olarak hangi sunucunun talebi işleyeceğine karar verir.
13 80 portunu dinleyen 3 sunucunun olduğu bir yapılandırma ile örnek verelim:
14
15 <programlisting>
16 server {
17 listen 80;
18 server_name nginx.org www.nginx.org;
19 ...
20 }
21
22 server {
23 listen 80;
24 server_name nginx.net www.nginx.net;
25 ...
26 }
27
28 server {
29 listen 80;
30 server_name nginx.com www.nginx.com;
31 ...
32 }
33 </programlisting>
34 </para>
35
36 <para>
37 Bu yapılandırmada, nginx yalnızca talebin header bilgisinde bulunan &ldquo;Host&rdquo; datasını kullanarak hangi sunucunun cevap vereceğini belirliyor.
38 Eğer &ldquo;Host&rdquo; datası boş ise veya herhangi bir sunucu adı ile eşleşmez ise nginx talebi varsayılan sunucuya yönlendirir.
39 Yukarıdaki örnekte varsayılan sunucu ilk server ifadesi kabul edilir.
40 Eğer ilk server ifadesinin varsayılan olmasını istemiyorsanız, <dirname>listen</dirname> yönergesinde <dirname>default_server</dirname> parametresini kullanabilirsiniz:
41
42 <programlisting>
43 server {
44 listen 80 <b>default_server</b>;
45 server_name nginx.net www.nginx.net;
46 ...
47 }
48 </programlisting>
49
50 <note>
51 <dirname>default_server</dirname> parametresi, versiyon 0.8.21 ile birlikte kullanılmaya başlanmıştır.
52 Önceki versiyonlarda <dirname>default</dirname> parametresi kullanılmalıdır.
53 </note>
54
55 Not: Varsayılan sunucu, sunucu adının değil listen portunun bir özelliğidir. Daha sonra bu konuya değinilecek.
56 </para>
57
58 </section>
59
60
61 <section name="how_to_prevent_undefined_server_names"
62 title="Tanımlanmamış sunucu adlarına gelen taleplerin işlenmesini engellemek">
63
64 <para>
65 Eğer tanımlanmamış &ldquo;Host&rdquo; bilgisine sahip talepleri işlemek istemiyorsanız, bu talepleri düşüren bir varsayılan sunucu tanımlayabilirsiniz:
66
67 <programlisting>
68 server {
69 listen 80 default_server;
70 server_name _;
71 return 444;
72 }
73 </programlisting>
74
75 Böylece var olmayan alan adı için &ldquo;_&rdquo; ifadesini kullanarak nginx&rsquo;in standart olmayan 444 koduna yönlendirerek bağlantıyı kapatıyoruz.
76 Not: Bu sunucu için bir ad belirlemelisiniz. Aksi takdirde nginx <i>hostname</i> ifadesini kullanacaktır.
77 </para>
78
79 </section>
80
81
82 <section name="mixed_name_ip_based_servers"
83 title="Ad ve IP bazlı karışık sanal sunucular">
84
85 <para>
86 Farklı adreslerde bulunan sanal sunucuların yer aldığı biraz daha karışık bir yapılandırmayı inceleyelim:
87 <programlisting>
88 server {
89 listen 192.168.1.1:80;
90 server_name nginx.org www.nginx.org;
91 ...
92 }
93
94 server {
95 listen 192.168.1.1:80;
96 server_name nginx.net www.nginx.net;
97 ...
98 }
99
100 server {
101 listen 192.168.1.2:80;
102 server_name nginx.com www.nginx.com;
103 ...
104 }
105 </programlisting>
106
107 Bu yapılandırmada, nginx <dirname>server</dirname> bloklarında yer alan <dirname>listen</dirname> yönergelerini ilk olarak IP adresi ve port üzerinde test eder. Daha sonra, gelen taleplerin header bilgisinde yer alan &ldquo;Host&rdquo; datasını, IP ve port ile eşleşen <dirname>server</dirname> bloklarında yer alan <dirname>server_name</dirname> girdileri ile kontrol eder.
108
109 Eğer sunucu bulunamazsa varsayılan sunucu tarafından işlenir. Örneğin, <url>www.nginx.com</url> için 192.168.1.1:80 adres ve portuna gelen bir talep, eğer bu adres ve port için <url>www.nginx.com</url> tanımlanmamışsa, 192.168.1.1:80&rsquo;e ait varsayılan sunucu tarafından işlenir.
110 </para>
111
112 <para>
113 Daha önce belirtildiği gibi, varsayılan bir sunucu, bir listen portunun ve değişik listen portları için tanımlanan çeşitli varsayılan sunucuların özelliğidir:
114
115 <programlisting>
116 server {
117 listen 192.168.1.1:80;
118 server_name nginx.org www.nginx.org;
119 ...
120 }
121
122 server {
123 listen 192.168.1.1:80 default_server;
124 server_name nginx.net www.nginx.net;
125 ...
126 }
127
128 server {
129 listen 192.168.1.2:80 default_server;
130 server_name nginx.com www.nginx.com;
131 ...
132 }
133 </programlisting>
134 </para>
135
136 </section>
137
138
139 <section name="simple_php_site_configuration"
140 title="Basit bir PHP sitesi yapılandırması">
141
142 <para>
143 nginx&rsquo;in basit bir PHP sitesi için gelen talebi işlemek için nasıl bir <i>lokasyon</i> seçtiğini inceleyelim:
144
145 <programlisting>
146 server {
147 listen 80;
148 server_name nginx.org www.nginx.org;
149 root /data/www;
150
151 location / {
152 index index.html index.php;
153 }
154
155 location ~* \.(gif|jpg|png)$ {
156 expires 30d;
157 }
158
159 location ~ \.php$ {
160 fastcgi_pass localhost:9000;
161 fastcgi_param SCRIPT_FILENAME
162 $document_root$fastcgi_script_name;
163 include fastcgi_params;
164 }
165 }
166 </programlisting>
167 </para>
168
169 <para>
170 nginx ilk olarak literal dizgiler (string) tarafından verilmiş en spesifik lokasyonları arar. Yukarıdaki yapılandırmada tek literal lokasyon <path>/</path> ifadesidir ve herhangi bir talep ile eşleştiğinde kullanılacak son uğraktır (resort). nginx, daha sonra yapılandırma dosyasında bulunan listelenmiş sıralardaki düzenli ifadeler tarafından verilmiş lokasyonları arar. İlk düzenli ifade eşleşmesi aramayı durdurur ve nginx bu lokasyonu kullanır. Eğer talep ile eşleşen bir düzenli ifade bulunamaz ise nginx daha önce bulduğu en spesifik lokasyonu kullanır.
171 </para>
172
173 <para>
174 Not: Tüm tiplerde bulunan bu lokasyonlar sadece bir talebin, sorgu dizgisi olmayan URI datasını test eder. Bunun yapılmasının nedeni sorgu dizgisinde bulunan argümanların çeşitli yollarla verilebilmesidir, örneğin:
175
176 <programlisting>
177 /index.php?user=john&amp;page=1
178 /index.php?page=1&amp;user=john
179 </programlisting>
180
181 Ayrıca herhangi biri, herhangi bir şeyi sorgu dizgileri ile talep edebilir:
182
183 <programlisting>
184 /index.php?page=1&amp;baska+bir+sey&amp;user=john
185 </programlisting>
186 </para>
187
188 <para>
189 Yukarıdaki yapılandırmada taleplerin nasıl işlendiğini inceleyelim:
190
191 <list>
192
193 <item>
194 <para>
195 Bir <path>/logo.gif</path> talebi, ilk olarak <dirname>/</dirname> literal lokasyonu, daha sonra, <dirname>\.(gif|jpg|png)$</dirname> düzenli ifadesi tarafından eşleştirilir. Bu sonraki (latter) lokasyon tarafından tutulur. <dirname>root&nbsp;/data/www</dirname> yönergesi kullanılarak, talep <path>/data/www/logo.gif</path> dosyasına eşlemlenir (mapped to) ve dosya istemciye gönderilir.
196 </para>
197 </item>
198
199 <item>
200 <para>
201 Bir <path>/index.php</path> talebi de ilk olarak <dirname>/</dirname> literal lokasyonu, sonra, <dirname>\.(php)$</dirname> düzenli ifadesi tarafından eşleştirilir. Bu nedenle sonraki lokasyon tarafından tutulur ve localhost:9000&rsquo;in dinlendiği bir FastCGI sunucusuna iletilir. <dirname>fastcgi_param</dirname> yönergesi, SCRIPT_FILENAME FastCGI parametresini <path>/data/www/index.php</path> adresine yerleştirir ve FastCGI sunucusu dosyayı yürütür. $document_root değişkeni <dirname>root</dirname> yönergesinin değerine, $fastcgi_script_name değişkeni ise talebin URI değerine eşittir. Örneğin <path>/index.php</path>.
202 </para>
203 </item>
204
205 <item>
206 <para>
207 Bir <path>/about.html</path> talebi yalnızca <dirname>/</dirname> literal lokasyonu tarafından eşleştirilir ve bu yüzden, bu lokasyon tarafından tutulur. <dirname>root /data/www</dirname> yönergesi kullanılarak talep, <path>/data/www/about.html</path> dosyasına eşlemlenir ve istemciye gönderilir.
208 </para>
209 </item>
210
211 <item>
212 <para>
213 Bir <path>/</path> talebini tutmak daha karmaşıktır. Sadece <dirname>/</dirname> literal lokasyonu tarafından eşleştirilir ve bu yüzden bu lokasyon tarafından tutulur. Sonra <dirname>index</dirname> yönergesi parametrelerine ve <dirname>root&nbsp;/data/www</dirname> yönergesine göre bir index dosyası olup olmadığını kontrol eder. Eğer bir <path>/data/www/index.php</path> dosyası mevcut ise yönerge, <path>/index.php</path> adresine dahili bir yönlendirme yapar ve eğer talep bir istemci tarafından gönderilmiş ise nginx, lokasyonları tekrar arar. Daha önce gördüğümüz gibi, yönlendirilmiş talep en son olarak FastCGI sunucusu tarafından tutulur.
214 </para>
215 </item>
216
217 </list>
218 </para>
219
220 </section>
221
222 </article>