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!

È stato utile?

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  _;
.

Fonte: http://nginx.org/en/docs/http/server_names.HTML

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

Da nginx listen docs

.

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 parametro default_server a listen, Nginx utilizzerà questa Direttiva server 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 ~. "";
}
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top