Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
nginx
GitHub Repository: nginx/nginx.org
Path: blob/main/xml/it/docs/http/server_names.xml
1 views
1
<!--
2
Copyright (C) Igor Sysoev
3
Copyright (C) Nginx, Inc.
4
-->
5
6
<!DOCTYPE article SYSTEM "../../../../dtd/article.dtd">
7
8
<article name="I nomi dei server"
9
link="/it/docs/http/server_names.html"
10
lang="it"
11
translator="Angelo Papadia"
12
rev="2"
13
author="Igor Sysoev"
14
editor="Brian Mercer">
15
16
17
<section>
18
19
<para>
20
I nomi dei server, definiti usando la direttiva
21
<link doc="ngx_http_core_module.xml" id="server_name"/>,
22
determinano quale blocco
23
<link doc="ngx_http_core_module.xml" id="server"/>
24
viene usato per una data richiesta (per approfondire vedi
25
"<link doc="request_processing.xml"/>”).
26
27
I nomi possono essere definiti tramite una stringa determinata,
28
oppure con caratteri jolly, oppure ancora tramite espressioni regolari:
29
30
<programlisting>
31
server {
32
listen 80;
33
server_name example.org www.example.org;
34
...
35
}
36
37
server {
38
listen 80;
39
server_name *.example.org;
40
...
41
}
42
43
server {
44
listen 80;
45
server_name mail.*;
46
...
47
}
48
49
server {
50
listen 80;
51
server_name ~^(?&lt;user&gt;.+)\.example\.net$;
52
...
53
}
54
</programlisting>
55
</para>
56
57
<para>
58
Nel corso della ricerca di un server virtuale name-based, se il nome corrisponde
59
a piu' di una delle definizioni, ad esempio sia a nomi definiti tramite
60
caratteri jolly che a nomi definiti tramite espressioni regolari, verra' scelta
61
la prima variante individuata, secondo il seguente ordine di precedenza decrescente:
62
<list type="enum">
63
64
<listitem>
65
nome esatto
66
</listitem>
67
68
<listitem>
69
fra quelli definiti con caratteri jolly, il piu' lungo nome che comincia per
70
asterisco, ad esempio “<literal>*.example.org</literal>
71
</listitem>
72
73
<listitem>
74
fra quelli definiti con caratteri jolly, il piu' lungo nome che termina per
75
asterisco, ad esempio “<literal>mail.*</literal>
76
</listitem>
77
78
<listitem>
79
fra quelli definiti come espressioni regolare, il primo corrispondente
80
(in base all'ordine con cui compaiono nel file di configurazione)
81
</listitem>
82
83
</list>
84
</para>
85
86
</section>
87
88
89
<section id="wildcard_names"
90
name="Nomi con caratteri jolly">
91
92
<para>
93
Un nome con caratteri jolly puo' contenere un asterisco solo all'inizio
94
o alla fine del nome, e solo accanto ad un punto; ad esempio, i nomi
95
<literal>www.*.example.org</literal>
96
e “<literal>w*.example.org</literal>” non sono validi (pero' e'
97
possibile definirli tramite espressioni regolari, per esempio in questo
98
caso “<literal>~^www\..+\.example\.org$</literal>” e
99
<literal>~^w.*\.example\.org$</literal>”).
100
Un asterisco puo' corrispondere a piu' parti di un nome:
101
<literal>*.example.org</literal>” corrisponde non solo a
102
<literal>www.example.org</literal> ma anche a
103
<literal>www.sub.example.org</literal>.
104
</para>
105
106
<para>
107
E' possibile definire un nome speciale nella forma
108
<literal>.example.org</literal>”, che corrisponde sia al nome esatto
109
<literal>example.org</literal>” sia al nome con caratteri jolly
110
<literal>*.example.org</literal>”.
111
</para>
112
113
</section>
114
115
116
<section id="regex_names"
117
name="Nomi con espressioni regolari">
118
119
<para>
120
Le espressioni regolari usate da nginx sono compatibili con quelle usate
121
dal linguaggio di programmazione Perl (PCRE).
122
Per usare una espressione regolare, il nome del server deve iniziare con
123
il carattere tilde:
124
125
<programlisting>
126
server_name ~^www\d+\.example\.net$;
127
</programlisting>
128
129
altrimenti viene considerato e trattato come un nome esatto, oppure,
130
se l'espressione contiene un asterisco, come un nome con caratteri jolly
131
(e molto probabilmente come uno non valido).
132
E' importante non dimenticare i caratteri ancora “<literal>^</literal>” e
133
<literal>$</literal>”: non sono necessari dal punto di vista sintattico,
134
ma lo sono da quello logico.
135
Si noti inoltre che i caratteri punto nei nomi di dominio sono definiti
136
facendoli precedere da “<literal>\</literal>”.
137
Una espressione regolare contenente i caratteri “<literal>{</literal>” e
138
<literal>}</literal>”, deve essere racchiusa fra doppi apici:
139
140
<programlisting>
141
server_name "~^(?&lt;name&gt;\w\d<b>{</b>1,3<b>}</b>+)\.example\.net$";
142
</programlisting>
143
144
altrimenti nginx non sara' in grado di avviarsi e mostrera' l'errore:
145
146
<programlisting>
147
directive "server_name" is not terminated by ";" in ...
148
</programlisting>
149
150
La sezione catturata di una espressione regolare che definisce un nome
151
puo' essere usata in seguito come una variabile:
152
153
<programlisting>
154
server {
155
server_name ~^(www\.)?(<b>?&lt;domain&gt;</b>.+)$;
156
157
location / {
158
root /sites/<b>$domain</b>;
159
}
160
}
161
</programlisting>
162
163
La libreria PCRE supporta sezioni catturate di nomi tramite la seguente sintassi:
164
165
<table note="yes">
166
167
<tr>
168
<td><literal>?&lt;<value>nome</value>&gt;</literal></td>
169
<td>Sintassi compatibile con Perl 5.10, supportata da PCRE-7.0 in poi</td>
170
</tr>
171
172
<tr>
173
<td><literal>?'<value>nome</value>'</literal></td>
174
<td>Sintassi compatibile con Perl 5.10, supportata da PCRE-7.0 in poi</td>
175
</tr>
176
177
<tr>
178
<td><literal>?P&lt;<value>nome</value>&gt;</literal></td>
179
<td>Sintassi compatibile con Python, supportata da PCRE-4.0 in poi</td>
180
</tr>
181
182
</table>
183
184
Quando nginx non riesce ad avviarsi e mostra il seguente messaggio d'errore:
185
186
<programlisting>
187
pcre_compile() failed: unrecognized character after (?&lt; in ...
188
</programlisting>
189
190
significa che la libreria PCRE e' troppo vecchia, per cui e' bene provare
191
ad usare invece la sintassi:
192
<literal>?P&lt;<value>name</value>&gt;</literal>”.
193
E' possibile riferirsi a sezioni catturate anche usando cifre:
194
195
<programlisting>
196
server {
197
server_name ~^(www\.)?(.+)$;
198
199
location / {
200
root /sites/<b>$2</b>;
201
}
202
}
203
</programlisting>
204
205
Comunque, tale uso dovrebbe essere limitato ai casi piu' semplici (come
206
ad esempio quello appena mostrato), dato che i riferimenti con cifra
207
possono essere sovrascritti facilmente.
208
</para>
209
210
211
</section>
212
213
214
<section id="miscellaneous_names"
215
name="Nomi vari">
216
217
<para>
218
Alcuni nomi di server sono trattati in maniera speciale.
219
</para>
220
221
<para>
222
Se si desidera che le richieste prive del campo <header>Host</header>
223
dell'header siano processato in un blocco
224
<link doc="ngx_http_core_module.xml" id="server"/>
225
che non e' quello di default, e' necessario specificare un nome vuoto:
226
227
<programlisting>
228
server {
229
listen 80;
230
server_name example.org www.example.org "";
231
...
232
}
233
</programlisting>
234
</para>
235
236
<para>
237
238
Se in un blocco <link doc="ngx_http_core_module.xml" id="server"/>
239
non e' specificato alcun <link doc="ngx_http_core_module.xml" id="server_name"/>,
240
allora nginx usa il nome vuoto come nome del server.
241
<note>
242
sino alla versione 0.8.48, in questi casi nginx usava l'hostname della
243
macchina come nome del server.
244
</note>
245
</para>
246
247
<para>
248
Se il nome del server e' definito come “<literal>$hostname</literal>” (0.9.4),
249
il nome del server effettivamente usato e' l'hostname della macchina.
250
</para>
251
252
<para>
253
Se viene fatta una richiesta usando l'indirizzo IP invece di un nome di server,
254
il campo <header>Host</header> dell'header di richiesta conterra' l'indirizzo IP,
255
e la richiesta potra' essere processata usando l'indirizzo IP come nome del server:
256
257
<programlisting>
258
server {
259
listen 80;
260
server_name example.org
261
www.example.org
262
""
263
<b>192.168.1.1</b>
264
;
265
...
266
}
267
</programlisting>
268
</para>
269
270
<para>
271
In molti esempi di configurazione di un server catch-all e' spesso possibile
272
notare l'uso di uno strano nome
273
<literal>_</literal>”:
274
275
<programlisting>
276
server {
277
listen 80 default_server;
278
server_name _;
279
return 444;
280
}
281
</programlisting>
282
283
Tale nome non ha niente di speciale, si tratta di un nome qualsiasi,
284
scelto piu' o meno a caso fra quelli non validi come nome di dominio.
285
Altri esempi di nomi non validi che sono talvolta pure usati sono
286
<literal>--</literal>” e “<literal>!@#</literal>”.
287
</para>
288
289
<para>
290
Sino alla versione 0.6.25 nginx supportava il nome speciale
291
<literal>*</literal>”, che e' stato spesso interpretato erroneamente
292
come un nome, non valido, per un server catch-all.
293
In effetti, non si e' mai trattato di un nome per un server catch-all o
294
di un nome con caratteri jolly: piuttosto, serviva a fornire la funzionalita'
295
attualmente affidata alla direttiva
296
<link doc="ngx_http_core_module.xml" id="server_name_in_redirect"/>.
297
Il nome speciale “<literal>*</literal>” e' attualmente sconsigliato,
298
ed e' considerato preferibile l'uso della direttiva
299
<link doc="ngx_http_core_module.xml" id="server_name_in_redirect"/>.
300
Si noti che non c'e' alcun modo di specificare un nome catch-all o un
301
server di default usando la direttiva
302
<link doc="ngx_http_core_module.xml" id="server_name"/>:
303
si tratta di una proprieta' della direttiva
304
<link doc="ngx_http_core_module.xml" id="listen"/>
305
e non della direttiva
306
<link doc="ngx_http_core_module.xml" id="server_name"/>
307
Si faccia riferimento anche a
308
<link doc="request_processing.xml"/>”.
309
E' possibile definire server in ascolto sulle porte *:80 e *:8080,
310
e specificare che uno e' quello di default per la porta *:8080,
311
mentre l'altro e' quello di default per la porta *:80:
312
313
<programlisting>
314
server {
315
listen 80;
316
listen 8080 default_server;
317
server_name example.net;
318
...
319
}
320
321
server {
322
listen 80 default_server;
323
listen 8080;
324
server_name example.org;
325
...
326
}
327
</programlisting>
328
</para>
329
330
331
</section>
332
333
334
<section id="optimization"
335
name="Ottimizzazione">
336
337
<para>
338
I nomi esatti, i nomi con caratteri jolly che iniziano per asterisco,
339
ed i nomi con caratteri jolly che terminano per asterisco,
340
sono registrati in tre tabelle di hash collegate alle porte in ascolto.
341
Le dimensioni delle tabelle sono ottimizzate in fase di configurazione,
342
in maniera tale che i nomi possano essere recuperati con il minimo numero
343
di miss alla cache della CPU.
344
Dettagli su come configurare le tabelle di hash sono forniti in un
345
<link doc="../hash.xml">documento</link> apposito.
346
</para>
347
348
<para>
349
La prima tabella di hash consultata e' quella dei nomi esatti;
350
se non si trova il nome ricercato, si prosegue nella tabella di hash
351
dei nomi con caratteri jolly che iniziano per asterisco;
352
in caso di ulteriore riscontro negativo, si passa alla tabella di hash
353
dei nomi con caratteri jolly che finiscono per asterisco.
354
</para>
355
356
<para>
357
La ricerca in una tabella di hash per nomi con caratteri jolly e' piu' lenta
358
della ricerca nella tabella relativa ai nomi esatti, dato che i nomi sono ricercati
359
per parti del dominio.
360
Si noti che il formato speciale “<literal>.example.org</literal>” e' salvato in una
361
tabella di hash di nomi con caratteri jolly, e non in quella dei nomi esatti.
362
</para>
363
364
<para>
365
Le espressioni regolari sono testate in sequenza, per cui sono il metodo piu'
366
lento e sono non scalabili.
367
</para>
368
369
<para>
370
Per queste ragioni, se possibile e' sempre meglio usare nomi esatti.
371
Ad esempio, se i nomi di server richiesti piu' di frequente sono
372
<literal>example.org</literal> e <literal>www.example.org</literal>,
373
e' piu' efficiente definirli in maniera esplicita:
374
375
<programlisting>
376
server {
377
listen 80;
378
server_name example.org www.example.org *.example.org;
379
...
380
}
381
</programlisting>
382
383
che usare il formato piu' semplice:
384
385
<programlisting>
386
server {
387
listen 80;
388
server_name .example.org;
389
...
390
}
391
</programlisting>
392
</para>
393
394
<para>
395
Se il numero di nomi di server definiti e' molto grande,
396
oppure se sono stati definiti nomi di server decisamente lunghi,
397
per la messa a punto e' possibile che sia necessario utilizzare
398
le direttive del livello <i>http</i>
399
<link doc="ngx_http_core_module.xml" id="server_names_hash_max_size"/>
400
e <link doc="ngx_http_core_module.xml" id="server_names_hash_bucket_size"/>.
401
Il valore di default della direttiva
402
<link doc="ngx_http_core_module.xml" id="server_names_hash_bucket_size"/>
403
puo' essere pari a 32 o 64, oppure ad un altro valore, in base alla
404
dimensione della linea di cache della CPU.
405
Se il valore di default e' 32 ed il nome del server e' definito come
406
<literal>too.long.server.name.example.org</literal>”, allora nginx non potra'
407
partire e sara' mostrato il seguente messaggio d'errore:
408
409
<programlisting>
410
could not build the server_names_hash,
411
you should increase server_names_hash_bucket_size: 32
412
</programlisting>
413
414
In tal caso, il valore della direttiva dovrebbe essere aumentata sino alla
415
successiva potenza di due:
416
417
<programlisting>
418
http {
419
server_names_hash_bucket_size 64;
420
...
421
</programlisting>
422
423
Se sono stati definiti molti nomi di server, potrebbe comparire un altro
424
messaggio di errore:
425
426
<programlisting>
427
could not build the server_names_hash,
428
you should increase either server_names_hash_max_size: 512
429
or server_names_hash_bucket_size: 32
430
</programlisting>
431
432
In tal caso, si provi prima a impostare
433
<link doc="ngx_http_core_module.xml" id="server_names_hash_max_size"/>
434
ad un numero prossimo al numero dei nomi di server.
435
Solo nel caso in cui cio' non risultasse sufficiente, oppure se il tempo di avvio
436
di nginx fosse inaccetabilmente alto, si provi ad incrementare
437
<link doc="ngx_http_core_module.xml" id="server_names_hash_bucket_size"/>.
438
</para>
439
440
<para>
441
Se su una data porta in ascolto c'e' un unico server, allora nginx saltera' del tutto
442
la verifica dei nomi dei server (e non costituira' le tabelle di hash per la porta
443
in questione).
444
C'e' una eccezione: se un nome di server e' una espressione regolare con
445
sezioni catturate, allora nginx dovra' svolgere l'espressione regolare per recuperare
446
le sezioni catturate.
447
</para>
448
449
</section>
450
451
452
<section id="compatibility"
453
name="Compatibilita'">
454
455
<para>
456
<list type="bullet">
457
458
<listitem>
459
Il nome di server speciale “<literal>$hostname</literal>” e' supportato
460
dalla versione 0.9.4 in poi.
461
</listitem>
462
463
<listitem>
464
Il nome vuoto “” e' il valore di default per il nome dei server
465
dalla versione 0.8.48 in poi.
466
</listitem>
467
468
<listitem>
469
Il riferimento tramite nome a sezioni catturate in un nome di server definito
470
tramite espressione regolare e' supportato dalla versione 0.8.25 in poi.
471
</listitem>
472
473
<listitem>
474
Le sezioni catturate in un nome di server definito tramite espressione regolare
475
sono supportate dalla versione 0.7.40 in poi.
476
</listitem>
477
478
<listitem>
479
Il nome di server vuoto “” e' supportato
480
dalla versione 0.7.12 in poi.
481
</listitem>
482
483
<listitem>
484
La definizione di nomi di server e di espressioni regolari tramite caratteri jolly
485
e' supportata dalla versione 0.6.25 in poi.
486
</listitem>
487
488
<listitem>
489
La definizione di nomi di server tramite espressioni regolari e' supportata
490
dalla versione 0.6.7 in poi.
491
</listitem>
492
493
<listitem>
494
Il formato con caratteri jolly <literal>example.*</literal> e' supportato
495
dalla versione 0.6.0 in poi.
496
</listitem>
497
498
<listitem>
499
Il formato speciale <literal>.example.org</literal> e' supportato
500
dalla versione 0.3.18 in poi.
501
</listitem>
502
503
<listitem>
504
Il formato con caratteri jolly <literal>*.example.org</literal> e' supportato
505
dalla versione 0.1.13 in poi.
506
</listitem>
507
508
</list>
509
</para>
510
511
</section>
512
513
</article>
514
515