一、准备模拟服务器
| 服务器IP | 描述 |
|---|---|
| 172.25.0.255 | 模拟应用服务器,在88、8080、9090端口上部署了应用 |
二、准备88、8080、9090端口上的服务
直接用nginx启动在88、8080、9090端口上,用来模拟服务器的http应用
docker run -d -p 88:80 --name app1 nginx:latest
docker run -d -p 8080:80 --name app2 nginx:latest
docker run -d -p 9090:80 --name app3 nginx:latest
三、安装openssl工具
3.1 yum源替换
因Centos7已正式停止维护,yum官方源已失效,需替换为阿里云源:developer.aliyun.com/article/841…
3.2 安装openssl
yum install openssl
四、生成可用于多台服务器的局域网自签名https(ssl)证书
4.1 创建配置文件
在/data/build-ssl目录下,创建ssl配置文件
mkdir /data/build-ssl
cd /data/build-ssl
vim openssl.cnf
配置文件内容如下,注意仅需要修改[alt_names]下的内容即可,将需要做https的服务器IP全部写入,最终生成出的ssl证书就能在这些服务器使用。
[req]
distinguished_name = req_distinguished_name
req_extensions = v5_req
[req_distinguished_name]
countryName = Country Name (2 letter code)
countryName_default = CN
stateOrProvinceName = State or Province Name (full name)
stateOrProvinceName_default = ShanDong
localityName = Locality Name (eg, city)
localityName_default = Qingdao
organizationalUnitName = Organizational Unit Name (eg, section)
organizationalUnitName_default = Bencare
commonName = DCM
commonName_max = 64
emailAddress = ip@163.com
[v5_req]
# Extensions to add to a certificate request
basicConstraints = CA:FALSE
subjectAltName = @alt_names
[alt_names]
#此处增加域名和ip,使用https服务器的局域网ip即可,ip可以配置多个,只要一个自行删除
IP.1 = 172.25.0.255
IP.2 = 172.25.3.241
4.2 生成my-ssl.key
openssl genrsa -out my-ssl.key 2048
4.3 生成请求文件my-ssl.csr
openssl req -new -out my-ssl.csr -key my-ssl.key -config openssl.cnf
4.4 生成证书my-ssl.crt
openssl x509 -req -days 3650 -in my-ssl.csr -signkey my-ssl.key -out my-ssl.crt -extensions v5_req -extfile openssl.cnf
4.5 证书生成完毕
最终/data/build-ssl目录下的my-ssl.key、my-ssl.crt两个文件就是我们后续部署所需用到的Key及证书。
五、使用mul-https-forward容器进行请求转发
mul-https-forward工具的作用,就是将从https端口进入的请求转发至现有的http端口上。 我们希望的转发规则如下:
| 入口https地址 | 目标http地址 |
|---|---|
| https://172.25.0.255:188 | http://172.25.0.255:88 |
| https://172.25.0.255:18080 | http://172.25.0.255:8080 |
| https://172.25.0.255:19090 | http://172.25.0.255:9090 |
5.1 准备https证书
将【四】生成好的证书放到/etc/mhf/ssl目录下
mkdir -p /etc/mhf/ssl
cp /data/build-ssl/my-ssl.key /etc/mhf/ssl/my-ssl.key
cp /data/build-ssl/my-ssl.crt /etc/mhf/ssl/my-ssl.crt
5.2 下载mul-https-forward镜像包
docker load -i mul-https-forward_beta.tar
5.3 编写转发规则配置文件
- 在/etc/mhf/rules目录下新建mul.conf文件
mkdir -p /etc/mhf/rules
vim /etc/mhf/rules/mul.conf
- mul.conf文件中填写以下内容,每一个server块表示一个转发规则,每个块只有三个地方需要修改,其他内容请勿修改
# https的188 转发至 http的88
server {
listen 188 ssl; # 此处188需修改为https的端口
server_name 172.25.0.255; # 此处172.25.0.255需修改为服务器的IP
ssl_certificate /etc/https/my-ssl.crt;
ssl_certificate_key /etc/https/my-ssl.key;
ssl_session_timeout 5m;
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE;
ssl_prefer_server_ciphers on;
location / {
proxy_pass http://172.25.0.255:88; # 此处的IP和端口需修改为目标http地址
}
}
# https的18080 转发至 http的8080
server {
listen 18080 ssl;
server_name 172.25.0.255;
ssl_certificate /etc/https/my-ssl.crt;
ssl_certificate_key /etc/https/my-ssl.key;
ssl_session_timeout 5m;
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE;
ssl_prefer_server_ciphers on;
location / {
proxy_pass http://172.25.0.255:8080;
}
}
# https的19090 转发至 http的9090
server {
listen 19090 ssl;
server_name 172.25.0.255;
ssl_certificate /etc/https/my-ssl.crt;
ssl_certificate_key /etc/https/my-ssl.key;
ssl_session_timeout 5m;
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE;
ssl_prefer_server_ciphers on;
location / {
proxy_pass http://172.25.0.255:9090;
}
}
5.4 启动mul-https-forward容器
docker run -d --restart=always --privileged=true \
-v /etc/mhf/rules:/etc/nginx/conf.d \
-v /etc/mhf/ssl:/etc/https \
--net=host \
--name https mul-https-forward:beta