Nginx: rediriger l'adresse IP vers le nom de domaine

12

Avec la configuration Nginx suivante:

server {
    listen 80;
    listen [::]:80 default_server ipv6only=on;

    server_name isitmaintained.com;

    ...
}

server {
    listen 178.62.136.230:80;
    server_name 178.62.136.230;

    add_header X-Frame-Options "SAMEORIGIN";

    return 301 $scheme://isitmaintained.com$request_uri;
}

J'essaie de rediriger http://178.62.136.230/vers http://isitmaintained.com/ mais lorsque je déploie cette configuration, je me retrouve avec l'un Redirect loopou les deux de ces liens.

Qu'est-ce que je fais mal?

Matthieu Napoli
la source

Réponses:

30

Essayez ceci sur le deuxième bloc:

server {
    listen 80;
    server_name 178.62.136.230;

    return 301 $scheme://isitmaintained.com$request_uri;
}

Le problème est que la deuxième listendirective de bloc serveur est plus spécifique que le premier bloc serveur, elle est donc toujours utilisée. Et comme le deuxième bloc est le seul hôte virtuel pour cette listenspécification, il est toujours utilisé.

Tero Kilkanen
la source
Ça a du sens. Mais lorsque j'applique cela, j'obtiens l'erreur suivante: nginx: [emerg] could not build the server_names_hash, you should increase server_names_hash_bucket_size: 32:( Et cela n'a pas de sens car mon nom de domaine n'est pas si long.
Matthieu Napoli
Eh bien, pour une raison quelconque, votre configuration nécessite plus d'espace de stockage pour les noms de serveur hôte virtuel dans nginx, vous devez donc simplement augmenter le paramètre.
Tero Kilkanen
Mes excuses pour ne pas avoir essayé directement, j'étais sûr qu'il y avait quelque chose de mal. Mais vous aviez raison, la redirection fonctionne maintenant! Un merci très chaleureux :)
Matthieu Napoli
vous êtes F ***** homme de droite, résolu un de mes problèmes, a voté, thnx
a_m_dev
3

Tu étais proche. Sa réécriture que vous recherchez.

server {
    listen 178.62.136.230:80;
    server_name 178.62.136.230 isitmaintained.com;

    rewrite  ^/(.*)$  http://www.isitmaintained.com/$1 permanent;
}
server {
    listen 80;
    server_name www.isitmaintained.com;
    # Serve Stuff Here.
}
ticoombs
la source
5
Ceci rewriteet returnplus encore font exactement la même chose.
Tero Kilkanen