前言
背景介绍:
在上一篇文章《超实用!利用Nginx实现文件下载,效率翻倍》中,我们介绍了如何运用强大的Nginx服务器作为文件下载服务的核心,通过其优异的性能、高并发处理能力和灵活的安全配置,有效地实现了大规模文件的快速、安全分发。Nginx凭借其成熟的HTTP服务架构和出色的负载均衡能力,为各类企业提供了一种可靠、高效的文件下载解决方案。
然而,当我们面对轻量级或临时性的文件分享需求时,特别是开发调试阶段,或者是局域网内的简单文件传输场景,采用重量级的Nginx服务器或许显得有些大材小用。此时,Python内置的http.server模块为我们提供了一个简易快捷的选择。Python的http.server模块是一个简易HTTP服务器实现,它可以轻松地在任何具备Python环境的机器上快速搭建起一个用于文件下载的本地服务器,特别是在开发者桌面环境或是小型项目中,这种轻便而直观的解决方案显得尤为实用。
模块介绍:
Python的http.server模块是Python标准库中的一部分,它提供了一个简易的HTTP服务器实现,主要用于开发和测试环境。这个模块在Python 3.x中取代了Python 2.x中的SimpleHTTPServer模块,用来快速搭建一个基础的HTTP服务器,可以用来共享本地文件,提供网页服务,或者用于简单的API接口测试等。
实现步骤
1 . 新建下载目录,进入目录,启动http.server模块,启动时所在的目录为文件下载目录,传入的端口即为服务端口,默认端口为8000,如下
# mkdir /usr/local/download
# cd /usr/local/download/
# nohup python3 -m http.server 8888 >nohup.out 2>&1 &
备注:python2使用的是SimpleHTTPServer模块
# mkdir /usr/local/download
# cd /usr/local/download/
# nohup python -m SimpleHTTPServer 8888 >nohup.out 2>&1 &
2. 在文件目录下新建几个测试文件,然后在页面和命令行分别验证下载文件;
# touch {a..d}.txt
# ls
# wget http://192.168.88.154:8888/a.txt
知识扩展
源码解读
Python3中的http.server模块主要包含三个关键类,分别是HTTPServer、BaseHTTPRequestHandler和http.server.SimpleHTTPRequestHandler。
1. HTTPServer 类继承自Python 的 socketserver.TCPServer 类,它是一个网络服务器类,负责监听TCP端口,接收和处理传入的 HTTP请求。在初始化时,需要指定服务器地址(IP地址和端口)以及请求处理器类。
2. BaseHTTPRequestHandler 是一个抽象类,提供了处理 HTTP 请求的基本框架。它继承自 socketserver.StreamRequestHandler,并在其基础上实现了对 HTTP 请求头、请求方法(如 GET、POST 等)、URL 路径解析以及响应生成等功能。
3. SimpleHTTPRequestHandler 继承自 BaseHTTPRequestHandler,并实现了处理静态文件的服务功能。当收到请求时,它会解析请求路径,找到本地文件系统上的文件,并将文件内容返回给客户端。
配置ssl
1. 生成私钥和证书请求文件(CSR)
# mkdir /usr/local/download/cert/
# cd /usr/local/download/cert/
# openssl req -x509 -newkey rsa:4096 -keyout key.pem -out cert.pem -days 365 -nodes
2. 创建一个名为httpsserver.py的python文件
# cat /usr/local/download/httpsserver.py
#!/usr/bin/env python3
# coding:utf-8
import http.server
import ssl
# SSL证书和私钥文件路径(请替换为您自己的文件路径)
certfile = '/usr/local/download/cert/cert.pem'
keyfile = '/usr/local/download/cert/key.pem'
context = ssl.create_default_context(ssl.Purpose.CLIENT_AUTH)
context.load_cert_chain(certfile=certfile, keyfile=keyfile)
# 端口号自定义
PORT = 4443
httpd = http.server.HTTPServer(('192.168.88.154', PORT), http.server.SimpleHTTPRequestHandler)
httpd.socket = context.wrap_socket(httpd.socket, server_side=True)
httpd.serve_forever()
3. 执行文件并验证ssl功能
# nohup python3 httpsserver.py >nohup.out1 2>&1 &
MUSIC

♬..♩~ ♫. ♪..
END

超实用!利用Nginx实现文件下载,效率
考点全覆盖!K8S CKA认证最新题库
高效部署!使用Docker Compose快速搭建Harbor私有镜像仓库
原文始发于微信公众号(Linux运维之旅):一键启动!利用Python轻松构建HTTP服务器
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/273744.html