web-dev-qa-db-fra.com

Obtenir une erreur "trop ​​nombreuses redirigations" avec la règle Nginx Rewrite

J'essaie de réécrire l'URL de domaine qui cible mon site de telle sorte que tous les noms de domaine soient réécrites sur www.example.com et avoir la configuration suivante:

bloc mysite

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

            server_name _;
            rewrite ^ $scheme://www.example.com$request_uri permanent;

    location / {

            # Allow for large file uploads
              client_max_body_size 0;

                proxy_http_version 1.1;
                proxy_pass http://mysite;
                proxy_buffering    off;

                proxy_set_header   X-Real-IP $remote_addr;
                proxy_set_header   X-Scheme $scheme;
                proxy_set_header   X-Forwarded-For $proxy_add_x_forwarded_for;
                proxy_set_header   Host $http_Host;
    }
}

Le bloc de serveur Tomcat

server {
        listen        80;

        root /opt/site2/www;
        index index.html index.htm;

        # Redirecto root requests to Share
        rewrite ^/$ /share;

        location / {
            # First attempt to serve request as file, then
            # as directory, then fall back to displaying a 404.
            try_files $uri $uri/ /index.html;
        }

        # redirect server error pages to the static page /50x.html
        error_page 502 503 504 /maintenance.html;
            location = /maintenance.html {
            root   /opt/site2/www;
        }

        location /share {

            # Allow for large file uploads
            client_max_body_size 0;

            # Proxy all the requests to Tomcat
            proxy_http_version 1.1;
            #proxy_buffering off;
            proxy_pass http://backend;
            proxy_set_header Host $http_Host;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header X-Forwarded-Host $http_Host;
            proxy_set_header X-Forwarded-Server $Host;
        }

}

dans le bloc serveur, je reçois une erreur "trop ​​nombreuses redirigations".

6
Dark Star1

À l'heure actuelle, toutes les demandes vont frapper ce bloc serveur:

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

    server_name _; # This doesn't do anything
    rewrite ^ $scheme://www.example.com$request_uri permanent;

    # Rest of file irrelevant
}

Parce que: Aucun bloc de serveur n'a de valide nom_serveur (Par conséquent, il n'y aura jamais de nom de nom d'hôte) et il s'agit du défaut_Server.

Utilisez des noms de serveur appropriés

Par conséquent, pour toujours rediriger les demandes frapper le serveur à un nom d'hôte donné, assurez-vous qu'il est un bloc de serveur explicitement pour www.example.com:

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

    server_name www.example.com;

    # Everything else from "Tomcat server block" 
    # or the proxy_pass config as appropriate
}

Et rediriger les demandes avec tout autre nom d'hôte:

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

    return 301 http://www.example.com$request_uri;

    # Nothing else, because it wouldn't do anything
}

dans la note ci-dessus que return 301 est utilisé comme il est considéré comme une meilleure pratique qu'une règle de réécriture inconditionnelle.

6
AD7six