2011-01-06 16 views
25

Così ho esaminato ogni configurazione di esempio che ho trovato e tuttavia ogni volta che provo a visualizzare una pagina che richiede ssl, finisco in un ciclo di reindirizzamento. Sto utilizzando nginx/0.8.53 e il passeggero 3.0.2.La configurazione Nginx porta al ciclo di reindirizzamento infinito

Ecco la configurazione 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; 
    } 
} 

Ecco il 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; 
    } 
} 

Fatemi sapere se c'è qualsiasi informazioni che posso dare per aiutare a diagnosticare il problema.

+0

appartiene http://serverfault.com –

+3

Brian, 'questo problema risolto? – Joseph

risposta

5

Hai provato a utilizzare "X-Forwarded-Proto" invece di X_FORWARDED_PROTO?

Ho incontrato un problema con questa intestazione prima, non causava reindirizzamenti, ma la modifica di questa intestazione lo ha risolto per me.

+0

ha risolto il problema anche per me. Grazie;) – Luis

+0

Lo stesso per me. X_FORWARDED_PROTO non ha fatto nulla per una particolare app, mentre X-Forwarded-Proto ha funzionato alla grande. nginx proxy su un'app per pass autonome sul back-end. – furinkan

30

E 'la linea qui:

listen 443 default ssl; 

modificarla in:

listen 443; 
ssl on; 

Questa chiamo la vecchio stile. inoltre, che insieme con

   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; 

ha fatto il trucco per me. Ora vedo che mi manca la vera linea IP che hai, ma finora mi sono liberato del mio problema di loop infinito con ssl_requirement e ssl_enforcer.

+3

Stavo usando 'config.ssl = true' in un'applicazione Rails con la prima versione della configurazione ssl per nginx e finiva anche in un ciclo infinito. Cambiare la configurazione per fare in modo che la dichiarazione ssl su una linea separata risolva il problema per me. Grazie!!! – Adam

+0

Grazie per questa risposta! – NudeCanalTroll

+0

ssl on; su una nuova riga ho risolto il ciclo infinito per me quando ho cambiato config.ssl = true –

4

Dal momento che avete una dichiarazione riscrittura trovato in entrambe le SSL e non SSL sezioni

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

Dove si trova la sezione server per blog..com ?? Potrebbe essere la fonte del problema?

1

Nel caso in cui qualcun altro si imbatta in questo, stavo tentando di configurare sia http e https tramite lo stesso blocco server {}, ma solo aggiunto la direttiva "ascolta 443" ritenendo che "questa linea fosse predefinita e implicita" significava che avrebbe anche ascoltato l'80, no. Scomunicando la linea "listen 80" in modo che entrambe le linee di ascolto fossero presenti, il loop infinito veniva corretto. Non ho idea del motivo per cui avrebbe persino avuto un reindirizzamento, ma è successo.

5

ho scoperto che era questa linea

proxy_set_header Host $http_host; 

che dovrebbe essere cambiato in

proxy_set_header Host $host; 

According to the nginx documentation utilizzando '$ HTTP_HOST si sta passando la "richiesta-header invariato".

3

Avevo un problema simile per la mia applicazione symfony2, anche se forma una causa diversa: avevo impostato fastcgi_param HTTPS off; quando, ovviamente, avevo bisogno di fastcgi_param HTTPS on; nella mia configurazione di 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 Invece di ringraziare nei commenti, inserire un upvote. Sono contento che mi abbia aiutato :) – k0pernikus

1

Per coloro che sono alla ricerca assolutamente scrivere perché i loro owncloud continuare a fare un loop di reindirizzamento a dispetto di avere un buon file di configurazione, ho trovato il motivo per cui non funziona.

mio config: nginx + php-FPM + mysql su una nuova CentOS 6.5

durante l'installazione di php-fpm e nginx, autorizzazione predefinita/var/lib/php/session/è root: apache

php-fpm attraverso la sessione php di nginx store qui, se nginx non ha l'autorizzazione per scriverlo fallire miseramente per mantenere qualsiasi sessione di login, risultando in un ciclo infinito.

Quindi è necessario aggiungere nginx nel gruppo apache (usermod -a -G apache nginx) o cambiare la proprietà di questa cartella.

Buona giornata.

+0

finalmente questa soluzione ha funzionato per me. Grazie – Sahil

Problemi correlati