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.

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


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?


+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.


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
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.