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

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

环境准备

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

  • Python 3.x
  • Flask
  • Nginx
  • OpenSSL

安装 Python 和 Flask

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

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

bash 复制代码
pip install Flask

安装 Nginx

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

bash 复制代码
sudo apt update
sudo apt install nginx

创建 Flask 应用

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

python 复制代码
from flask import Flask

app = Flask(__name__)

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

if __name__ == '__main__':
    app.run(debug=True)

运行此应用:

bash 复制代码
python app.py

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

配置 Nginx

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

创建 Nginx 配置文件

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

bash 复制代码
sudo nano /etc/nginx/sites-available/flask_app

在文件中添加以下内容:

nginx 复制代码
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 目录:

bash 复制代码
sudo ln -s /etc/nginx/sites-available/flask_app /etc/nginx/sites-enabled

测试 Nginx 配置是否正确:

bash 复制代码
sudo nginx -t

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

bash 复制代码
sudo systemctl reload nginx

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

添加 SSL 支持

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

安装 Certbot

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

bash 复制代码
sudo apt install certbot python3-certbot-nginx

获取 SSL 证书

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

bash 复制代码
sudo certbot --nginx -d your_domain_or_ip

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

配置自动更新

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

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

完整 Nginx 配置文件示例

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

nginx 复制代码
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 的信息,请参考以下链接:

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

相关推荐
程序员小王꧔ꦿ9 分钟前
python植物大战僵尸项目源码【免费】
python·游戏
拓端研究室TRL10 分钟前
Python用TOPSIS熵权法重构粮食系统及期刊指标权重多属性决策MCDM研究|附数据代码...
开发语言·python·重构
吃面不喝汤661 小时前
Flask + Swagger 完整指南:从安装到配置和注释
后端·python·flask
AI原吾6 小时前
掌握Python-uinput:打造你的输入设备控制大师
开发语言·python·apython-uinput
毕设木哥6 小时前
25届计算机专业毕设选题推荐-基于python的二手电子设备交易平台【源码+文档+讲解】
开发语言·python·计算机·django·毕业设计·课程设计·毕设
weixin_455446176 小时前
Python学习的主要知识框架
开发语言·python·学习
D11_6 小时前
Pandas缺失值处理
python·机器学习·数据分析·numpy·pandas
花生了什么树~.7 小时前
python基础知识(四)--if语句,for\while循环
python
运维小白。。7 小时前
Nginx 反向代理
运维·服务器·nginx·http
IT毕设梦工厂8 小时前
计算机毕业设计选题推荐-在线拍卖系统-Java/Python项目实战
java·spring boot·python·django·毕业设计·源码·课程设计