多端口 HTTP 文件服务器

admin 2024年1月6日15:05:39评论32 views字数 2766阅读9分13秒阅读模式

医院的 PACS 历史影像数据是以 HTTP 文件服务器的形式提供服务的。不同时期的数据文件存储的位置不同,所以要求 Web 服务绑定不同的目录,此时一般会通过不同的端口绑定不同的目录提供下载服务。

之前的处理方案是启动多个 python http.server 进程,绑定不同端口来提供不同目录的文件下载服务。比如:

$ cd /pacs1$ python -m http.server 10000Serving HTTP on 0.0.0.0 port 10000 (http://0.0.0.0:10000/) ...

多端口 HTTP 文件服务器

当多个目录需要提供上述 web 文件下载服务时,就需要对不同目录进行处理。将这些任务做成 screen 开机脚本的形式,比如:

多端口 HTTP 文件服务器

$ cat 008_pacs20000*
#!/bin/bash# FileName: 008_pacs20000_rc.shRC_NAME=pacs20000_008cmd="/bin/bash /screenjob/008_pacs20000.sh"SCREEN=/usr/bin/screen$SCREEN -dmS $RC_NAME$SCREEN -x -S $RC_NAME -p 0 -X stuff "$cmd"$SCREEN -x -S $RC_NAME -p 0 -X stuff "n"
#!/bin/bash# FileName: 008_pacs20000.shcd /pacs1PWD=`pwd`echo "Current working dir: "$PWDpython3 -m http.server 20000

系统开机启动时会调用指定的 rc 脚本,在 rc 脚本中会启动一个后台运行的 screen 会话。在 screen 会话中会以 python http.server 的形式启动 web 服务提供文件下载。

$ screen -ls   12066.pacs28011_014     (2023年10月27日 17时51分31秒)   (Detached)   12043.pacs18011_013     (2023年10月27日 17时51分31秒)   (Detached)   12002.pacs20020_012     (2023年10月27日 17时51分31秒)   (Detached)   11980.pacs20021_011     (2023年10月27日 17时51分31秒)   (Detached)   11955.pacs20010_010     (2023年10月27日 17时51分31秒)   (Detached)   11934.pacs20004_009     (2023年10月27日 17时51分31秒)   (Detached)   11913.pacs20000_008     (2023年10月27日 17时51分31秒)   (Detached)

关于如何让 screen 任务自动转到后台运行,可以参考之前写的文章:

因为不同的目录会绑定不同的端口,所以需要启动很多的 python 进程。像这种简易的 python 提供的 web 文件下载服务,只适合开发调试模式。当长时间运行会出现内存泄漏负载变高等问题。长时间运行的 python 进程,虚拟内存占用会达几十个G。重启 python 进程可以释放占用的资源。

正常的情况肯定要将这种简易的 python http.server 服务转为正式的 Apache 或 Nginx Web 服务,Apache 和 Nginx 也都支持多端口设置。但 Apache 和 Nginx 的问题是配置太复杂,不同版本的配置也不一样。

最近正在尝试一些配置简单、安装方便的 web 服务,碰巧发现一个 Go 项目非常贴合这种多端口 Web 文件下载场景。这个项目叫 caddy,它的github 项目地址为:

https://github.com/caddyserver/caddy

多端口 HTTP 文件服务器

caddy 的优点是自带 SSL 证书,但在此场景我们只使用 http 服务,并不打算启用 https 服务。caddy 是个单文件,从项目的 release 页面可以下载编译好的可执行文件。caddy 是 go 语言开发的,所以跨平台是必须的。

我们下载好 Linux 版本的可执行文件,caddy 的当前版本为 v2.7.6

$ ./caddy versionv2.7.6 h1:w0NymbG2m9PcvKWsrXO6EEkY9Ru4FJK8uQbYcev1p3A=

准备好配置文件:

cat Caddyfile{        admin off}
:20000 { root * /pacs1 file_server browse}
:20004 { root * /pacs2 file_server browse}
:20010 { root * /pacs3 file_server browse}
:20021 { root * /pacs4 file_server browse}
:20020 { root * /pacs5 file_server browse}
:18011 { root * /pacs6 file_server browse}
:28011 { root * /pacs7 file_server browse}

启动 caddy 服务:

$ ./caddy run -c Caddyfile2024/01/04 02:07:43.614 INFO     using provided configuration    2024/01/04 02:07:43.618 WARN     admin endpoint disabled2024/01/04 02:07:43.618 INFO     tls.cache.maintenance started background certificate maintenance    2024/01/04 02:07:43.619 INFO     http.log server running {"name": "srv5", "protocols": ["h1", "h2", "h3"]}

查检本地端口是否启用:

$ netstat -anp| grep caddytcp6 0 0 :::20004  :::* LISTEN 12719/caddytcp6 0 0 :::20010  :::* LISTEN 12719/caddytcp6 0 0 :::28011  :::* LISTEN 12719/caddytcp6 0 0 :::20020  :::* LISTEN 12719/caddytcp6 0 0 :::20021  :::* LISTEN 12719/caddytcp6 0 0 :::18011  :::* LISTEN 12719/caddytcp6 0 0 :::20000  :::* LISTEN 12719/caddy

通过浏览器检查 http 服务是否正常:

多端口 HTTP 文件服务器

caddy 的文档非常全面,如果有替掉 apache 、nginx 或启用 https 的打算,可以参考它的官方文档。

https://caddyserver.com/docs/

全文完。

如果转发本文,文末务必注明:“转自微信公众号:生有可恋”。

原文始发于微信公众号(生有可恋):多端口 HTTP 文件服务器

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2024年1月6日15:05:39
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   多端口 HTTP 文件服务器https://cn-sec.com/archives/2363859.html

发表评论

匿名网友 填写信息