Django + Nginx + https
- 因网站上线之后一直是http协议,本着这样会非常不安全且学习阶段,因此对网站进行https改造
大致步骤:
- 申请SSL证书
- 修改Django配置
- 修改Nginx配置
- 重新加载Nginx配置文件
申请SSL证书
- 一般在阿里云或者是腾讯云都可以,有一年免费的,个人网站玩玩的用这个就可以了,大公司网站另说哈哈
- 申请的时候会有一个文件校验,需要放在网站根目录下建一个.well-known/acme-challenge/ 文件夹,里面放入fileauth.txt,文件中填写申请SSL证书时的信息,这个一般阿里云或者腾讯云都有详细的教程,这里不做赘述
-
校验通过之后便可以下载SSL证书,一个是.pem后缀的一个是.key后缀的,将这两个放在服务器中,要记得地址,这里我放在了 /etc/nginx/下,有的nginx目录跟我的会不一样,这个具体看自己的nginx目录在哪就行了。这里新建了一个cert文件夹,存放在里面.
image.png
cd /etc/nginx/cert/
修改Django配置
- 在django的官方文档中说,如果需要进行http+ssl配置的话,需要在settings中加入相关配置
SSL/HTTPS
It is always better for security to deploy your site behind HTTPS. Without this, it is possible for malicious network users to sniff authentication credentials or any other information transferred between client and server, and in some cases – active network attackers – to alter data that is sent in either direction.
- 需要在Django项目的配置文件settings.py中加入以下三段配置
SESSION_COOKIE_SECURE=True
SESSION_COOKIE_HTTPONLY=True
SECURE_PROXY_SSL_HEADER = ('HTTP_X_FORWARDED_PROTOCOL', 'https')
修改nginx配置
- 进入到/etc/nginx/目录
cd /etc/nginx/
- 打开nginx.conf
sudo vim nginx.conf
- 如果之前上线过网站的话,只需要修改部分配置信息,如果网站新上线的话,需要完整的加入server配置,记住这段配置是放在http:{ ...}中!配置如下(对照着改就好了):
server {
listen 443 ssl; # 1.1版本后这样写
server_name www.domain.com; #填写绑定证书的域名
ssl_certificate 1_www.domain.com_bundle.crt; # 指定证书的位置,绝对路径
ssl_certificate_key 2_www.domain.com.key; # 绝对路径,同上
ssl_session_timeout 5m;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2; #按照这个协议配置
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE;#按照这个套件配置
ssl_prefer_server_ciphers on;
location / {
root html; #站点目录,绝对路径
index index.html index.htm;
}
}
- listen 443 ssl #https的端口是443,所以需要监听这个端口
- server_name # 写你网站的域名,没有就写公网IP
- ssl_certificate 这个是写刚刚证书文件.pem结尾的那个,记住绝对路径
- ssl_certificate_key 同上,不过是写.key后缀那个文件
- 剩下的三个默认配置就行
重新加载Nginx配置文件
sudo nginx -s reload
最后重启下Nginx,重启下项目~
附上博客地址:Jason的技术博客
网友评论