Mercurial > hg > nginx-site
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 “Host” datasını kullanarak hangi sunucunun cevap vereceğini belirliyor. | |
38 Eğer “Host” 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ış “Host” 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 “_” ifadesini kullanarak nginx’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 “Host” 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’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’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&page=1 | |
178 /index.php?page=1&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&baska+bir+sey&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 /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’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 /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> |