[爆卦]uwsgi教學是什麼?優點缺點精華區懶人包

為什麼這篇uwsgi教學鄉民發文收入到精華區:因為在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
djshen: 內容出不來要不要看一下django有沒有收到request 03/31 17:06
djshen: 或有沒有error? 03/31 17:07
archon: 謝謝大大,目前用了 uWSGI 後看不到 django 的行為, 03/31 17:08
djshen: 之前有用ELB可以直接設定https 單個instance的設定不太熟 03/31 17:08
archon: 我研究一下要怎麼看 uWSGI 後面 project 的 log... @@" 03/31 17:08
djshen: port有對? 03/31 17:09
這個問題我其實自己也不確定...

在 Nginx <--> socket <--> uWSGI <--> Django 架構下走 http 會通,
所以我自己覺得 uWSGI <--> Django 之間的設定是 ok 的,
但走 https 後,Nginx 把 http request 轉到 port 443,
uWSGI 跟 Django 到底需不需要改變設定,這是我還沒弄懂的地方... orz

archon: 請問... ELB 可以跑 python 3.x 嗎? 03/31 17:09

djshen: ELB是負載平衡跟後面跑什麼沒什麼關係 我問port的原因是 03/31 17:18
ELB 是 AWS Elastic Beanstalk 嗎?
之前我疑似看到 EB 很好設 https,但當我打開 AWS 控制台時,
看到的全是 python 2.7,就縮了... (汗

djshen: 第一個教學uWSGI跑在8080 第二個SO他設定8000 03/31 17:19
啊啊,抱歉,這是我問題寫的不清楚了,那段 8000 是我直接 copy 別人文章中的內容,
我自己 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
Sunal: 我用過nginx轉到uwsgi_pass sock file的方式在EC2上 03/31 17:25
Sunal: nginx 的conf設定一下關於SSL的部分就好.. 03/31 17:27
Sunal: 建議直接看uWSGI的doc 03/31 17:27
Sunal: 題外話,不要到處去找解法 直接看官方文件最安全 03/31 17:29
Sunal: 輕則是卡在奇怪的地方 重則server被駭也不知道原因 03/31 17:30
謝謝大大的建議~

之前有翻到這個資源,但可能是我對網路的概念太貧乏了,還是沒能把問題解決 orz
http://uwsgi-docs.readthedocs.io/en/latest/HTTPS.html

想請問... 依您的經驗,要走 https,除了 Nginx 之外,
uWSGI 跟 Django project 也都需要做相對應的設定的,是嗎?

Sunal: BTW 你是有自己買憑證 還是用AWS的SSL方案 03/31 18:18
Sunal: 我之前莊是自己有憑證 裝好crt&key 只要設定nginx conf就好 03/31 18:18
呃... 我並沒有設 SSL 憑證,
想說沒憑證只是會跳出這個連線不安全的訊息而已...

會是這個問題嗎... (汗

剛才找了一下,發現 AWS 有 SSL 的服務,感謝大大提供了這個訊息,
我彷彿又看到了一條路... 先去試試看!!

djshen: 我記得uWSGI可以設定log 還有nginx的log也看看 03/31 19:14
收到!! 大感謝!!!

eric541: Nginx 開 443 ,把 request 導到 uwsgi 的 socket file 04/01 11:57
eric541: 就好,Django 那邊全部都不用設,很簡單的 04/01 11:57
eric541: 忘記講 nginx 那邊要設一下 443 的 ssl 憑證 04/01 11:58
謝謝大大~ 這樣的意思是說 uWSGI 本身預設就能處理 https 的連線了,對吧?
我再研究一下...
djshen: socket就跟https沒關係了吧 04/02 12:28


感謝各位大大的幫助,我終於把 https 給跑起來了!!
老天,我花了快一個禮拜的時間,才發現防火牆 port 443 沒開...
擔誤諸位大大寶貴的時間,真的是非常的抱歉... (跪 QwQ
※ 編輯: archon (125.227.30.252), 04/09/2018 16:36:17

你可能也想看看

搜尋相關網站