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&mdash;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&amp;page=1
232 /index.php?page=1&amp;user=john
233 </programlisting>
234 Inoltre, nella stringa di richiesta e' possibile scrivere qualsiasi cosa:
235 <programlisting>
236 /index.php?page=1&amp;something+else&amp;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&nbsp;/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>