Vhosts jolly su Nginx


25

Ho appena installato Nginx sul mio server e sono estremamente soddisfatto dei risultati, tuttavia non riesco ancora a capire come inserire host virtuali con caratteri jolly.

Questa è la struttura [directory] che vorrei:

-- public_html (example.com)
---subdoamin 1 (x.example.com)
---subdomain 2 (y.example.com)

Come puoi vedere è piuttosto semplice, tuttavia, mi piacerebbe la possibilità di aggiungere domini semplicemente aggiungendo un record A per un nuovo sottodominio, che indicherà immediatamente la sottodirectory con lo stesso nome in public_html.

Ci sono cose sul web, tuttavia non mi sono mai imbattuto in qualcosa di simile.

Qualsiasi aiuto sarebbe molto apprezzato.


Non sono sicuro di cosa intendi per "sottodirectory con lo stesso nome" quando il tuo esempio ha due nomi diversi: subdomain 1/ x.example.com- puoi chiarire?
Nickgrim,

Vero, scusa non molto chiara. Diciamo che ho un sottodominio x.example.com, la sua directory sarebbe / public_html / x, tuttavia ho bisogno sia di example.com che di www.example.com per puntare a / public_html /
rorygilchrist il

Risposte:


39

Ti mostrerò.

Il file di configurazione

server {
  server_name example.com www.example.com;
  root www/pub;
}

server {
  server_name ~^(.*)\.example\.com$ ;
  root www/pub/$1;
}

File di test

Abbiamo due file di test:

$ cat www/pub/index.html 
COMMON

$ cat www/pub/t/index.html 
T

analisi

Nomi server statici:

$ curl -i -H 'Host: example.com' http://localhost/
HTTP/1.1 200 OK
Server: nginx/0.8.54
Date: Wed, 23 Mar 2011 08:00:42 GMT
Content-Type: text/html
Content-Length: 7
Last-Modified: Wed, 23 Mar 2011 07:56:24 GMT
Connection: keep-alive
Accept-Ranges: bytes

COMMON

$ curl -i -H 'Host: www.example.com' http://localhost/
HTTP/1.1 200 OK
Server: nginx/0.8.54
Date: Wed, 23 Mar 2011 08:00:48 GMT
Content-Type: text/html
Content-Length: 7
Last-Modified: Wed, 23 Mar 2011 07:56:24 GMT
Connection: keep-alive
Accept-Ranges: bytes

COMMON

E regexp nome server:

$ curl -i -H 'Host: t.example.com' http://localhost/
HTTP/1.1 200 OK
Server: nginx/0.8.54
Date: Wed, 23 Mar 2011 08:00:54 GMT
Content-Type: text/html
Content-Length: 2
Last-Modified: Wed, 23 Mar 2011 07:56:40 GMT
Connection: keep-alive
Accept-Ranges: bytes

T

Sfortunatamente non funziona. Tutti i sottodomini puntano solo a public_html. Ecco la seconda configurazione del server:server{ listen 80; server_name ~^(.*)\.example\.com$ ; location / { root /var/www/public_html/$1; index index.html index.htm index.php; } location ~ \.php$ { root $1; fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME /var/www/public_html/$1$fastcgi_script_name; include fastcgi_params; } }
rorygilchrist il

4
"purtroppo non funziona" non fornisce dettagli purtroppo. Cerca sempre nginx error.log per i dettagli. Ho aggiornato la mia risposta per mostrarti come funziona questa configurazione. Puoi vedere la mia versione di Nginx è la 0.8.54
Alexander Azarov del

Ha funzionato perfettamente per me proprio ora.
Claire Furney,

5

Questo file di configurazione Nginx di seguito consente i nomi host con caratteri jolly che instradano dinamicamente alla cartella corrispondente in /var/www/vhost/ e generano dinamicamente i rispettivi file di registro.

http://test1.wildcard.com/var/www/vhost/test1
                                                   /var/log/nginx/test1.wildcard.com-access.log                                                    /var/log/nginx/test1.wildcard.com-error.log

http://test2.wildcard.com/var/www/vhost/test2
                                                   /var/log/nginx/test2.wildcard.com-access.log                                                    /var/log/nginx/test2.wildcard.com-error.log

wildcard.conf

server {
  listen 80;
  listen [::]:80;

  #  Match everything except dot and store in $subdomain variable
  #  Matches test1.wildcard.com, test1-demo.wildcard.com
  #  Ignores sub2.test1.wildcard.com
  server_name ~^(?<subdomain>[^.]+).wildcard.com;

  root /var/www/vhost/$subdomain;

  access_log /var/log/nginx/$host-access.log;
  error_log  /var/log/nginx/$host-error.log;
}

Per favore, spiega la tua soluzione.
Andrew Schulman,

Questo sembra essere praticamente identico a una risposta esistente. Cosa aggiunge questo?
Michael Hampton

1
Fornisce un po 'più di specificità. Spero che aiuti tutti.
AnthumChris,

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.