2011-01-06 23 views
25

Tak więc sprawdziłem każdą przykładową konfigurację, jaką mogłem znaleźć, a jednak za każdym razem, gdy próbuję przeglądać stronę wymagającą ssl, kończę w pętli przekierowania. Używam wersji nginx/0.8.53 i wersji 3.0.2.Konfiguracja Nginx prowadzi do nieskończonej pętli przekierowania

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

Oto non-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; 
    } 
} 

Daj mi znać, jeśli istnieje jakiekolwiek dodatkowe informacje mogę podać w celu zdiagnozowania problemu.

+0

należący do http://serverfault.com –

+3

Brian, czy jest to problem został rozwiązany? – Joseph

Odpowiedz

5

Czy próbowałeś używać "X-Forwarded-Proto" zamiast X_FORWARDED_PROTO?

Wystąpił problem z tym nagłówkiem wcześniej, nie powodował on przekierowań, ale zmiana tego nagłówka naprawiła to dla mnie.

+0

to także rozwiązało problem dla mnie. Dzięki;) – Luis

+0

To samo dotyczy mnie. X_FORWARDED_PROTO nie zrobił nic dla konkretnej aplikacji, podczas gdy X-Forwarded-Proto działało świetnie. proxy proxy nginx do aplikacji samodzielnej szyny Pasażera na zapleczu. – furinkan

30

To linia tutaj:

listen 443 default ssl; 

go zmienić na:

listen 443; 
ssl on; 

to zadzwonię do starego stylu. również, że wraz z

   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; 

wystarczyły dla mnie. Teraz widzę, że brakuje mi prawdziwej linii IP, ale do tej pory pozbyłem się mojego nieskończonego problemu z pętlami z ssl_requirement i ssl_enforcer.

+3

Używałem 'config.ssl = true' w aplikacji Rails z pierwszą wersją konfiguracji ssl dla nginx, a także znalazłem się w nieskończonej pętli. Zmiana konfiguracji, która ma deklarację ssl w osobnej linii, rozwiązała dla mnie problem. Dzięki!!! – Adam

+0

Dzięki za tę odpowiedź! – NudeCanalTroll

+0

ssl na; w nowej linii naprawił nieskończoną pętlę dla mnie, gdy zmieniłem config.ssl = true –

4

Skoro masz oświadczenie przepisywania znaleźć w obu ssl i nie-ssl sekcjach

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

gdzie jest sekcja serwer dla blog..com ?? Czy to może być źródłem problemu?

1

W przypadku, gdy ktoś inny natknie się na to, próbowałem skonfigurować zarówno http, jak i https przez ten sam blok serwera {}, ale dodałem tylko dyrektywę "listen 443" uważając, że "ta linia jest domyślna i domniemana" że też będzie nasłuchiwał na 80, ale nie. Odkomentowanie linii "listen 80", tak aby obie linie słuchania były obecne, skorygowało nieskończoną pętlę. Nie mam pojęcia, dlaczego w ogóle udało mu się uzyskać przekierowanie, ale tak się stało.

5

Okazało się, że to właśnie ta linia

proxy_set_header Host $http_host; 

który powinien zostać zmieniony na

proxy_set_header Host $host; 

According to the nginx documentation za pomocą „$ HTTP_HOST jesteś minięciu "niezmienioną nagłówka żądania".

3

Miałem podobny problem dla mojej aplikacji symfony2, ale z innego powodu: ustawiłem fastcgi_param HTTPS off;, kiedy potrzebowałem oczywiście fastcgi_param HTTPS on; w mojej konfiguracji 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; 
    } 
+0

@Sahil Zamiast podziękować w komentarzach, wstaw w upvote. Cieszę się, że pomogło :) – k0pernikus

1

Dla tych, którzy szukają desperatly dlaczego ich ownCloud popełniają pętlę przekierowania pomimo posiadania dobrego plik konfiguracyjny, Znalazłem dlaczego to nie działa.

Mój config: nginx + php-fpm + mysql na świeżym CentOS 6.5

podczas instalacji php-fpm i nginx, domyślną zgodę na/var/lib/php/sesji/root: apache

php-fpm poprzez sesję php-fpm do sklepu php-fpm tutaj, jeśli nginx nie ma uprawnień do zapisu, niestety nie będzie w stanie utrzymać sesji logowania, co spowoduje nieskończoną pętlę.

Po prostu dodaj nginx do grupy apache (usermod -a -G apache nginx) lub zmień własność tego folderu.

Miłego dnia.

+0

w końcu to rozwiązanie sprawdziło się. Dzięki – Sahil

Powiązane problemy