2011-01-06 6 views
25

So habe ich auf jede Beispielkonfiguration, die ich finden konnte, und doch jedes Mal, wenn ich versuche und eine Seite, die ssl erfordert, ich in einer Umleitungsschleife enden. Ich betreibe nginx/0.8.53 und Passagier 3.0.2.Nginx-Konfiguration führt zu endlosen Redirect-Schleife

Hier ist die ssl Config

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/$1 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; 
    } 
} 

Hier ist die nicht-ssl Config

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/$1 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; 
    } 
} 

Lassen Sie mich wissen, ob es irgendwelche zusätzlichen Informationen ist kann ich das Problem zu helfen, geben zu diagnostizieren.

+0

gehört http://serverfault.com –

+3

Brian, Ist das Problem gelöst? – Joseph

Antwort

5

Haben Sie versucht, "X-Forwarded-Proto" anstelle von X_FORWARDED_PROTO zu verwenden?

Ich habe ein Problem mit diesem Header zuvor, es hat keine Umleitungen verursacht, aber die Änderung dieses Headers hat es für mich behoben.

+0

hat es auch das Problem für mich gelöst. Danke;) – Luis

+0

Das gleiche gilt auch für mich. Das X_FORWARDED_PROTO hat nichts für eine bestimmte App getan, während X-Forwarded-Proto großartig funktioniert hat. Nginx Proxies zu einer Passenger Standalone Rails App auf dem Backend. – furinkan

30

Es ist Ihre Linie hier:

listen 443 default ssl; 

Änderung es zu:

listen 443; 
ssl on; 

Das werde ich den alten Stil nennen. Auch , dass zusammen mit

   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; 

den Trick für mich getan hat. Ich sehe jetzt, dass ich die reale IP-Linie vermisse, die Sie haben, aber bis jetzt wurde dieses mein Endlosschleife Problem mit ssl_requirement und ssl_enforcer los.

+3

Ich verwendete 'config.ssl = true' in einer Rails-Anwendung mit der ersten Version der SSL-Konfiguration für nginx und landete auch in einer Endlosschleife. Das Ändern der Konfiguration, um die ssl-Deklaration in einer separaten Zeile zu haben, löste das Problem für mich. Vielen Dank!!! – Adam

+0

Danke für diese Antwort! – NudeCanalTroll

+0

ssl auf; auf einer neuen Zeile die Endlosschleife für mich fixiert, wenn ich config.ssl = true –

4

Da Sie eine Rewrite-Anweisung haben in beiden ssl und nicht-ssl Abschnitte

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

gefunden Wo ist der Server-Abschnitt für blog..com ?? Könnte das die Ursache des Problems sein?

1

Wenn jemand anderes stolpert, habe ich versucht, http und https über den gleichen Server {} Block zu konfigurieren, aber nur die "listen 443" -Richtlinie hinzugefügt, dass die "diese Linie ist Standard und impliziert" bedeutet dass es auch auf 80 hören würde, tat es nicht. Das Uncommentment der "listen 80" -Zeile, so dass beide Listenzeilen vorhanden waren, korrigierte die Endlosschleife. Keine Ahnung, warum es überhaupt eine Umleitung bekommen hätte, aber es war so.

5

fand ich, dass es diese Linie war

proxy_set_header Host $http_host; 

die zu

proxy_set_header Host $host; 

According to the nginx documentation mithilfe von ‚$ http_host Sie das Bestehen der "unverändert Anfrage-Header" geändert werden soll.

3

Ich hatte ein ähnliches Problem für meine symfony2-Anwendung, wenn auch eine andere Ursache: Ich hatte fastcgi_param HTTPS off; eingestellt, wenn ich natürlich fastcgi_param HTTPS on; in meiner Nginx-Konfiguration benötigt.

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; 
    } 
+0

@Sahil statt Statt in den Kommentaren zu danken, legte eine upvote. Froh, dass es geholfen hat :) – k0pernikus

1

Für diejenigen, die desperatly suchen, warum ihre ownCloud halten, eine gute Konfigurationsdatei, die eine Umleitung Schleife trotz machen die ich gefunden habe, warum funktioniert es nicht.

Meine config: nginx + php-fpm + mysql auf einem frischen CentOS 6.5

wenn php-fpm und nginx, Standardberechtigung auf/var/lib/php Installation/session/root: Apache

php-fpm durch Nginx-Shop-PHP-Sitzung hier, wenn Nginx keine Autorisierung zu schreiben hatte, scheitern kläglich, um jede Login-Sitzung zu halten, was zu einer Endlosschleife führt.

Also fügen Sie einfach Nginx in Apache-Gruppe (usermod -a -G apache nginx) oder Besitzer dieses Ordners ändern.

Einen schönen Tag noch.

+0

endlich funktionierte diese Lösung für mich. Vielen Dank – Sahil

Verwandte Themen