宿主机使用nginx向docker容器转发https请求

转载请注明出处,踩坑不易~


实现步骤:
1.给容器添加端口映射;
2.宿主机nginx中配置SSL证书;
3.宿主机nginx转发;


给容器添加端口映射
情况1:容器尚未创建

如果容器尚未创建,可以使用 docker run 命令的-p参数,为容器指定端口映射,例如:docker run -ti --name web -d -p 80:8080 -p 85:8085 镜像名称 /bin/bash ,通过-p这个run命令的选项就将容器中的80端口和85端口映射到宿主机的8080端口和8085端口;容器运行成功后可以使用 docker port 检查端口映射情况

情况2:容器已经在运行中

如果容器已经在运行中就需要使用 iptable转发端口:
1.查看容器的内部网络的固定ip
docker inspect web | grep IPAddress
2.转发本地的8085端口到容器的85端口:
iptables -t nat -A DOCKER -p tcp --dport 8085 -j DNAT --to-destination 172.17.0.2:85
3.检查端口是否转发成功:
iptables -t nat -nL --line-number 规则的组名为:DOCKER

在宿主机中配置ssl
假如在容器内,85端口已经提供正确的web服务了,此时只需要在宿主机内配置SSL证书并转发到本地映射的8085端口就能正常访问使用https了,切记:容器内不需要在配置SSL的证书,否则就变成SSL的双向验证了,如果容器内同时配置了SSL的证书,就会发生“400 Bad Request: The plain HTTP request was sent to HTTPS port” 的错误。

宿主机中的SSL配置

 listen       443 ssl;
        server_name  test.api.umijoy.com;
        ssl_certificate /usr/https/full_chain.crt;
        ssl_certificate_key /usr/https/private.key;
        ssl_session_timeout 5m;
        ssl_protocols TLSv1 TLSv1.1 TLSv1.2; #........................
        ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE;#........................
        ssl_prefer_server_ciphers on;


配置端口转发(整个的端口过程应该是 【外网->宿主机的443端口->转发到宿主机的8085端口->映射的容器的85端口)】

 location / {

       # proxy_set_header Host $host;
       # proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_pass http://localhost:8085/;
       }

完整的配置:

server {
        listen       443 ssl;
        server_name  test.api.umijoy.com;
        ssl_certificate /usr/https/full_chain.crt;
        ssl_certificate_key /usr/https/private.key;
        ssl_session_timeout 5m;
        ssl_protocols TLSv1 TLSv1.1 TLSv1.2; #........................
        ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE;#........................
        ssl_prefer_server_ciphers on;



        #charset koi8-r;

        #access_log  logs/host.access.log  main;

        location / {

       # proxy_set_header Host $host;
       # proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_pass http://localhost:8085/;
       }
}

附免费签发https证书网站:https://freessl.cn/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值