欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

flask+docker + nginx + uwsgi + https环境部署

程序员文章站 2022-07-12 17:14:51
...

上文介绍了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),如图:
flask+docker + nginx + uwsgi + https环境部署
出现上述登录页面,就说明项目配置成功了。