Flask启用https

1.生成或获取SSL证书

使用openssl生成自签名证书

# req -x509         生成自签名证书
# -newkey rsa:4096  生成一个新的私钥,指定为4096位的RSA密钥对
# -keyout key.pem   私钥保存到key.pem文件
# -out cert.pem     自签名证书保存到cert.pem文件
# -days 365         证书的有效期为365天
# -nodes            不加密私钥文件
openssl req -x509 -newkey rsa:4096 -keyout key.pem -out cert.pem -days 365 -nodes

执行命令后会提示输入一些信息,如"Country Name, State or Province Name, Locality Name, Organization Name, Organizational Unit Name, Common Name, Email Address"。这些信息将被包含在生成的证书中,都可以为空。

或者从可信的证书颁发机构(CA)获取证书。

2. 在Flask中使用SSL证书

from flask import Flask

app = Flask(__name__)

@app.route('/')
def hello():
    return "Hello, World!"

if __name__ == "__main__":
    # cert.pem是生成的证书文件,key.pem是生成的私钥文件
    app.run(host='0.0.0.0', port='5000', ssl_context=('cert.pem', 'key.pem'))

3. Nginx配置https反向代理

可用nginx -t命令查看nginx配置文件路径,默认在/etc/nginx/nginx.conf

    server {
        listen 80;
        server_name yourdomain.com;
        # HTTP重定向到HTTPS
        return 301 https://$host$request_uri;
    }

    server {
        listen 443 ssl;
        server_name yourdomain.com;

        # 配置SSL证书和私钥路径
        ssl_certificate /path/to/cert.pem;
        ssl_certificate_key /path/to/key.pem;

        # 配置SSL协议和加密套件
        ssl_protocols TLSv1.2 TLSv1.3;  # 启用TLS协议版本
        ssl_ciphers HIGH:!aNull:!MD5;   # 配置安全的加密套件
        ssl_prefer_server_ciphers on;   # 优先使用服务器端的加密套件

        location / {
            # 反向代理到后端服务器
            proxy_pass https://127.0.0.1:5000;
             # 设置代理头信息
            proxy_set_header Host $host;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header X-Forwarded-Proto $scheme;
        }
    }

修改后检查配置是否正确: nginx -t
重新加载: nginx -s reload

posted @ 2024-07-27 09:49  rustling  阅读(39)  评论(0编辑  收藏  举报