• 使用 Nginx 和 SSL 访问 Python Flask 应用的教程


    在本教程中,我们将介绍如何使用 Nginx 和 SSL 来访问 Python Flask 应用。通过这种方式,你可以在提高安全性的同时,也能利用 Nginx 的反向代理功能来优化应用的性能和稳定性。
    在这里插入图片描述

    环境准备

    在开始之前,请确保你的系统已经安装了以下软件:

    • Python 3.x
    • Flask
    • Nginx
    • OpenSSL

    安装 Python 和 Flask

    首先,确保你已经安装了 Python 3.x。如果没有,请根据你的操作系统的指引安装 Python。

    接下来,安装 Flask。你可以通过 pip 进行安装:

    pip install Flask
    

    安装 Nginx

    根据你的操作系统,使用包管理工具安装 Nginx。例如,在 Ubuntu 上,你可以使用以下命令:

    sudo apt update
    sudo apt install nginx
    

    创建 Flask 应用

    接下来,我们创建一个简单的 Flask 应用,名为 app.py

    from flask import Flask
    
    app = Flask(__name__)
    
    @app.route('/')
    def hello_world():
        return 'Hello, World!'
    
    if __name__ == '__main__':
        app.run(debug=True)
    

    运行此应用:

    python app.py
    

    访问 http://127.0.0.1:5000/,你应该能看到 “Hello, World!” 消息。

    配置 Nginx

    在使用 Nginx 之前,我们需要先配置它来反向代理到我们的 Flask 应用。

    创建 Nginx 配置文件

    /etc/nginx/sites-available/ 目录下创建一个新的配置文件,例如 flask_app

    sudo nano /etc/nginx/sites-available/flask_app
    

    在文件中添加以下内容:

    server {
        listen 80;
        server_name your_domain_or_ip;
    
        location / {
            proxy_pass http://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;
        }
    }
    

    your_domain_or_ip 替换为你的域名或 IP 地址。然后创建一个符号链接到 sites-enabled 目录:

    sudo ln -s /etc/nginx/sites-available/flask_app /etc/nginx/sites-enabled
    

    测试 Nginx 配置是否正确:

    sudo nginx -t
    

    如果配置正确,重新加载 Nginx:

    sudo systemctl reload nginx
    

    现在,你应该可以通过 http://your_domain_or_ip 访问你的 Flask 应用。

    添加 SSL 支持

    为了让我们的网站通过 HTTPS 访问,我们需要为其配置 SSL。我们将使用 Let’s Encrypt 来获取免费的 SSL 证书。

    安装 Certbot

    Certbot 是一个自动化获取和更新 SSL 证书的工具。你可以通过以下命令安装 Certbot:

    sudo apt install certbot python3-certbot-nginx
    

    获取 SSL 证书

    运行以下命令以获取 SSL 证书:

    sudo certbot --nginx -d your_domain_or_ip
    

    根据提示完成域名验证和证书安装。Certbot 将自动配置 Nginx 以使用新的 SSL 证书。

    配置自动更新

    Let’s Encrypt 的证书有效期为 90 天,因此我们需要配置自动更新。可以通过添加一个 cron 作业来实现:

    echo "0 0 * * * /usr/bin/certbot renew --quiet" | sudo tee -a /etc/crontab > /dev/null
    

    完整 Nginx 配置文件示例

    以下是一个完整的 Nginx 配置文件示例,包含了 SSL 配置:

    server {
        listen 80;
        server_name your_domain_or_ip;
        return 301 https://$host$request_uri;
    }
    
    server {
        listen 443 ssl;
        server_name your_domain_or_ip;
    
        ssl_certificate /etc/letsencrypt/live/your_domain_or_ip/fullchain.pem;
        ssl_certificate_key /etc/letsencrypt/live/your_domain_or_ip/privkey.pem;
        include /etc/letsencrypt/options-ssl-nginx.conf;
        ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem;
    
        location / {
            proxy_pass http://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;
        }
    }
    

    your_domain_or_ip 替换为你的实际域名或 IP 地址。

    总结

    通过本教程,你已经学会了如何使用 Nginx 和 SSL 来访问 Python Flask 应用。这不仅提高了应用的安全性,还能充分利用 Nginx 的强大功能来优化应用的性能。如果你有任何问题或建议,欢迎在下方留言讨论。

    更多关于 Flask 和 Nginx 的信息,请参考以下链接:

    欢迎访问我的 个人主页 获取更多技术文章。

  • 相关阅读:
    【ArcGIS微课1000例】0030:ArcGIS利用MXD doctor工具分析并修复mxd地图文档
    高企申报中的常见核心问题答疑
    Python之wxPython事件处理
    electron27+react18集成搭建跨平台应用|electron窗口多开
    API接口请求电商数据平台参数获取淘宝商品描述示例
    Nacos 开源版的使用测评
    数组转换字符串
    人工智能对就业的影响:机遇与挑战
    通过阅读源码解决项目难题:GToken替换JWT实现SSO单点登录
    Cloudera Manager环境准备【一】
  • 原文地址:https://blog.csdn.net/Ephemeroptera/article/details/139720193