réécriture du sous-domaine nginx

8

Encore une autre question de règle de réécriture nginx

Comment puis-je faire une réécriture de http://www.*.domain.comà http://*.domain.com?

Merci d'avance

- Deb

ÉDITER:

Je suis désolé de ne pas avoir vu la mise en forme textile supprimer le * de ma question. Je l'ai réparé maintenant. Ce que je dois faire, c'est aller de www.joe.domain.com à joe.domain.com, où joe pourrait être n'importe quel mot.

deb
la source

Réponses:

7

Quelle est l'importance de la période supplémentaire avant domain.com? L'objectif est-il de supprimer le www de l'URL? Si oui, cela devrait faire l'affaire:

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

N'oubliez pas de: sudo /etc/init.d/nginx restartle charger

Source: NGINX Wiki

iainlbc
la source
Je suis désolé de ne pas avoir vu la mise en forme textile supprimer le * de ma question. Ce que je dois faire, c'est aller de www.joe.domain.com à joe.domain.com, où joe pourrait être n'importe quel mot. Pour que vous ayez raison, il me suffit de supprimer le www.
deb
12

C'est un peu un hack.

Le moyen le plus rapide en termes de performances serait

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

Vous enregistrez une correspondance regex ainsi que deux captures et vous bénéficiez de l'avantage de nginx en utilisant des tables de hachage pour rechercher le bloc de serveur correspondant.

De plus, vous n'avez pas besoin de redémarrer nginx - un rechargement est tout ce qui est nécessaire, et qui voudrait avoir plus de temps d'arrêt que nécessaire?

Martin Fjordvald
la source
+1 est logique ... cheers
iainlbc
1
Ce n'est pas un hack. Nginx recherche très rapidement les noms de serveur, c'est donc l'approche la plus rapide.
Alexander Azarov,
1
@Alaz C'était en réponse à la réponse fournie par iainlbc, je voulais dire que la condition if était un hack, pas la recherche de serveur que j'ai recommandée.
Martin Fjordvald
1

La solution de Martin F est très bien, jusqu'à ce que vous ayez des centaines de domaines. Je suggérerais cependant d'aller dans l'autre sens - servez l'application sur www.joe.domain.com et redirigez depuis joe.domain.com. Je suis sûr que c'est dans un RFC.

Justin Alan Ryan
la source
Si nginx gère autant de domaines, écrivez un script pour générer la configuration. C'est un langage de configuration assez simple et vous ne voulez vraiment pas faire d'analyse syntaxique regex à chaque chargement de page sur un serveur à fort trafic.
Martin Fjordvald
En principe, peut-être, mais l'avez-vous profilé? J'ai eu des sites à très forte charge utilisant regex pour toutes les demandes. Ça prend soin. En outre, de nombreux environnements d'hébergement partagé n'ont pas de graves problèmes de performances, mais ont des problèmes de gestion. Les deux solutions pourraient bien fonctionner avec différents paramètres.
Justin Alan Ryan
Si vous avez des centaines de domaines, utilisez l'expression rationnelle dans nom_serveur: stackoverflow.com/questions/2498712/nginx-subdomain-rewrite
Alexander Azarov