docker nginx ssl设置

使用docker运行nginx,配置代理,和ssl设置,进行https访问

一 准备

本次在centos环境中

1.已安装docker,docker-compose

2.运行了一个后端服务容器,提供基本的接口访问【可选】

3.一个域名(已经解析到服务器上)【必要】

4.ssl证书【必要】

二 ssl证书下载

使用阿里云免费证书

登陆阿里云管理控制台,搜索 数字证书管理服务 ,进入证书管理

点击左侧ssl证书,进入,点击免费证书,点击创建证书

创建后,点击证书申请

填写内容,进行申请

通过后,点击下载,选择nginx项

下载完成后上传至服务器,解压后有两个文件,分别以pem和key后缀

三 docker 容器间通信网络

由于nginx和服务都是运行在docker中,为了更好的进行容器间通信,使用docker的网络

bash 复制代码
docker network create --driver bridge --subnet 172.30.1.0/24 --gateway 172.30.1.1 my_net
# my_net 自定义网络名称

创建好一个网络后,查看 docker network list

bash 复制代码
[root@k8s-work2 men]# docker network list
NETWORK ID     NAME                   DRIVER    SCOPE
87c6a3cc05f4   bridge                 bridge    local
06441e9ed2b7   harbor_harbor          bridge    local
c1e749a2cfe9   host                   host      local
d09d714a1054   menstruation_default   bridge    local
bf99db8fc21e   my_net                 bridge    local
8a50da08ea68   my_network             bridge    local
042f6ecb737f   none                   null      local

创建容器时指定使用网络,参照4.3

四 nginx

4.1 拉取镜像

bash 复制代码
docker pull nginx

4.2 创建配置文件

创建一个文件夹conf,增加一个文件nginx.conf,作为nginx的配置文件

其中后端服务的ip为自定义固定的,也可以使用后端服务容器名称【需要创建该容器时加入 三 中的网络】

Groovy 复制代码
events {
          
   
    worker_connections  1024;
}


http {
          
   
    include       mime.types;
    default_type  application/octet-stream;
    sendfile        on;
    keepalive_timeout  65;
    client_max_body_size 50m;

        server{
          
   
                listen       80;
                server_name  服务器ip;
                location = /favicon.ico {
                        access_log off;
                        log_not_found off;
                }
                location / {
          
                        proxy_pass http://172.30.1.8:8080/; # 后端服务ip接口
                }
        }
        server{


                listen       80;
                server_name  域名;
                # 过滤请求
                location = /favicon.ico {
                        access_log off;
                        log_not_found off;
                }
                location / {

                        proxy_pass http://172.30.1.8:8080/; # 后端服务ip接口
                }
        }
        server {
                listen 443 ssl;
                server_name 域名;
                ssl_certificate /etc/nginx/certs/xxx.pem; # 证书文件
                ssl_certificate_key /etc/nginx/certs/xxx.key; # 证书文件
                ssl_session_timeout 5m;
                ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
                 #表示使用的加密套件的类型。
                 ssl_protocols TLSv1 TLSv1.1 TLSv1.2; # 表示使用的TLS协议的类型。
                 ssl_prefer_server_ciphers on;
                location / {
                        proxy_pass http://172.30.1.8:8080/; # 后端服务ip接口
                }

        }

}

4.3 docker-compose.yaml

创建一个文件夹存放docker-compose.yaml

Groovy 复制代码
version: "3"
services:
  nginx:
    image: nginx #镜像名称
    container_name: nginx #容器名称
    stdin_open: true
    tty: true
    restart: always
    ports:
      - 80:80
      - 443:443
    volumes:
      - /usr/local/nginx/docker/certs:/etc/nginx/certs #将服务器上保存证书的目录挂载到nginx容器中
      - /usr/local/nginx/docker/logs:/var/log/nginx #挂载日记
      - /usr/local/nginx/docker/conf/nginx.conf:/etc/nginx/nginx.conf #挂载配置文件
    privileged: true
    networks:
      my_net:
          ipv4_address: 172.30.1.3 #固定ip
    environment:
      - SSL_CERT_PATH=/etc/nginx/certs/xxx.pem #证书名
      - SSL_KEY_PATH=/etc/nginx/certs/x.key #证书名
networks:
  my_net:
    external: true

4.4 运行

bash 复制代码
docker-compose up -d

五 验证

在浏览器中访问 https://域名/records/all/1,返回后端服务/records/all/1返回内容

并且有https图标

如果没有返回,则需查看logs文件夹下的日志内容,具体定位问题所在

相关推荐
小何学计算机1 小时前
HTTPS工作原理
网络协议·http·https
Liudef061 小时前
Docker企业级应用:从入门到生产环境最佳实践
docker·容器·eureka
?ccc?3 小时前
容器技术技术入门与 Docker 环境部署
运维·docker·容器
时时刻刻看着自己的心3 小时前
docker启动报错
运维·docker·容器
游戏开发爱好者83 小时前
iOS 出海 App 安全加固指南:无源码环境下的 IPA 加固与防破解方法
websocket·网络协议·tcp/ip·http·网络安全·https·udp
2501_915921434 小时前
苹果App上架流程:不用Mac也可以上架的方法
websocket·网络协议·tcp/ip·http·网络安全·https·udp
匆匆那年9674 小时前
Docker容器中安装MongoDB,导入数据
运维·docker·容器
i小溪5 小时前
在使用 Docker 时,如果容器挂载的数据目录(如 `/var/moments`)位于数据盘,只要服务没有读写,数据盘是否就不会被唤醒?
人工智能·docker
苹果醋37 小时前
Vue3组合式API应用:状态共享与逻辑复用最佳实践
java·运维·spring boot·mysql·nginx
蓝纹绿茶8 小时前
【Mac】实现Docker下载安装【正在逐步完善】
macos·docker·容器