nginx server_name carattere jolly o catch-all
-
13-11-2019 - |
Domanda
Ho un'istanza di nginx in esecuzione che serve diversi siti Web.Il primo è un messaggio di stato sull'indirizzo IP del server.Il secondo è una console di amministrazione attiva admin.domain.com
.Funzionano alla grande.Ora vorrei che tutte le altre richieste di dominio andassero a un singolo index.php
- Ho un sacco di domini e sottodomini ed è poco pratico elencarli tutti in una configurazione nginx.
Finora ho provato a impostare server_name
A *
ma ciò non è riuscito a causa di un carattere jolly non valido. *.*
funziona finché non aggiungo gli altri blocchi del server, quindi immagino che sia in conflitto con essi.
Esiste un modo per eseguire un blocco server catch-all in nginx dopo che sono stati definiti altri siti?
NB.Non sono uno spammer, questi sono siti autentici con contenuti utili, sono semplicemente gestiti dallo stesso CMS da un database!
Soluzione
Cambia l'opzione Ascolta in questo nel tuo blocco di server Catch-all.(Aggiungi default_server
) prenderà tutte le tue connessioni non definite (nella porta specificata).
listen 80 default_server;
.
Se si desidera premere tutto su indice.php se il file o la cartella non esiste;
try_files $uri /$uri /index.php;
. Altri suggerimenti
Un semplice sottolineatura funziona pure:
server_name _;
.
Questo funzionerà:
server_name ~^(.+)$
. per me definisci default_server non funzionava.L'ho risolto per
server_name ~^.*$
.
Usando l'espressione regolare di tutti.
Ora puoi usare la maschera:
server {
listen 80;
server_name *.example.org;
...
}
server {
listen 80;
server_name mail.*;
...
}
.
Guarda di più qui: http://nginx.org/en/docs/http/server_names.html
Solo 1 Direttiva server
.Il parametro predefinito_server, se presente, causerà il server a Diventa il server predefinito per l'indirizzo specificato: Porta. Se nessuno delle direttive hanno il parametro predefinito_server del primo Server con l'indirizzo: Porta Coppia sarà il server predefinito per questo Coppia.
Se hai solo 1 direttiva
server
, che gestirà tutte le richieste, non è necessario impostare nulla.
.Direttiva Multiple
server
Se si desidera corrispondere a tutte le richieste con la direttiva
server
specificata, basta aggiungere il parametrodefault_server
alisten
, Nginx utilizzerà questa Direttivaserver
come predefinita..server { listen 80 default_server; }
.Informazioni su
server_name _;
Da nginx docs
.In Catch-all Esempi server Lo strano Nome "_" può essere visto:
.server { listen 80 default_server; server_name _; return 444; }
Non c'è niente di speciale in questo nome, è solo una delle miriade di nomi di dominio non validi che non si intersecano mai con alcun nome reale. Altri nomi non validi come "-" e "! @ #" Possono essere ugualmente utilizzati.
Non importa quale
server_name
impostato, è solo un nome di dominio non valido .
Se vuoi anche catturare le richieste con vuoto Host
intestazione (che è consentita in HTTP/1.0) puoi usare sia regex che vuoto server_name
:
server {
listen 80;
server_name ~. "";
}