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

该博客介绍了如何通过Docker容器添加端口映射,并在宿主机上配置Nginx SSL证书,实现从外网通过HTTPS访问容器内服务的流程。首先,针对未创建和已运行的容器分别展示了端口映射的方法。接着,详细说明了在宿主机上配置SSL证书的步骤,并提供了Nginx的配置示例以完成从443端口到容器85端口的转发。
摘要由CSDN通过智能技术生成

转载地址:https://blog.csdn.net/qq_32080545/article/details/85221112

实现步骤:
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/;
       }
}
要在nginx中设置反向代理docker容器,可以按照以下步骤进行操作: 1. 首先,在docker-compose.yml文件中定义nginx服务,并将其配置为反向代理到目标docker容器。例如,可以将以下内容添加到docker-compose.yml文件中: ``` version: '2.0' services: nginx: restart: always image: nginx container_name: nginx ports: - 81:80 volumes: - ./conf/nginx.conf:/etc/nginx/nginx.conf - ./wwwroot:/usr/share/nginx/wwwroot ``` 这将创建一个名为nginx的服务,并将其配置为监听主机的81端口,并将请求转发到目标docker容器。 2. 然后,将nginx的配置文件nginx.conf复制到宿主机上的指定目录。可以使用以下命令将容器中的nginx.conf文件复制到宿主机上的/home/nginx/conf/nginx.conf: ``` docker cp nginx:/etc/nginx/nginx.conf /home/nginx/conf/nginx.conf ``` 3. 接下来,根据需要,将容器中的其他配置文件或文件夹复制到宿主机上的相应目录。例如,可以使用以下命令将容器中的conf.d文件夹复制到宿主机上的/home/nginx/conf/conf.d目录: ``` docker cp nginx:/etc/nginx/conf.d /home/nginx/conf/conf.d ``` 4. 最后,使用docker run命令重新启动nginx容器,并将宿主机上的配置文件和文件夹挂载到容器中。例如,可以使用以下命令重新启动nginx容器,并将宿主机上的/home/nginx/conf/nginx.conf挂载到容器的/etc/nginx/nginx.conf: ``` docker rm -f nginx docker run -p 9002:80 --name nginx -v /home/nginx/conf/nginx.conf:/etc/nginx/nginx.conf -v /home/nginx/conf/conf.d:/etc/nginx/conf.d -v /home/nginx/log:/var/log/nginx -v /home/nginx/html:/usr/share/nginx/html -d nginx:latest ``` 这样,nginx就会作为反向代理服务器运行,并将请求转发到目标docker容器。请根据实际情况修改配置文件路径和端口号。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值