使用 IRONSECUREDOC

Haproxy Docker Compose(如何为开发人员工作)

发布 2025年一月14日
分享:

介绍

A负载均衡器是现代 IT 基础设施的重要组成部分,旨在有效地在多个服务器或资源之间分配网络流量。 这通过防止任何单一服务器过载来提高系统的可扩展性和性能。 负载均衡器位于客户端和后端服务器之间,在使用可用资源的同时将响应时间最小化。

负载均衡器执行这些基本任务,包括容错、流量分配和会话持久性。 负载均衡器可以是主要的软件程序、物理产品,或由AWS或Azure提供的云服务。 用于流量分配的一些最常用算法是轮询、最少连接和IP哈希。

什么是 HAProxy Docker?

HAProxy Docker是指将HAProxy负载均衡器放置在Docker容器中。 HAProxy的流量管理功能现在可以与Docker的灵活性和可移植性相结合。 HAProxy 是一种流行、广泛使用的开源负载均衡器,适用于提供高可用性和反向代理的网络应用和微服务环境。 在Docker容器主机中运行HAProxy的优点包括易于部署、隔离性、可扩展性和平台独立性。 HAProxy Docker 可以高效地在多个后端服务之间分配流量,监控容器的健康状况,并根据容器的可用性动态调整路由。

破损图片 添加自 Pixabay,请从您的文件中选择或将图片拖放到此处。

它支持功能如SSL/TLS终止、会话持久性以及多种负载均衡算法,包括轮询和最少连接数。 这使得HAProxy Docker成为管理容器化流量的绝佳方式,因为它甚至可以很好地与Kubernetes或Docker Swarm等编排工具集成,以提供动态扩展和自动化服务发现。 这确保了现代应用程序具有强大、高性能和安全的流量管理,而不会出现任何文件问题。

HAProxy Docker 的功能

负载平衡

HAProxy在将网络流量负载分配到多个后端服务器方面表现出色。 它的多种负载均衡算法包括轮询、最少连接和 IP 哈希,以便客户可以根据其应用程序的特殊需求调整流量。 这使得HAProxy可以在第4层上接受流量。(TCP)和第7层(HTTP/HTTPS)支持的架构,使其从简单的TCP路由应用程序到复杂的应用层负载均衡器的高性能范围内。

高可用性

核心功能,高可用性,意味着保持服务始终在线和运行。 HAProxy 会根据后端服务器的健康状态,将流量从被证明不健康或失效的服务器转移出去。 故障切换可在服务器不可用或意外故障时,防止过多的停机时间。

SSL/TLS支持

HAProxy 完全支持 SSL/TLS,确保客户端到服务器的安全通信。 此外,HAProxy 可以终止 SSL/TLS 连接,将加密和解密任务卸载给后端服务器,从而提高前者的性能。 如果需要端到端加密,HAProxy可以将加密流量转发到其背后的服务。

反向代理

HAProxy 是最好的反向代理之一,可以将所有客户端请求流量发送到后端的相关服务。它支持功能,如修改头信息、从 URL 重定向,甚至可以根据特定的用户条件和特定规则进行一些专门的路由。 因此,HAProxy 也可以被视为与微服务一起的多服务架构的可行候选之一。

安全增强

HAProxy 具备丰富的安全功能,例如速率限制、DDoS 保护和 ACL。 所有这些都用于过滤传入流量,这意味着可能会到达后端服务器的恶意请求将被阻止,保持您的应用程序稳定。

可扩展性

HAProxy高度可扩展。 它能够轻松支持数百万个并发连接,而不会出现与使用相关的延迟问题,并且可以在扩展时不卡顿。 此环境支持容器编排环境,例如Kubernetes和Docker Swarm,其容器化工作负载提供动态扩展和服务发现的优势。

日志和监控

HAProxy具有细粒度的日志记录功能,可以帮助理解流量、排查问题和分析性能。 它能够与 Prometheus 的监控工具、Grafana 和 Datadog 等无缝互操作,实时展示服务器健康状态、网络流量和资源利用率的数据。

HAProxy 支持配置的灵活性。

HAProxy 提供非常灵活和强大的配置能力。 使用它,用户可以定义相当复杂的路由规则,例如根据标头或 cookie 有条件地进行路由。 支持URL重写和会话持久性,甚至多租户,使得HAProxy的一个实例可以服务多个域或应用程序。

使用 Docker 安装 HAProxy

使用 Docker 安装和运行 HAProxy 是一个相当简单的过程。 以下是逐步执行的步骤。

Docker安装

确保您的系统上已安装 Docker。 要验证安装,可以运行以下命令:

