Centos7.6x64最新版 docker-compose Nginx 配置Https

背景 docker-compose 安装了 基于http 的应用如:nginx,tomcat,mysql,redis 等 如何使用基于https的访问请求地址呢?

此篇博客基于nginx 配置https 访问tomat应用, 如基于:tomcat  ,Apache ,IIS等配置 后续再说

一,需要ssl证书

正常企业及个人版需要购买,如是有阿里ECS服务器可以免费购买1个域名的https 证书 如何申请阿里云免费SSL证书?官网引导地址

安装步骤申请购买后,验证通过 则可以下载证书进行使用 ,我们下载对应nginx的证书包括:xxx.xx.xx.key ,xxx.xx.xx.pem

二,配置证书

1,拷贝证书文件到服务器 宿主机 中nginx 的conf用于容器挂载的文件加下: conf/nginx/cert 文件下 注意:conf为docer-compose 应用的配置总目录.

2,修改用于nginx容器挂在的 conf.d/default.conf 文件 配置443 和证书文件地址(注意地址并非是宿主机文件地址,而是容器中映射挂载后的容器配置地址)  

应用的监听的配置:

server {
    listen       80;
    server_name  www.xx.abcxx.cn xx.abcxx.cn;
    #charset koi8-r;
    #access_log  /var/log/nginx/host.access.log  main;

    location / {
	    client_max_body_size    100m;
        proxy_pass http://tomcatcluster$request_uri;
	    proxy_set_header Host $host:$server_port;
	    proxy_set_header X-Real-IP  $remote_addr;
        proxy_set_header REMOTE-HOST $remote_addr;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
        proxy_set_header MY-Proxy 'outer';
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-HTTPS "on";
    }
}

接着下面配置443

server {
    listen      443 ssl; # 这个是https访问的端口
    server_name  www.xx.abcxx.cn xx.abcxx.cn;

    #增加ssl
#    ssl on; # 如果强制HTTPs访问,这行要打开
#    root html;
#    index index.html index.htm;
    ssl_certificate   /etc/nginx/cert/123_xx.abcxx.cn.pem; # 注意此地址为docker-compose 中nginx cert挂在后的目录
    ssl_certificate_key  /etc/nginx/cert/123_xx.abcxx.cn.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; #  指定密码为openssl支持的格式
    ssl_prefer_server_ciphers on; # 依赖SSLv3和TLSv1协议的服务器密码将优先于客户端密码

    #charset koi8-r;
    #access_log  /var/log/nginx/host.access.log  main;

    location / {
	client_max_body_size    100m;
        # proxy_http_version 1.1;
        server_name_in_redirect off;
        proxy_pass http://tomcatcluster$request_uri;
	proxy_set_header Host $host:$server_port;
	proxy_set_header X-Real-IP  $remote_addr;
        proxy_set_header REMOTE-HOST $remote_addr;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
        proxy_set_header MY-Proxy 'outer';
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-HTTPS "on";
    }
}

3,修改docker-compose.yml 中的nginx代理  映射443端口

 nginx:
    image: nginx:latest
    container_name: shop_nginx
    links:
      - tomcat01
      - tomcat02
    ports:
      - 443:443 # ssl 默认是443端口,因此需要将443端口映射到宿主机上
      - 80:80
    volumes:
      - ./conf/nginx/conf:/etc/nginx
      - ./conf/nginx/logs:/var/log/nginx
      - ./conf/nginx/www:/usr/share/nginx/www
      - ./conf/nginx/html:/usr/share/nginx/html
      - ./conf/nginx/cert:/etc/nginx/cert:ro # 注意/etc/nginx/cert这个地址就是nginx中证书地址

修改了docker-compose.yml后 需要重新启动

docker-compose down # 1先停止

docker-compose up -d # 2启动

docker-compose ps # 查看nginx 是否启动成功

成功后 浏览器输入:https://www.xx.abcxx.cn 查看能否访问tomcat中的应用

四 重点

配置过程中可能会遇到:

1) Stoping nginx... nginx: [emerg] BIO_new_file("/usr/local/nginx/conf/cert/xxxxxxxxxxx.pem") faile  

证书挂在目录不对/或nginx 配置文件中 证书地址不是容器中nginx挂载后的容器配置地址(须注意,与常规配置地址不同),会导致此问题

2,证书路径正确 按读取正式失败:(注意意义对应,请勿将xxx.pem 配到ssl_certificate_key 上,却把xxx.key 配到了ssl_certificate 上)

   ssl_certificate   /etc/nginx/cert/123_xx.abcxx.cn.pem; # 注意此地址为docker-compose 中nginx cert挂在后的目录
   ssl_certificate_key  /etc/nginx/cert/123_xx.abcxx.cn.key;

3,如果以上都没问题  却不能访问,但http 都是正常的 ,http加s后 就不能访问,请查看防火墙,安全组是否放行443端口

发布了45 篇原创文章 · 获赞 3 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/cfm_gavin/article/details/95620434