flask+docker + nginx + uwsgi + https环境部署
上文介绍了flask+docker + nginx + uwsgi环境部署http环境,
http环境:Flask搭建后台环境http部署
今天在上一篇的基础上讲部署https环境。
1. https介绍
1.1 说明
HTTPS 是安全的 HTTP,HTTP 协议中的内容都是明文传输,HTTPS 的目的是将这些内容加密,确保信息传输安全。最后一个字母 S 指的是 SSL/TLS 协议,它位于 HTTP 协议与 TCP/IP 协议中间。
1.2 加密技术
- 对称加密:为对原始数据的可逆变换,一般要比非对称加密快得多,对服务器的运算压力也小得多。
- 非对称加密:对比对称加密,非对称加密要经过极为复杂的运算,非对称加密有两个秘钥,一个是公钥,一个是私钥。公钥加密的内容只有私钥可以解密,私钥加密的内容只有公钥可以解密。
2. https配置说明
把HTTP替换成HTTPS,可能需要关注以下几点:
1、安装CA证书,一般的证书都是需要收费的。如果自己调试可以自己生成证书。
2、在购买证书之后,在证书提供的网站上配置自己的域名,将证书下载下来之后,配置自己的web服务器。
3、HTTPS 降低用户访问速度。SSL握手,HTTPS 对速度会有一定程度的降低,但是只要经过合理优化和部署,HTTPS 对速度的影响完全可以接受。
4、相对于HTTPS降低访问速度,其实更需要关心的是服务器端的CPU压力,HTTPS中大量的**算法计算,会消耗大量的CPU资源,只有足够的优化,HTTPS 的机器成本才不会明显增加。
3. 配置步骤
3.1 获取ca证书
网址正式上线可以到阿里云和腾讯云上面购买,如果自己调试可以自己生成赠书调试,下面介绍如何生成证书:
#生成私钥,按照提示填写内容
openssl genrsa -out flaskdemo.key 2048
Generating RSA private key, 2048 bit long modulus
................+++
.....................+++
e is 65537 (0x10001)
#生成证书
openssl req -new -x509 -key flaskdemo.key -out flaskdemo.pem -days 1095
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [XX]:ZH
State or Province Name (full name) []:GUANGDONG
Locality Name (eg, city) [Default City]:SHENZHEN
Organization Name (eg, company) [Default Company Ltd]:HH
Organizational Unit Name (eg, section) []:HH
Common Name (eg, your name or your server's hostname) []:YYT
Email Address []:GFY
#查看证书文件
ls -lh
total 8.0K
-rw-r--r-- 1 root root 1.7K Jul 11 16:38 flaskdemo.key
-rw-r--r-- 1 root root 1.4K Jul 11 16:43 flaskdemo.pem
看到生成了flaskdemo.key、flaskdemo.pem两个文件,说明证书生成了,我们就可以到nginx里面配置证书了。
3.2 nginx配置证书
参考:https://help.aliyun.com/document_detail/98728.html?spm=a2c4g.11186623.6.636.84fd392cnZVxzO
在nginx配置文件目录/www/server/nginx/conf下面创建cert目录,把flaskdemo.key、flaskdemo.pem复制到cert目录下面。
3.3 创建nginx的https配置文件
我们在/www/server/panel/vhost/nginx目录里创建xxxx.conf文件,重启nginx,就会加载。下面我们创建文件vi /www/server/panel/vhost/nginx/flaskdemo-https.conf,文件内容如下:
server {
listen 443 ssl; #SSL协议访问端口号为443。此处如未添加ssl,可能会造成Nginx无法启动。
server_name xxx.xxx.xxx.xxx; #将localhost修改为您证书绑定的域名,例如:www.example.com。
ssl_certificate cert/flaskdemo.pem; #将domain name.pem替换成您证书的文件名。
ssl_certificate_key cert/flaskdemo.key; #将domain name.key替换成您证书的**文件名。
ssl_session_timeout 5m;
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4; #使用此加密套件。
ssl_protocols TLSv1 TLSv1.1 TLSv1.2; #使用该协议进行配置。
ssl_prefer_server_ciphers on;
location / {
include uwsgi_params; # 导入uwsgi配置
uwsgi_pass 127.0.0.1:6005; # 需要和uwsgi里的地址一致,才能转发到uwsgi上
uwsgi_param UWSGI_PYHOME /usr/python/bin; # 指向虚拟环境目录
uwsgi_param UWSGI_CHDIR /home/FlaskDemo; # 项目根目录
uwsgi_param UWSGI_SCRIPT app:app; # 启动的主程序
}
access_log /www/wwwlogs/access.log;
}
创建好文件保存后,重启nginx,/etc/init.d/nginx restart
Stoping nginx... done
Starting nginx... done
查看端口情况,netstat -nltp
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 6567/nginx: master
tcp 0 0 127.0.0.1:6005 0.0.0.0:* LISTEN 3696/uwsgi
tcp 0 0 0.0.0.0:888 0.0.0.0:* LISTEN 6567/nginx: master
tcp 0 0 0.0.0.0:443 0.0.0.0:* LISTEN 6567/nginx: master
tcp 0 0 0.0.0.0:5000 0.0.0.0:* LISTEN 6567/nginx: master
tcp 0 0 127.0.0.1:6379 0.0.0.0:* LISTEN 1397/redis-server 1
tcp6 0 0 :::3306 :::* LISTEN 687/mysqld
看到0 0.0.0.0:443就说明https配置成功了,接下来修改前端url
3.4 前端文件修改
记得WEB前端发送的http请求,由http://改为https://
下面查看访问页面:https://xxx.xxx.xxx.xxx(自己服务器的IP),如图:
出现上述登录页面,就说明项目配置成功了。
推荐阅读
-
部署支持 https 的 Nginx 服务
-
中小公司网站建设过程中是否应该进行HTTPS环境部署
-
详解Django+Uwsgi+Nginx 实现生产环境部署
-
Nginx配置SSL证书部署HTTPS网站的方法(颁发证书)
-
Django uwsgi Nginx 的生产环境部署详解
-
nginx环境下配置ssl加密(单双向认证、部分https)
-
SLAM+语音机器人DIY系列:(八)高阶拓展——2.centos7下部署Django(nginx+uwsgi+django+python3)
-
利用Python脚本在Nginx和uwsgi上部署MoinMoin的教程
-
用uWSGI和Nginx部署Flask项目的方法示例
-
Ubuntu 14.04+Django 1.7.1+Nginx+uwsgi部署教程