docker --version
docker --version
'INSTANT VB TODO TASK: The following line uses invalid syntax:
'docker --version
VB   C#

Haproxy Docker Compose(开发人员如何工作):图 2 - 验证 Docker 安装

如果系统上未安装 Docker,请访问Docker 链接在此处从官方网站下载并安装。

拉取HAProxy Docker镜像

从 Docker Hub 拉取官方 HAProxy 镜像。 最新的HAProxy版本将下载最新的稳定版本:

docker pull haproxy:latest
docker pull haproxy:latest
'INSTANT VB TODO TASK: The following line uses invalid syntax:
'docker pull haproxy:latest
VB   C#

HAProxy Docker Compose(开发者如何使用):图3 - 拉取 HAProxy Docker 镜像

创建一个HAProxy配置文件

HAProxy需要一个定义其行为的配置文件。 下载 Docker 和 HAProxy 的相应 Dockerfile 链接后,创建一个名为 haproxy.cfg 的文件,内容如下示例:

global
    log stdout format raw local0
defaults
    log     global
    mode    http
    timeout connect 5s
    timeout client  50s
    timeout server  50s
frontend http_front
    bind *:80
    default_backend http_back
backend http_back
    server app1 host.docker.internal:32769 check
global
    log stdout format raw local0
defaults
    log     global
    mode    http
    timeout connect 5s
    timeout client  50s
    timeout server  50s
frontend http_front
    bind *:80
    default_backend http_back
backend http_back
    server app1 host.docker.internal:32769 check
'INSTANT VB TODO TASK: The following line uses invalid syntax:
'global log stdout format raw local0 defaults log global mode http timeout connect 5s timeout client 50s timeout server 50s frontend http_front bind *:80 default_backend http_back backend http_back server app1 host.docker.internal:32769 check
VB   C#

此 HAProxy 配置定义:

前端:监听端口4500并将流量路由到后端

后端:在两个服务器之间分配流量,即app1。

运行 HAProxy Docker 容器

运行 HAProxy Docker 容器,挂载配置文件并开放必要的端口:

docker run -d --network haproxy --name haproxy-container -p 4500:4500 -v D:\Docker\haproxy-config\haproxy.cfg:/usr/local/etc/haproxy/haproxy.cfg:ro haproxy:latest
docker run -d --network haproxy --name haproxy-container -p 4500:4500 -v D:\Docker\haproxy-config\haproxy.cfg:/usr/local/etc/haproxy/haproxy.cfg:ro haproxy:latest
'INSTANT VB TODO TASK: The following line uses invalid syntax:
'docker run -d --network haproxy --name haproxy-container -p 4500:4500 -v D:\Docker\haproxy-config\haproxy.cfg:/usr/local/etc/haproxy/haproxy.cfg:ro haproxy:latest
VB   C#
  • -d: 分离模式用于运行容器。

    • --name haproxy-container: 为容器指定名称。

    将主机上的端口4500映射到容器中的端口4500。

  • -v $(密码)/haproxy.cfg:/usr/local/etc/haproxy/haproxy.cfg:ro 将本地配置文件挂载到容器中。

访问HAProxy

Haproxy Docker Compose(开发人员如何工作):图 4 - HAProxy 输出

打开网页浏览器,导航到 http://localhost:4500 或您的服务器 IP 地址以测试流量路由。

要检查HAProxy的统计信息,请运行以下命令:

Haproxy Docker Compose(开发人员工作原理):图5 - HAProxy统计数据

什么是 IronSecureDoc?

IronSecureDoc是一个用于文档管理和安全的工具,依靠强大的加密、先进的PDF操作和数字签名。 它为公司和开发人员提供文档的机密性和完整性,使得访问顺畅,从而无需直接或间接依赖即可更轻松地处理PDF文档。 在其功能使开发人员能够以编程方式创建、上传、操作和保护 PDF 文件和文档的情况下,这也可以称为 Aggressive PDF API。

Haproxy Docker Compose(它如何为开发人员工作):图6 - IronSecureDoc:PDF安全与合规服务器

此外,IronPDF 是一个 PDF API,可轻松从任何数据输入创建 PDF,并使用文本、图像和元数据等参数添加或编辑内容。 这包括合并多个PDF以生成合成文件、拆分文档,甚至添加注释、突出显示或水印等功能。

它提供密码保护、AES加密和基于证书的访问控制,可以锁定所有敏感信息和数据。 除此之外,它还支持数字签名以验证您的文档,并提供不可否认性——这是金融、医疗和法律行业中非常重要的特性。 其审计跟踪功能允许监控文档上执行的所有活动,以提高合规性和问责性。

安装并运行 IronSecureDoc

