医院内网的服务大多是以未加密的 HTTP 形式提供服务,服务器有 IIS 、Tomcat 、Apache等。有一个需求要将内网的 HTTP 服务映射到公网,但暴露在公网的服务要以 HTTPS 的形式对外开放。
换句话描述就是,后端还是使用原始的 HTTP 服务,前端使用 HTTPS 处理加解密。不对后端服务器做任何改造,通过增加一层 HTTPS 的处理层来实现 HTTP 转 HTTPS。
有两种实现思路,一种使用负载均衡设备实现 HTTP 转 HTTPS,另一种是使用 Nginx 来实现。
先说下 Nginx 方案:
实现原理:Nginx 接收 HTTPS 请求,处理 SSL 加密,然后将解密后的请求转发给后端的 HTTP 服务。后端服务只需要继续运行 HTTP,不需要处理 HTTPS。
Nginx方案:
-
Nginx 处理来自客户端的 HTTPS 请求。
-
Nginx 终止 SSL(SSL termination),解密请求并将请求转发给原始的 HTTP 服务。
-
客户端只与 Nginx 通信,并认为整个通信过程是通过 HTTPS 加密的。
-
后端 HTTP 服务仍然只处理 HTTP 流量,Nginx 负责解密和代理。
Nginx 配置文件 Demo:
events {
worker_connections 1024; #单个后台worker process进程的最大并发链接数
}
http {
server {
# 监听 HTTPS 请求
listen 443 ssl;
server_name your_domain.com;
# SSL 证书配置
# ssl_certificate /etc/nginx/ssl/your_domain.com.crt;
# ssl_certificate_key /etc/nginx/ssl/your_domain.com.key;
ssl_certificate D:/nginx/nginx-1.27.0/ssl/it.vip.crt;
ssl_certificate_key D:/nginx/nginx-1.27.0/ssl/it.vip.key;
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers HIGH:!aNULL:!MD5;
# 反向代理到后端 HTTP 服务
location / {
proxy_pass http://it.vip:19999/; # 转发到后端 HTTP 服务器
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;
}
}
}
本地测试的 Nginx 版本是 v1.27.0,测试平台是 Windows ,HTTP 转 HTTPS 后的服务效果为:
配置文件中的证书一般由厂家提供,或使用免费的自签证书,商用证书便宜的需要¥2000左右每年,网上免费的有效期一般只有三个月。
负载均衡方案
第二种方案需要花钱购买负载均衡设备,负载均衡设备一般在17万左右一台,一般会使用两台组一个主备方案。因为各家使用的设备型号都不同,所以配置只是作为参考。
以下配置是以 Sangfor 的负载示例:
全文完。
原文始发于微信公众号(生有可恋):HTTP 转 HTTPS
- 左青龙
- 微信扫一扫
- 右白虎
- 微信扫一扫
评论