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

news2024/11/23 19:35:02

在本教程中,我们将介绍如何使用 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 的信息,请参考以下链接:

  • Flask 官方文档
  • Nginx 官方文档
  • Let’s Encrypt 官方网站

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1828312.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

准备离职了 电脑怎么清理?离职最干净的电脑清理办法

准备离职了 电脑怎么清理?离职最干净的电脑清理办法 人在江湖身不由己,离职这个事情,所有人都要面对。无论是出于个人发展、工作环境、薪资待遇还是其他原因,离职都是人生和职业道路上的一种常态。离职是一个残酷的事实&#xff…

【每日刷题】Day66

【每日刷题】Day66 🥕个人主页:开敲🍉 🔥所属专栏:每日刷题🍍 🌼文章目录🌼 1. 小乐乐改数字_牛客题霸_牛客网 (nowcoder.com) 2. 牛牛的递增之旅_牛客题霸_牛客网 (nowcoder.com)…

Zabbix Centos8 安装笔记

Zabbix 安装笔记 安装环境 Centos 8 正常发行版 安装版本 Zabbix 7 (LTS) 安装步骤 1、关闭防火墙 systemctl stop firewalld && systemctl disable firewalld && setenforce 0 && sed -i s/SELINUXenforcing/SELINUXdisabled/g /etc/selinux/c…

Elasticsearch 认证模拟题 - 22

一、题目 索引 task 索引中文档的 fielda 字段内容包括了 hello & world,索引后,要求使用 match_phrase query 查询 hello & world 或者 hello and world 都能匹配该文档 1.1 考点 分词器 1.2 答案 # 创建符合条件的 task 索引,…

诊断丢帧:发送端连续帧发送过快,导致接收端丢帧

项目场景: 在项目开发过程中,对于报文的接收/发送,一般来说,通信量大,选择Polling(轮询)处理模式;通信量小,选择Interrupt(中断)处理模式。具体选择没有优劣之分。结合项目的实际情况,选择适合项目的方式就好。小编将分享一个Polling模式下出现的丢帧现象。 1576…

Ps:脚本事件管理器

Ps菜单:文件/脚本/脚本事件管理器 Scripts/Script Events Manager 脚本事件管理器 Script Events Manager允许用户将特定的事件(如打开、存储或导出文件)与 JavaScript 脚本或 Photoshop 动作关联起来,以便在这些事件发生时自动触…

exfat文件系统无法NFS导出的问题

最近项目中移植了exfat-linux驱动,但发现exfat格式的U盘无法用exportfs命令在NFS上导出。这篇文章记录了分析、解决方法。 一、问题现象 问题描述:exfat驱动更新后,exfat格式的U盘用exportfs命令NFS导出会报错 $ exportfs -o ro,fsid0,no_ro…

用飞书写博客,并自动部署

feishu-vitepress 用飞书写博客,并自动部署 目前的静态博客如vitepress,主要是用markdown来写内容。markdown虽然可读性比较好,但是在文章中贴图片有点麻烦,需要先保存图片到asset目录下,再在markdown中写图片地址。 平时工作主要…

软件方案评审与模块优化:从FOC模块出发的电控平台建设

一、背景 洞悉模块发展趋势,定制行业应用特点,明确优化方向与阶段性目标 随着科技进步的飞速发展,模块化设计已成为众多行业产品开发的核心理念。无论是软件系统、硬件组件,还是复杂系统中的功能模块,都需要对其发展…

STM32学习 BKP

BKP就是备份寄存器的意思,听名字就知道它的作用就是用来备份数据的。下面是手册当中的描述。备份寄存器是42个16位的寄存器,可用来存储84个字节的用户应用程序数据。他们处在备份域 里,当VDD电源被切断,他们仍然由VBAT维持供电。当…

【2024最新华为OD-C/D卷试题汇总】[支持在线评测] 字符串分隔(二)(100分) - 三语言AC题解(Python/Java/Cpp)

🍭 大家好这里是清隆学长 ,一枚热爱算法的程序员 ✨ 本系列打算持续跟新华为OD-C/D卷的三语言AC题解 💻 ACM银牌🥈| 多次AK大厂笔试 | 编程一对一辅导 👏 感谢大家的订阅➕ 和 喜欢💗 📎在线评测链接 字符串分隔(二)(100分) 🌍 评测功能需要订阅专栏后私信联系…

【推荐】Perl入门教程特点功能文本处理读取文件替换文本写入文件分割字符数据库处理环境准备安装(包含示咧)

本人详解 作者:王文峰,参加过 CSDN 2020年度博客之星,《Java王大师王天师》 公众号:JAVA开发王大师,专注于天道酬勤的 Java 开发问题中国国学、传统文化和代码爱好者的程序人生,期待你的关注和支持!本人外号:神秘小峯 山峯 转载说明:务必注明来源(注明:作者:王文峰…

WSL Ubuntu安装TensorFlow-GPU、PyTorch-GPU

在Windows 11的WSL Ubuntu中安装TensorFlow-GPU、PyTorch-GPU 0、WSL Ubuntu安装 在Windows 11的商店中下载即可,此处以Ubuntu22.04.3为例 1、CUDA Toolkit安装 参考公孙启的文章Windows11 WSL Ubuntu Pycharm Conda for deeplearning前往nVidia官网下载CUDA …

从数据库到数据仓库:数据仓库导论

导言 本文为数据仓库导论,旨在介绍数据仓库的基本理念和应用场景,帮助读者理解数据仓库的重要性及其在企业中的实际应用。 数据仓库作为重要的数据管理和分析工具,已经发展了30多年,其过程中生态和技术都发生了巨大的变化。尽管…

[报错解决]Failed to bind to server socket: amqp://0.0.0.0:5672?maximumConnections

目录 报错信息解决 报错信息 Failed to start Apache ActiveMQ (localhost, ID:rhel-33317-1718469475002-0:1) | org.apache.activemq.broker.BrokerService | main java.io.IOException: Transport Connector could not be registered in JMX: java.io.IOException: Faile…

30 天 52% 回报:GPT-4o 量化交易机器人

本文介绍了如何利用GPT-4o,结合量化交易技术创建盈利的交易机器人策略,并通过回溯测试验证这一策略的有效性。原文: 52% Returns in 30 Days: Your GPT-4o Quant Trading Bot Strategy 量化交易可以盈利,但只有拥有丰富资源、拥有编码和数学技…

[力扣二叉树]本地调试环境指导手册

以236. 二叉树的最近公共祖先为例子 本地编译软件为Viusal Studio 2022 写代码 项目里文件位置 CreateTree.h #pragma once #ifndef CLIONPROJECT_LEETCODECREATETREE_H #define CLIONPROJECT_LEETCODECREATETREE_H #include<vector> #include<queue> using na…

VMware虚拟机linux无法使用ifconfig的解决方法

在有些linux系统中&#xff0c;输入ifconfig会报错&#xff0c;这是为什么呢&#xff1f; 如果出现 那是说明&#xff0c;你的linux内没有对应的命令。 具体可输入 ls /sbin 查看,发现其中确实没有ifconfig命令 这个解决很简单&#xff0c;在命令行输入 sudo apt-get inst…

关于Mysql 中 Row size too large (> 8126) 错误的解决和理解

提示&#xff1a;啰嗦一嘴 &#xff0c;数据库的任何操作和验证前&#xff0c;一定要记得先备份&#xff01;&#xff01;&#xff01;不会有错&#xff1b; 文章目录 问题发现一、问题导致的可能原因1、页大小2、行格式2.1 compact格式2.2 Redundant格式2.3 Dynamic格式2.4 Co…