使用以下存储库中的命令在命令提示符或打开的终端窗口中拉取 IronSecureDoc 的 Docker 映像。

docker pull ironsoftwareofficial/ironsecuredoc
docker pull ironsoftwareofficial/ironsecuredoc
'INSTANT VB TODO TASK: The following line uses invalid syntax:
'docker pull ironsoftwareofficial/ironsecuredoc
VB   C#

Haproxy Docker Compose(开发者如何使用):图7 - 拉取IronSecureDoc Docker镜像

IronSecureDoc,一个操作容器。IronSecureDoc,一个操作容器。

docker container run --rm -p 8080:8080 -e IronSecureDoc_LicenseKey=<IRONSECUREDOC_LICENSE_KEY> -e ENVIRONMENT=Development -e HTTP_PORTS=8080 ironsoftwareofficial/ironsecuredoc:latest
docker container run --rm -p 8080:8080 -e IronSecureDoc_LicenseKey=<IRONSECUREDOC_LICENSE_KEY> -e ENVIRONMENT=Development -e HTTP_PORTS=8080 ironsoftwareofficial/ironsecuredoc:latest
'INSTANT VB TODO TASK: The following line uses invalid syntax:
'docker container run --rm -p 8080:8080 -e IronSecureDoc_LicenseKey=<IRONSECUREDOC_LICENSE_KEY> -e ENVIRONMENT=Development -e HTTP_PORTS=8080 ironsoftwareofficial/ironsecuredoc:latest
VB   C#

上面的 Docker run 命令将启动 IronSecureDoc 的容器实例。 现在,您可以通过端口 http://localhost:8080/swagger/index.html 访问 IronSecureDoc,就像下面的页面一样。

Haproxy Docker Compose(开发人员如何使用):图8 - REST API

将IronSecureDoc与HAProxy集成

准备一个haproxy.cfg文件来定义您的前端和后端配置。 下面是一个简单的示例配置:

explain below haproxy.cfg file 
global
    log stdout format raw local0
defaults
    log     global
    mode    http
    option  httplog
    timeout connect 5000ms
    timeout client  50000ms
    timeout server  50000ms
frontend http_front
    bind *:4500
    acl body_has_data req.hdr_val(Content-Length) gt 0
    http-request set-method POST if METH_GET body_has_data
    use_backend ironsecuredoc if { path /ironsecuredoc } 
 { path_beg /ironsecuredoc/ }
    use_backend ironsecuredoc_ping if { path /ping } 
 { path_beg /ping/ }
    use_backend ironsecuredoc_encrypt if { path /encrypt } 
 { path_beg /encrypt/ }
    #default_backend ironsecuredoc
backend ironsecuredoc
    balance roundrobin
    http-request set-path /swagger/index.html
    server ironsecuredoc_server3 host.docker.internal:8080 check
backend ironsecuredoc_encrypt
    balance roundrobin
    http-request set-path /v1/document-services/pdfs/encrypt
    server ironsecuredoc_server3 host.docker.internal:8080 check
backend ironsecuredoc_ping
    balance roundrobin
    http-request set-path /v1/document-services/ping
    server ironsecuredoc_server3 host.docker.internal:8080 check
explain below haproxy.cfg file 
global
    log stdout format raw local0
defaults
    log     global
    mode    http
    option  httplog
    timeout connect 5000ms
    timeout client  50000ms
    timeout server  50000ms
frontend http_front
    bind *:4500
    acl body_has_data req.hdr_val(Content-Length) gt 0
    http-request set-method POST if METH_GET body_has_data
    use_backend ironsecuredoc if { path /ironsecuredoc } 
 { path_beg /ironsecuredoc/ }
    use_backend ironsecuredoc_ping if { path /ping } 
 { path_beg /ping/ }
    use_backend ironsecuredoc_encrypt if { path /encrypt } 
 { path_beg /encrypt/ }
    #default_backend ironsecuredoc
backend ironsecuredoc
    balance roundrobin
    http-request set-path /swagger/index.html
    server ironsecuredoc_server3 host.docker.internal:8080 check
backend ironsecuredoc_encrypt
    balance roundrobin
    http-request set-path /v1/document-services/pdfs/encrypt
    server ironsecuredoc_server3 host.docker.internal:8080 check
backend ironsecuredoc_ping
    balance roundrobin
    http-request set-path /v1/document-services/ping
    server ironsecuredoc_server3 host.docker.internal:8080 check
