為什麼這篇Django uwsgi鄉民發文收入到精華區:因為在Django uwsgi這個討論話題中,有許多相關的文章在討論,這篇最有參考價值!作者archon (內湖流川楓)看板Python標題[問題] SSL for Django + Ng...
各位大大好,小的只有一個需求,
希望一個放在 AWS 上的 django 網站能走 https。
目前在網路上收集到的方法有兩套:
1. Nginx <--> socket <--> uWSGI <--> Django
2. runsslserver
第一種方法我基本的設定是照 http://goo.gl/ZusnCE 走,
先透過 Nginx 跟 uWSGI 看到 http 的網頁沒問題,
但接著要切到 https 就試不出來了 (哭)
網路上有蠻多教學的,比方說這篇 https://goo.gl/kEh55q
不外乎就是 Nginx 設 port 80 reroute 到 443,
這部份我好像有試出來,在瀏覽器上直接打 IP 連結會轉到 https,
但網站的內容就出不來了...
uWSGI 跟 Django 要不要設定則是眾說紛云,
看過一種說法是 Nginx 對外走 https,對 uWSGI 走 http,
所以 uWSGI 跟 Django 都不用做任何設定,
我很喜歡這種做法,但目前還沒找到這種做法 Nginx 的確切設定是什麼...
另一種說法則複雜許多,Nginx 要抽換掉 proxy header:
# nginx.conf
location / {
proxy_pass http://localhost:8000/;
proxy_redirect off;
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
uWSGI 設定要改成支援 https:
# uwsgi.ini
env = HTTPS=on
Django settings 也要修改:
SECURE_PROXY_SSL_HEADER = ('HTTP_X_FORWARDED_PROTO', 'https')
SESSION_COOKIE_SECURE = True
CSRF_COOKIE_SECURE = True
SECURE_SSL_REDIRECT = True
這種我也試了,還是無法,找不到問題所在... orz
第二種方法 https://github.com/teddziuba/django-sslserver
的確實我輕易地獲得了 https 的連線,但這個 github 專案明明白白寫著,
this should not be used for production setups.
This app is intended for special use-cases.
Most people should instead do a proper production deplyoment
where a real webserver such as Apache or NGINX handles SSL.
搞得我也不敢隨意使用這種作法...
想請問... 有沒有在這方面有經驗的大大能給我一條明路?
附帶一提,其實我真正想要的,是透過 javascript 拿到裝置 gps 的座標,
但 Chrome 的只允許 https 連線可以用這 API...
如果有方法能繞過這個限制,我也都願意嚐試,
當然,能把 https 跑起來還是最好了 QwQ
--
喜歡拍照的正妹們,趕快來找我報到吧!!!
https://flic.kr/s/aHsk8JbB2C
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 125.227.30.252
※ 文章網址: https://www.ptt.cc/bbs/Python/M.1522486034.A.3FC.html
在 Nginx <--> socket <--> uWSGI <--> Django 架構下走 http 會通,
所以我自己覺得 uWSGI <--> Django 之間的設定是 ok 的,
但走 https 後,Nginx 把 http request 轉到 port 443,
uWSGI 跟 Django 到底需不需要改變設定,這是我還沒弄懂的地方... orz
之前我疑似看到 EB 很好設 https,但當我打開 AWS 控制台時,
看到的全是 python 2.7,就縮了... (汗
我自己 Nginx 設定檔的是按照第一個範例下去改成的,內容如下
location / {
include uwsgi_params;
uwsgi_pass unix:/run/uwsgi/firstsite.sock;
# 以下是新增的部份
proxy_redirect off;
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
其實這也是我在網路上找解法遇到一個很大的問題,
Django 走 https 的教學,感覺大家的 Nginx 都是先處在某個運作情況下,
修改的部份到底能不能適用第一個範例設定的環境,我心中充滿了無限的問號 orz
之前有翻到這個資源,但可能是我對網路的概念太貧乏了,還是沒能把問題解決 orz
http://uwsgi-docs.readthedocs.io/en/latest/HTTPS.html
想請問... 依您的經驗,要走 https,除了 Nginx 之外,
uWSGI 跟 Django project 也都需要做相對應的設定的,是嗎?
想說沒憑證只是會跳出這個連線不安全的訊息而已...
會是這個問題嗎... (汗
剛才找了一下,發現 AWS 有 SSL 的服務,感謝大大提供了這個訊息,
我彷彿又看到了一條路... 先去試試看!!
我再研究一下...
感謝各位大大的幫助,我終於把 https 給跑起來了!!
老天,我花了快一個禮拜的時間,才發現防火牆 port 443 沒開...
擔誤諸位大大寶貴的時間,真的是非常的抱歉... (跪 QwQ
※ 編輯: archon (125.227.30.252), 04/09/2018 16:36:17