La configuration de Nginx conduit à une boucle de redirection sans fin

donc j'ai regardé chaque configuration d'échantillon que j'ai pu trouver et pourtant chaque fois que j'essaie de voir une page qui nécessite ssl, je me retrouve dans une boucle de redirection. Nginx / 0.8.53 et passager 3.0.2.

Voici la config ssl

server  {
  listen 443 default ssl;
  server_name <redacted>.com www.<redacted>.com;
  root /home/app/<redacted>/public;
  passenger_enabled on;
  rails_env production;  
  ssl_certificate      /home/app/ssl/<redacted>.com.pem;
  ssl_certificate_key  /home/app/ssl/<redacted>.key;

  proxy_set_header  X-Real-IP  $remote_addr;
  proxy_set_header  X_FORWARDED_PROTO https;
  proxy_set_header  X-Forwarded-For $proxy_add_x_forwarded_for;
  proxy_set_header  Host $http_host;
  proxy_set_header  X-Url-Scheme $scheme;
  proxy_redirect    off;
  proxy_max_temp_file_size 0;

  location /blog {
    rewrite ^/blog(/.*)?$ http://blog.<redacted>.com/ permanent;
  }

  location ~* .(js|css|jpg|jpeg|gif|png)$ {
    if (-f $request_filename) {
      expires      max;
      break;
    }
  }

  error_page   500 502 503 504  /50x.html;
  location = /50x.html {
    root   html;
  }
}

Voici la config non-ssl

server  {
  listen 80;
  server_name <redacted>.com www.<redacted>.com;
  root /home/app/<redacted>/public;
  passenger_enabled on;
  rails_env production;  

  location /blog {
    rewrite ^/blog(/.*)?$ http://blog.<redacted>.com/ permanent;
  }

  location ~* .(js|css|jpg|jpeg|gif|png)$ {
    if (-f $request_filename) {
      expires      max;
      break;
    }
  }

  error_page   500 502 503 504  /50x.html;
  location = /50x.html {
    root   html;
  }
}

faites-moi savoir s'il y a des informations supplémentaires que je peux donner pour aider à diagnostiquer le problème.

26
demandé sur brianthecoder 2011-01-06 18:26:54

8 réponses

c'est votre ligne ici:

  listen 443 default ssl;

changer pour:

listen 443;
ssl on;

C'est ce que j'appellerai l'ancien style. En outre ,cela avec

              proxy_set_header X_FORWARDED_PROTO https;
              proxy_set_header  X-Forwarded-For $proxy_add_x_forwarded_for;
              proxy_set_header  Host $http_host;
              proxy_set_header  X-Url-Scheme $scheme;
              proxy_redirect    off;
              proxy_max_temp_file_size 0;

a fait l'affaire pour moi. Je vois maintenant que je manque la vraie ligne IP que vous avez, mais jusqu'à présent, cela m'a débarrassé de mon problème de boucle infinie avec ssl_requirement et ssl_enforcer.

30
répondu pjammer 2011-01-27 22:01:35

j'ai trouvé que c'était cette ligne

 proxy_set_header  Host $http_host;

qui doit être remplacé par

 proxy_set_header  Host $host;

selon la documentation de nginx en utilisant '$http_host vous passez le "en-tête de requête inchangé".

6
répondu toxaq 2012-08-13 10:04:54

avez-vous essayé D'utiliser" X-Forwarded-Proto " au lieu de X_FORWARDED_PROTO?

j'ai rencontré un problème avec cet en-tête avant, il ne causait pas de redirections, mais changer cet en-tête l'a corrigé pour moi.

5
répondu britg 2011-01-06 16:00:48

puisque vous avez une déclaration de réécriture trouvée dans les sections ssl et non-ssl

location /blog {
  rewrite ^/blog(/.*)?$ http://blog.<redacted>.com/ permanent;
}

Où est la section Serveur pour blog..com??? Est-ce là la source du problème?

4
répondu Peter Petrik 2011-05-13 05:09:16

j'ai eu un problème similaire pour mon application symfony2, bien que la cause soit différente: j'avais placé fastcgi_param HTTPS off; quand j'avais bien sûr besoin de fastcgi_param HTTPS on; dans ma configuration nginx.

    location ~ ^/(app|app_dev|config)\.php(/|$) {
            satisfy any;
            allow all;
            fastcgi_pass unix:/var/run/php5-fpm.sock;
            fastcgi_split_path_info ^(.+\.php)(/.*)$;
            include fastcgi_params;
            fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
            fastcgi_param HTTPS on;
    }
3
répondu k0pernikus 2014-04-23 16:34:33

dans le cas où quelqu'un d'autre trébucherait sur ce point, j'ai essayé de configurer à la fois http et https via le même bloc de serveur {}, mais j'ai seulement ajouté la directive" listen 443 "croyant que la" cette ligne est par défaut et implicite " signifiait qu'elle écouterait aussi sur 80, ce qui n'était pas le cas. Le découplage de la ligne" listen 80 " pour que les deux lignes listen soient présentes A CORRIGÉ la boucle infinie. Aucune idée de pourquoi il aurait même été faire une redirection, mais il l'a fait.

1
répondu Brian J. Miller 2012-07-25 14:52:39

pour ceux qui cherchent désespérément pourquoi leur propre cloud continue à faire une boucle de redirection malgré un bon fichier de configuration, j'ai trouvé pourquoi cela ne fonctionne pas.

ma config: nginx + php-fpm + mysql sur une nouvelle centos 6.5

lors de l'installation de php-fpm et nginx, permission par défaut sur / var/lib / php / session / is root: apache

php-fpm via nginx store session php ici, si nginx n'avait pas l'autorisation de écrire échouer lamentablement à garder toute session de connexion, résultant dans une boucle infinie.

donc juste ajouter nginx dans le Groupe apache (usermod-A-G apache nginx) ou changer la propriété de ce dossier.

bonne journée.

1
répondu user3613475 2014-06-18 16:47:13

X_FORWARDED_PROTO comme dans votre fichier peut provoquer des erreurs et il l'a fait dans mon cas. X-Forwarded-Proto est correct alors que les hiphens sont plus importants que les majuscules ou les minuscules.

, Vous pouvez éviter ces problèmes en s'en tenant à des conventions ;)

voir aussi ici: en-têtes HTTP personnalisés: conventions de nommage et ici: http://www.ietf.org/rfc/rfc2047.txt

0
répondu Steven 2017-05-23 12:03:04