explain below haproxy.cfg file global log stdout format raw local0 defaults log global mode http [option] httplog timeout connect 5000Ds timeout client 50000Ds timeout server 50000Ds frontend http_front bind *:4500 acl Function req_hdr_val(Content- ByVal Length As ) As body_has_data Implements req.hdr_val
'INSTANT VB TODO TASK: Local functions are not converted by Instant VB:
'	path /ironsecuredoc }
' {
'	 path_beg /ironsecuredoc/
' }
'INSTANT VB TODO TASK: Local functions are not converted by Instant VB:
' use_backend ironsecuredoc_ping if
' {
'	 path /ping }
' {
'	 path_beg /ping/
' }
' use_backend ironsecuredoc_encrypt if
' {
'	 path /encrypt }
' {
'	#default_backend ironsecuredoc
'	 path_beg /encrypt/
' }
''INSTANT VB TODO TASK: The following line uses invalid syntax:
'' backend ironsecuredoc balance roundrobin http-request @set-path /swagger/index.html server ironsecuredoc_server3 host.docker.internal:8080 check backend ironsecuredoc_encrypt balance roundrobin http-request @set-path /v1/document-services/pdfs/encrypt server ironsecuredoc_server3 host.docker.internal:8080 check backend ironsecuredoc_ping balance roundrobin http-request @set-path /v1/document-services/ping server ironsecuredoc_server3 host.docker.internal:8080 check
VB   C#

HAProxy 的这个配置文件创建了一个能够处理多个 IronSecureDoc 服务 HTTP 流量的系统。 然后全局配置为将原始日志输出到标准输出,并且默认部分启用 HTTP 作为模式和详细的 HTTP,同时为客户端和服务器设置连接超时。 前端是定义在端口4500上的http_front,包括基于HTTP请求路径的路由管理规则。例如,请求/ironsecuredoc会被路由到ironsecuredoc后端。 对 /ping 和 /encrypt 的请求会被路由到各自的后端。 ACL 规则通过 Content-Length 头部识别具有请求体的请求。 如果存在主体,则将 GET 请求转换为 POST。

轮询算法用于在后端之间分配流量。 每个后端在将请求路径转发到对应的服务器之前,会对其进行重写。 例如,ironsecuredoc 后端将路径重写为 /swagger/index.html。 ironsecuredoc_encrypt 和 ironsecuredoc_ping 后端分别将路径重写为 /v1/document-services/pdfs/encrypt 和 /v1/document-services/ping。 它们全部指向运行在 host.docker.internal:8080 的单个服务器。添加了健康检查以确保服务器可用。 因此,该配置确保了不同服务的流量管理顺畅,同时在请求操作上具有灵活性。

curl -X 'POST' \
  'http://localhost:4500/encrypt?user_password=demo' \
  -H 'accept: */*' \
  -H 'Content-Type: multipart/form-data' \
  -F 'pdf_file=@test.pdf;type=application/pdf'
curl -X 'POST' \
  'http://localhost:4500/encrypt?user_password=demo' \
  -H 'accept: */*' \
  -H 'Content-Type: multipart/form-data' \
  -F 'pdf_file=@test.pdf;type=application/pdf'
'INSTANT VB TODO TASK: The following line uses invalid syntax:
'curl -X 'POST' \ 'http: -H 'accept: */ *' \ -H 'Content-Type: multipart/form-data' \ -F 'pdf_file=@test.pdf;type=application/pdf'
VB   C#

但是,如果我们发布到IronSecureDoc API,我们还可能希望请求用户密码以用用户的密码对文档请求进行加密。 文档输出文件将被自动发送和下载,并会被安全保存。

结论

它还将集成HAProxy与包含的IronSecureDoc软件,以确保在管理文档安全服务中提供可靠且可扩展的解决方案,实现流量优化路由和负载均衡。 由于通过实施用于处理故障转移的健康检查,结合针对不同服务端点提供自定义路由规则的方式,IronSecureDoc的多个实例之间的流量高效分配,从而确保了高可用性。

此配置支持灵活处理诸如加密和健康监测等复杂的工作流程,同时在未来具有可扩展性。 无论是在容器化环境还是传统环境中,HAProxy 的轻量级但高性能设计可有效补充 IronSecureDoc 的安全特性,为安全文档提供可靠且高效的管理。 因此,来自HAProxy的功能可以帮助组织在部署IronSecureDoc时提高应用程序的性能和弹性。

使用IronSecureDoc REST API,安全打印和高效的PDF格式处理现在可以轻松整合到由Web、移动和企业系统开发人员开发的应用程序中。 如需了解有关IronSecureDoc许可证的更多信息,请访问许可页面. 关于Iron Software产品的信息,请访问库套件页面.

< 前一页
immich Docker Compose(它对开发人员的作用)
下一步 >
Wazuh Docker Compose(它如何为开发人员工作)

准备开始了吗? 版本: 2024.10 刚刚发布

免费下载查看许可证 >