2014-09-23 52 views
1

我的網站已啓動並正在運行,但無法訪問Django管理頁面。每次我嘗試訪問/admin/時,它都會將我重定向到https主頁。使用SSL時,Django管理頁面重定向到使用Gunicorn + Nginx的主頁

我第一次使用Gunicorn + Nginx,所以我很確定它與SSL設置有關,但不知道如何配置它。

這裏是我的Nginx的配置文件

upstream app_server { 
    server 104.131.57.229:9000 fail_timeout=0; 
} 

server { 
    listen 80; 
    return 301 https://mysite.com/; 
} 
server { 
    listen 443 ssl; 
    ssl on; 
    ssl_certificate /etc/nginx/ssl/www_mysite_com.crt; 
    ssl_certificate_key /etc/nginx/ssl/mysite.com.key; 
    ssl_protocols  SSLv3 TLSv1 TLSv1.1 TLSv1.2; 
    ssl_ciphers   HIGH:!aNULL:!MD5; 
    server_name mysite.com; 

    root /home/django/mysite_project/mysite/mysite; 
    access_log /var/log/nginx/access.log; 
    error_log /var/log/nginx/error.log; 
    client_max_body_size 4G; 
    keepalive_timeout 5; 

    location /static/ { 
     autoindex on; 
     alias /home/django/mysite_project/mysite/static/; 
    } 

    location/{ 
     proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; 
     proxy_set_header Host $http_host; 
     proxy_redirect off; 
     proxy_pass http://app_server; 
    } 

    error_page 500 502 503 504 /500.html; 
    location = /500.html { 
     root /home/django/mysite_project/mysite/templates; 
    } 
} 

這裏是我的管理urls.py。相當標準:

from django.conf.urls import patterns, include, url 

from django.contrib import admin 

admin.autodiscover() 

urlpatterns = patterns('', 
    url(r'^admin/', include(admin.site.urls)), 
    # other urls 
    ) 

我可以用我的網站網址9000端口訪問Django管理,這是正常的http。也許這是一個安全問題。然而,當我以這種方式訪問​​管理員時,沒有CSS樣式,所以很難瀏覽。

我運行:提前

Ubuntu 14.04 
Django 1.6.5 
Python 3.4.0 
Nginx 1.6.2 
Gunicorn 19.1.1 

感謝。

+0

@AaronYsidoro你爲Django設置了[SECURE_PROXY_SSL_HEADER](https://docs.djangoproject.com/en/1.4/ref/settings/#std:setting-SECURE_PROXY_SSL_HEADER)嗎? – cbrendanprice 2014-09-23 21:02:48

+0

當您獲得重定向時,您是通過http://還是https://訪問您的網站? (它只能在上面的配置中使用https://) – taleodor 2014-09-24 04:58:46

+0

@ chuk2bp我將該設置添加到我的'settings.py'中,但它仍然將我重定向到主頁,並且不讓我訪問Django Admin。任何其他想法? – 2014-09-24 13:23:56

回答

0

解決我的問題是,在nginx config file,我需要改變http重定向配置重定向到URL請求中https,而不是https home page

我第一次將此添加到我的Django的settings.py所以Django的信任HTTPS從Nginx的代理:

SECURE_PROXY_SSL_HEADER = ('HTTP_X_FORWARDED_PROTO', 'https') 

接下來,我改變了從http每次重定向到https home page這個原代碼:

server { 
    listen 80; 
    return 301 https://mysite.com/; 
} 

爲了這個新的代碼會被重定向到所請求的網址,但該網址的https

server { 
    listen 80; 
    rewrite^https://mysite.com$request_uri? permanent; 
} 

現在Django會正確(或Nginx相當),將正確重定向到請求的URL。