2011-01-31 9 views
15

Nginx'in arkasında FastCGI çalıştırıyorum ve URL'ye HTTPS aracılığıyla erişildiğinde bunu tespit etmem gerekiyor. Ancak, Django web uygulamam her zaman bağlantının HTTP olduğunu bildiriyor (request.is_secure() == False). Ancak, SSL doğru şekilde kuruldu ve https: // adreslerimin SSL denetleyicisi ile güvende olduğunu doğruladım.NGINX'in arkasındaki FastCGI uygulaması, HTTPS güvenli bağlantının kullanıldığını algılayamıyor

Django, isteğin bir HTTPS URL'sinden ne zaman doğru olduğunu algılamasını nasıl sağlayabilirim?

Benim Nginx ayarlar şunlardır:

http { 
    include  mime.types; 
    default_type application/octet-stream; 

    sendfile  on; 
    keepalive_timeout 65; 

    gzip on; 

    server { 
     listen  80; 
     listen  443 default ssl; 
     ssl_certificate /home/webapp/ssl.crt 
     ssl_certificate_key /home/webapp/ssl.key 

     server_name myapp.com; 
     access_log /home/webapp/access.log 
     error_log /home/webapp/error.log 

     root /home/mywebapp; 

     location/{ 
       # host and port to fastcgi server      
      fastcgi_pass 127.0.0.1:8801; 
      fastcgi_param PATH_INFO $fastcgi_script_name; 
      fastcgi_param REQUEST_METHOD $request_method; 
      fastcgi_param QUERY_STRING $query_string; 
      fastcgi_param SERVER_NAME $server_name; 
      fastcgi_param SERVER_PORT $server_port; 
      fastcgi_param SERVER_PROTOCOL $server_protocol; 
      fastcgi_param CONTENT_TYPE $content_type; 
      fastcgi_param CONTENT_LENGTH $content_length; 
      fastcgi_pass_header Authorization; 
      fastcgi_intercept_errors off; 
     } 
    } 
} 

Birlikte Django FastCGI işlemi başlatmak: Make

python /home/webapp/manage.py runfcgi method=threaded host=127.0.0.1 port=8801 pidfile=/home/webapp/fastcgi.pid 

cevap

13

nginx için Yuji için 443.

+0

Ah, teşekkürler. Bu parametreyi sadece 443 numaralı bağlantı noktası için ayarlamanın bir yolu var mı? Yani, tüm yapılandırma bloğunu kopyalamak zorunda kalmadan mı? –

+0

Aşağıda gösterildiği gibi ... portu 80 için de "off" olarak ayarlamalısınız. –

30

teşekkür üzerinde bağlantıları için fastcgi_param HTTPS on gönderiyor emin cevap. Ben koşullu $ SERVER_PORT bağlı veya HTTPS kapalı HTTPS enjekte benim sunucu bloğu güncelledik: hile yok

{

server { 
    listen  80; 
    listen  443 default ssl; 

    if ($server_port = 443) { set $https on; } 
    if ($server_port = 80) { set $https off; } 

    ssl_certificate /home/webapp/ssl.crt 
    ssl_certificate_key /home/webapp/ssl.key 

    server_name myapp.com; 
    access_log /home/webapp/access.log 
    error_log /home/webapp/error.log 

    root /home/mywebapp; 

    location/{ 
      # host and port to fastcgi server      
     fastcgi_pass 127.0.0.1:8801; 
     fastcgi_param PATH_INFO $fastcgi_script_name; 
     fastcgi_param REQUEST_METHOD $request_method; 
     fastcgi_param QUERY_STRING $query_string; 
     fastcgi_param SERVER_NAME $server_name; 
     fastcgi_param SERVER_PORT $server_port; 
     fastcgi_param SERVER_PROTOCOL $server_protocol; 
     fastcgi_param CONTENT_TYPE $content_type; 
     fastcgi_param CONTENT_LENGTH $content_length; 
     fastcgi_pass_header Authorization; 
     fastcgi_intercept_errors off; 

     fastcgi_param HTTPS $https; 
    } 
} 

}

+0

ah, paylaşım için teşekkürler! –

+10

$ https şimdi varsayılan olarak 1.1.11'den beri nginx tarafından tanımlandı. –

+0

* çok * iyi cevap. nginx/1.0.15 kurulumuna gitmenin yolu – Ben

İlgili konular