在AWS 部署Django 以及SSL驗證

之前在AWS部署Django的時候遇到了很多坑,查閱很多資料終於填完了這些坑。所在這裡分享一下,我的一些小心得。

目前在AWS Django上 有Apache 和 Nginx 兩種選擇。

網站部署

如果使用Apache, 那隻需要閱讀官方文檔就行了。這是最快的最簡潔的方法。這種方法幫你搭設好了環境,負載均衡,自動擴縮,代碼一鍵部署。基本你想到的功能都有。非常的人性化。

Deploying a Django Application to Elastic Beanstalk

但是如果需要用nginx的話,有兩種選擇,一,由elastic beanstalk幫你部署環境, 二, 直接在 EC2 部署環境。

第二種可以參考: Setting up Django with Nginx, Gunicorn, virtualenv, supervisor and PostgreSQL

Deploying a Django App to Amazon AWS (with Nginx + Gunicorn + Git) (重點:自動代碼上傳)

SSL驗證

如果按照上面的方法來,恭喜,您的網站已經上線了。

如果您的網站需要SSL 驗證,也就是說從http 換成 https。

那麼您有兩個選擇。

一, 使用第三方SSL驗證,比如Lets Encrypt - Free SSL/TLS Certificates。 免費,快捷,支持多域名(不是通配符),三條命令即時簽署+導出證書。但是只有三個月有效期,到期需續簽。

二, Amazon 推出了 ACM。在ACM上面可以託管第三方的certificates 也可以使用ACM SSL。 但是 ACM SSL 只支持Elastic BeanStalk, Elastic Load Balancer,Amazon CloudFront和 Amazon API Gateway, 不支持EC2。 所以如果想在EC2使用ACM SSL, 其中一種方法就是使用Elastic Load Balancer。 然後EC2 使用與Elastic Load Balancer相同的證書。

ALLOWED_HOSTS

在AWS如何設置ALLOWED_HOSTS是非常頭痛的問題。尤其用到auto scaling group 的時候,ec2 instance 會跟著變化,為了解決這個問題,以下是方法:

ALLOWED_HOSTS = [.yourservername.com]nimport requestsnLOCAL_IP = Nonentry:n LOCAL_IP = requests.get(http://169.254.169.254/latest/meta-data/local-ipv4, timeout=0.01).textnexcept requests.exceptions.RequestException:n passnif LOCAL_IP and not DEBUG:n ALLOWED_HOSTS.append(LOCAL_IP)n

如有疑問,求留言。


推薦閱讀:

TLS完全指南(二):OpenSSL操作指南
酷站推薦 - roe.ch/SSLsplit - transparent SSL/TLS interception
使用了不受支持的SSL協議是怎麼回事?
酷站推薦 - ssllabs.com/ssl-pulse - SSL/TLS Security Scan Summary
SSL For Free : 網頁快速申請Let's Encrypt的SSL證書

TAG:AmazonWebServicesAWS | Django框架 | SSL |