riscrittura del sottodominio nginx


8

Ancora un'altra domanda sulla regola di riscrittura di nginx

Come posso fare una riscrittura da http://www.*.domain.coma http://*.domain.com?

Grazie in anticipo

- Deb

MODIFICARE:

Mi dispiace di non aver visto la formattazione tessile rimossa il * dalla mia domanda. L'ho risolto ora. Quello che devo fare è andare da www.joe.domain.com a joe.domain.com, dove joe potrebbe essere qualsiasi parola.

Risposte:


7

Qual è il significato del periodo extra prima di domain.com? L'obiettivo è rimuovere il www dall'URL? Se è così, questo dovrebbe fare il trucco:

if ($host ~* www\.(.*)) {
  set $host_without_www $1;
  rewrite ^(.*)$ http://$host_without_www$1 permanent; # $1 contains '/foo', not 'www.mydomain.com/foo'
}

Non dimenticare di: sudo /etc/init.d/nginx restartcaricarlo

Fonte: NGINX Wiki


Mi dispiace di non aver visto la formattazione tessile rimossa il * dalla mia domanda. Quello che devo fare è andare da www.joe.domain.com a joe.domain.com, dove joe potrebbe essere qualsiasi parola. Quindi hai ragione, ho solo bisogno di rimuovere il www.
deb

12

È un bel trucco.

Il modo più veloce per quanto riguarda le prestazioni sarebbe

server {
  server_name www.domain.com;
  rewrite ^ http://domain.com$request_uri permanent;
}

Si salva una corrispondenza regex e due acquisizioni e si ottiene il vantaggio di nginx utilizzando le tabelle hash per cercare il blocco server corrispondente.

Inoltre, non è necessario riavviare nginx: è sufficiente ricaricare e chi vorrebbe avere più tempi morti del necessario?


+1 ha senso ... evviva
iainlbc

1
Questo non è un trucco. Nginx effettua una ricerca molto veloce attraverso i nomi dei server, quindi questo è davvero l'approccio più veloce.
Alexander Azarov,

1
@Alaz Che era in risposta alla risposta fornita da iainlbc, intendevo dire che la condizione if era un hack, non il server che cercavo di raccomandare.
Martin Fjordvald,


1

La soluzione di Martin F va bene, fino a quando non avrai centinaia di domini. Tuttavia, suggerirei di andare dall'altra parte: servire l'app su www.joe.domain.com e reindirizzare da joe.domain.com. Abbastanza sicuro che sia in un RFC.


Se hai nginx che gestisce molti domini, scrivi uno script per generare la configurazione. È un linguaggio di configurazione abbastanza semplice e non vuoi davvero eseguire l'analisi regex su ogni caricamento di pagina su un server ad alto traffico.
Martin Fjordvald,

In linea di principio, forse, ma l'hai profilato? Ho avuto alcuni siti di carico molto elevato utilizzando regex per tutte le richieste. Si prende cura. Inoltre, molti ambienti di hosting condiviso non presentano gravi problemi di prestazioni, ma presentano problemi di gestione. Entrambe le soluzioni potrebbero funzionare bene con parametri diversi.
Justin Alan Ryan,

Se hai centinaia di domini, usa regexp in nome_server: stackoverflow.com/questions/2498712/nginx-subdomain-rewrite
Alexander Azarov
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.