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文件夹下的日志内容,具体定位问题所在

相关推荐
小Wang11 小时前
npm私有库创建(docker+verdaccio)
前端·docker·npm
muyun28003 天前
Docker 下部署 Elasticsearch 8 并集成 Kibana 和 IK 分词器
elasticsearch·docker·容器
雨落Liy3 天前
Nginx 从入门到进阶:反向代理、负载均衡与高性能实战指南
运维·nginx·负载均衡
Yyyy4823 天前
Nginx负载均衡集群实验步骤
运维·nginx·负载均衡
傻傻虎虎3 天前
【Docker】常用帮忙、镜像、容器、其他命令合集(2)
运维·docker·容器
ftpeak3 天前
从零开始使用 axum-server 构建 HTTP/HTTPS 服务
网络·http·https·rust·web·web app
qq_264220893 天前
Nginx优化与 SSL/TLS配置
运维·nginx
00后程序员张3 天前
详细解析苹果iOS应用上架到App Store的完整步骤与指南
android·ios·小程序·https·uni-app·iphone·webview
2401_897930063 天前
使用Docker轻松部署Neo4j图数据库
数据库·docker·neo4j
matlab的学徒3 天前
Web与Nginx网站服务(改)
linux·运维·前端·nginx·tomcat