Mercurial > hg > nginx-site
comparison xml/it/docs/http/request_processing.xml @ 1018:19129672444e
Added italian translation.
Grazie a Angelo Papadia <angelo.papadia@gmail.com>!
author | Vladimir Homutov <vl@nginx.com> |
---|---|
date | Wed, 20 Nov 2013 14:36:40 +0400 |
parents | |
children |
comparison
equal
deleted
inserted
replaced
1017:9f9a427a73eb | 1018:19129672444e |
---|---|
1 <!-- | |
2 Copyright (C) Igor Sysoev | |
3 Copyright (C) Nginx, Inc. | |
4 --> | |
5 | |
6 <!DOCTYPE article SYSTEM "../../../../dtd/article.dtd"> | |
7 | |
8 <article name="Come nginx processa una richiesta" | |
9 link="/it/docs/http/request_processing.html" | |
10 lang="it" | |
11 translator="Angelo Papadia" | |
12 rev="1" | |
13 author="Igor Sysoev" | |
14 editor="Brian Mercer"> | |
15 | |
16 <section name="Server virtuali name-based"> | |
17 | |
18 <para> | |
19 La prima cosa che nginx fa e' decidere quale <i>server</i> deve | |
20 processare la richiesta. Si consideri una semplice configurazione | |
21 in cui tutti i tre server virtuali sono in ascolto sulla porta *:80 : | |
22 <programlisting> | |
23 server { | |
24 listen 80; | |
25 server_name example.org www.example.org; | |
26 ... | |
27 } | |
28 | |
29 server { | |
30 listen 80; | |
31 server_name example.net www.example.net; | |
32 ... | |
33 } | |
34 | |
35 server { | |
36 listen 80; | |
37 server_name example.com www.example.com; | |
38 ... | |
39 } | |
40 </programlisting> | |
41 | |
42 </para> | |
43 | |
44 <para> | |
45 In questa configurazione nginx verifica solo il campo <header>Host</header> | |
46 dell'header di richiesta, per determinare a quale server la richiesta debba | |
47 essere assegnata. | |
48 Se il suo valore non corrisponde con quello di alcun nome di server, | |
49 oppure se la richiesta semplicemente non contiene tale campo dell'header, | |
50 allora nginx assegna la richiesta al server di default per la relativa porta. | |
51 Nella configurazione precedente, il server di default e' il primo—si | |
52 tratta del comportamento standard di nginx. | |
53 E' anche possibile indicare esplicitamente il server di default, tramite il | |
54 parametro <literal>default_server</literal> nella direttiva | |
55 <link doc="ngx_http_core_module.xml" id="listen"/> : | |
56 <programlisting> | |
57 server { | |
58 listen 80 <b>default_server</b>; | |
59 server_name example.net www.example.net; | |
60 ... | |
61 } | |
62 </programlisting> | |
63 | |
64 <note> | |
65 Il parametro <literal>default_server</literal> e' disponibile a partire dalla | |
66 versione 0.8.21 di nginx. | |
67 Nelle versioni precedenti bisogna usare invece il parametro | |
68 <literal>default</literal>. | |
69 </note> | |
70 Si noti che il server di default e' una proprieta' della porta in ascolto, | |
71 e non del nome del server; l'argomento sara' ripreso in seguito. | |
72 </para> | |
73 | |
74 </section> | |
75 | |
76 | |
77 <section id="how_to_prevent_undefined_server_names" | |
78 name="Come evitare di processare richieste in cui il nome del server non e' definito"> | |
79 | |
80 <para> | |
81 Se si desidera che le richieste prive dell'header <header>Host</header> | |
82 non siano processate, e' possibile definire un server che si limita a scartarle: | |
83 <programlisting> | |
84 server { | |
85 listen 80; | |
86 server_name ""; | |
87 return 444; | |
88 } | |
89 </programlisting> | |
90 In questo caso il nome del server e' definito con una stringa vuota, | |
91 la quale corrispondera' a tutte le richieste prive del campo | |
92 <header>Host</header> dell'header; per chiudere la connessione nginx | |
93 restituisce il codice 444 (non standard). | |
94 <note> | |
95 A partire dalla versione 0.8.48 quella descritta e' la configurazione | |
96 default per i nomi di server, per cui e' possibile omettere | |
97 <literal>server_name ""</literal>. | |
98 Nelle versioni precedenti, come nome del server di default si utilizzava | |
99 l'<i>hostname</i> della macchina. | |
100 </note> | |
101 </para> | |
102 | |
103 </section> | |
104 | |
105 | |
106 <section id="mixed_name_ip_based_servers" | |
107 name="Configurazione mista di server virtuali name-based e IP-based"> | |
108 | |
109 <para> | |
110 Una configurazione piu' complessa prevede vari server virtuali | |
111 in ascolto su indirizzi differenti: | |
112 <programlisting> | |
113 server { | |
114 listen 192.168.1.1:80; | |
115 server_name example.org www.example.org; | |
116 ... | |
117 } | |
118 | |
119 server { | |
120 listen 192.168.1.1:80; | |
121 server_name example.net www.example.net; | |
122 ... | |
123 } | |
124 | |
125 server { | |
126 listen 192.168.1.2:80; | |
127 server_name example.com www.example.com; | |
128 ... | |
129 } | |
130 </programlisting> | |
131 In tale configurazione nginx dapprima confronta l'indirizzo IP | |
132 e la porta della richiesta con le direttive | |
133 <link doc="ngx_http_core_module.xml" id="listen"/> dei blocchi | |
134 <link doc="ngx_http_core_module.xml" id="server"/>; | |
135 quindi, per ciascun blocco per cui c'e' corrispondenza, nginx confronta | |
136 il campo <header>Host</header> dell'header della richiesta con i | |
137 valori <link doc="ngx_http_core_module.xml" id="server_name"/> del blocco. | |
138 Se il nome del server non e' presente in alcun blocco, la richiesta | |
139 viene processata dal server di default. | |
140 Ad esempio, una richiesta per <literal>www.example.com</literal> | |
141 ricevuta sulla porta 192.168.1.1:80, sara' processata dal server di | |
142 default di 192.168.1.1:80, vale a dire dal primo server, in quanto non | |
143 c'e' alcun nome <literal>www.example.com</literal> definito per tale | |
144 combinazione di indirizzo e porta. | |
145 </para> | |
146 | |
147 <para> | |
148 Si precisa nuovamente che il server di default e' una proprieta' di | |
149 indirizzo e porta in ascolto, e che e' possibile definire server di | |
150 default differenti per combinazioni differenti di indirizzo e porta: | |
151 <programlisting> | |
152 server { | |
153 listen 192.168.1.1:80; | |
154 server_name example.org www.example.org; | |
155 ... | |
156 } | |
157 | |
158 server { | |
159 listen 192.168.1.1:80 <b>default_server</b>; | |
160 server_name example.net www.example.net; | |
161 ... | |
162 } | |
163 | |
164 server { | |
165 listen 192.168.1.2:80 <b>default_server</b>; | |
166 server_name example.com www.example.com; | |
167 ... | |
168 } | |
169 </programlisting> | |
170 | |
171 </para> | |
172 | |
173 </section> | |
174 | |
175 | |
176 <section id="simple_php_site_configuration" | |
177 name="Configurazione per un semplice sito PHP"> | |
178 | |
179 <para> | |
180 Nel seguito si analizza come nginx scelga la <i>location</i> per | |
181 processare una richiesta nel caso di un tipico, semplice sito PHP: | |
182 <programlisting> | |
183 server { | |
184 listen 80; | |
185 server_name example.org www.example.org; | |
186 root /data/www; | |
187 | |
188 location / { | |
189 index index.html index.php; | |
190 } | |
191 | |
192 location ~* \.(gif|jpg|png)$ { | |
193 expires 30d; | |
194 } | |
195 | |
196 location ~ \.php$ { | |
197 fastcgi_pass localhost:9000; | |
198 fastcgi_param SCRIPT_FILENAME | |
199 $document_root$fastcgi_script_name; | |
200 include fastcgi_params; | |
201 } | |
202 } | |
203 </programlisting> | |
204 | |
205 </para> | |
206 | |
207 <para> | |
208 Per prima cosa nginx individua fra tutte le location definite da una | |
209 stringa quella con il prefisso specifico piu' lungo (l'ordine con cui | |
210 sono elencate non e' rilevante); nella configurazione precedente il | |
211 solo prefisso definito e' “<literal>/</literal>”, che trova | |
212 corrispondenza in qualsiasi richiesta e che quindi verra' comunque | |
213 preso in considerazione, come ultima risorsa. | |
214 Successivamente, nginx analizza le location definite tramite una | |
215 espressione regolare, fermandosi appena ne individua una che | |
216 corrisponde (in questo caso l'ordine in cui sono inserite nel file | |
217 di configurazione e' rilevante in quanto nginx parte dalla prima e le | |
218 analizza una dopo l'altra). La prima location individuata fra quelle | |
219 definite come espressione regolare e' quella prescelta; se non ce n'e' | |
220 nessuna, nginx ripiega su quella individuata al passo precedente tramite | |
221 il prefisso. | |
222 | |
223 </para> | |
224 | |
225 <para> | |
226 Notare che tutti i tipi di location sono confrontati con il solo URI | |
227 della linea di richiesta, senza argomenti; | |
228 cio' e' dovuto al fatto che gli argomenti nella stringa di richiesta | |
229 possono essere inviati in vari modi, ad esempio: | |
230 <programlisting> | |
231 /index.php?user=john&page=1 | |
232 /index.php?page=1&user=john | |
233 </programlisting> | |
234 Inoltre, nella stringa di richiesta e' possibile scrivere qualsiasi cosa: | |
235 <programlisting> | |
236 /index.php?page=1&something+else&user=john | |
237 </programlisting> | |
238 | |
239 </para> | |
240 | |
241 <para> | |
242 Seguono alcuni esempi di processo di richieste in base alla | |
243 configurazione precedente: | |
244 <list type="bullet" compact="no"> | |
245 | |
246 <listitem> | |
247 Una richiesta “<literal>/logo.gif</literal>” corrisponde al prefisso | |
248 di location “<literal>/</literal>”, ma anche all'espressione regolare | |
249 “<literal>\.(gif|jpg|png)$</literal>”, per cui si utilizzera' quest'ultima | |
250 corrispondenza in quanto, come spiegato in precedenza, le espressioni | |
251 regolari hanno sempre priorita' sulle stringhe fisse. | |
252 Usando la direttiva “<literal>root /data/www</literal>” la richiesta | |
253 e' mappata sul file <path>/data/www/logo.gif</path> , che quindi e' inviato | |
254 al client. | |
255 </listitem> | |
256 | |
257 <listitem> | |
258 Una richiesta “<literal>/index.php</literal>” corrisponde sia al prefisso | |
259 “<literal>/</literal>” sia all'espressione regolare | |
260 “<literal>\.(php)$</literal>”, per cui sara' processata da quest'ultima | |
261 sezione della configurazione, e la richiesta sara' inoltrata al server | |
262 FastCGI in ascolto su localhost:9000. | |
263 La direttiva | |
264 <link doc="ngx_http_fastcgi_module.xml" id="fastcgi_param"/> | |
265 imposta il parametro FastCGI | |
266 <literal>SCRIPT_FILENAME</literal> a “<literal>/data/www/index.php</literal>”, | |
267 ed il server FastCGI esegue il file. | |
268 La variabile <var>$document_root</var> contiene il valore della direttiva | |
269 <link doc="ngx_http_core_module.xml" id="root"/>, e la variabile | |
270 <var>$fastcgi_script_name</var> il valore della richiesta URI, vale a dire | |
271 “<literal>/index.php</literal>”. | |
272 </listitem> | |
273 | |
274 <listitem> | |
275 Una richiesta “<literal>/about.html</literal>” corrisponde al solo prefisso | |
276 “<literal>/</literal>”, per cui sara' processata da questa sezione. | |
277 La direttiva “<literal>root /data/www</literal>” mappa la richiesta sul file | |
278 <path>/data/www/about.html</path>, che e' inviato al client. | |
279 </listitem> | |
280 | |
281 <listitem> | |
282 Una richiesta “<literal>/</literal>” e' processata in maniera piuttosto | |
283 complessa. Corrisponde al solo prefisso “<literal>/</literal>”, per cui e' | |
284 processata dalla relativa sezione; la direttiva | |
285 <link doc="ngx_http_index_module.xml" id="index"/>, | |
286 in accordo ai propri parametri e alla direttiva | |
287 “<literal>root /data/www</literal>”, verifica la presenza di eventuali file index. | |
288 Se il file <path>/data/www/index.html</path> non esiste, ma esiste invece il | |
289 file <path>/data/www/index.php</path> , allora la direttiva esegue una | |
290 redirezione interna su “<literal>/index.php</literal>”, e nginx ricerca | |
291 nuovamente le location, come se si trattasse di una richiesta del client. | |
292 Come visto in precedenza, alla fine la richiesta rediretta e' processata | |
293 dal server FastCGI. | |
294 </listitem> | |
295 | |
296 </list> | |
297 | |
298 </para> | |
299 | |
300 </section> | |
301 | |
302 </article> |