SSL证书的卸载

当时腾讯申请域名的时候可以免费申请SSL证书,所以我就把这个站点变成了https的访问方式。如何开启SSL并且处理SSL证书,我想了好多个办法,这里写一下我采取的各种方案:

  1. 像最开始的文章写道的,利用wordpress自带的apache web server启用SSL,并做了http到https的redirect。但是这个比较麻烦,需要重新打包wordpress容器。以后wordpress官方容器升级了,你如果想更新,还得重新打包。
  2. 后来学习Azure的七层负载均衡,就使用Azure的application gateway做了SSL卸载。将IIS类型的证书上传到application gateway,并将我的服务器配置到application gateway的后端,启用http和https,并配置http到https的redirect。这个方案最大的问题就是贵。看账单,网站没什么流量的情况下,application gateway的费用比服务器的费用还高。
  3. 正好这几天在学习Nginx,想到用Nginx做反向代理并做SSL证书卸载。同时Nginx、wordpress和后端的MySQL都以容器的方式运行

这里写一下第三个方案具体是怎么实现的。

都已经有三个容器了,我就使用docker-compose做了个简单的编排。步骤如下:

1、docker中建一个bridge的网络,这样三个网络都在这个网络下运行,实现三个容器之间使用主机名就能通信。(其实docker-compose会根据project的名称自动建一个bridge的网络并将所有的service都运行在这个网络下)

docker create network wordpress_network

2、建一个临时的Nginx容器,并将临时容器里的/etc/nginx文件夹的内容都拷贝到本机。

docker run --name nginx -d -p 8085:80 nginx
docker cp nginx:/etc/nginx /home/hui/wordpress/
docker stop nginx
docker rm nginx

3、编辑docker-compose.yml文件,编排三个容器的运行,内容如下:

version: '3'
 services:
     db:
       image: mysql:5.7
       volumes:
         - /home/hui/wordpress/mysql:/var/lib/mysql
       restart: always
       environment:
         MYSQL_ROOT_PASSWORD: 123456
         MYSQL_DATABASE: wordpress
     wordpress:
       depends_on:
         - db
       image: wordpress:latest
       volumes:
         - /home/hui/wordpress/app:/var/www/html
       restart: always
       environment:
         WORDPRESS_DB_HOST: db:3306
         WORDPRESS_DB_USER: root
         WORDPRESS_DB_PASSWORD: 123456
     nginx:
       depends_on:
         - wordpress
       image: nginx:latest
       volumes:
         - /home/hui/wordpress/nginx:/etc/nginx
       ports:
         - "80:80"
         - "443:443"
       restart: always
 networks:
     default:
       external:
         name: wordpress_network

4、将Nginx类型的证书两个文件拷贝至相应的文件夹,编辑/home/hui/wordpress/nginx/nginx.conf文件,配置Nginx的反向代理、SSL证书卸载以及http到https的重定向:

    server {
        listen 80;
        location / {
                return 301 https://$host$request_uri;
        }
    }
    server {
        listen 443 ssl;
        server_name www.gaohui.xyz;
        keepalive_timeout 70;

        ssl_certificate     /etc/nginx/ssl/1_www.gaohui.xyz_bundle.crt;
        ssl_certificate_key /etc/nginx/ssl/2_www.gaohui.xyz.key;
        ssl_protocols       TLSv1 TLSv1.1 TLSv1.2;
        ssl_ciphers         HIGH:!aNULL:!MD5;

        location / {
                proxy_set_header Host $host;
                proxy_set_header X-Real_ip $remote_addr;
                proxy_set_header X-Forwarded-Proto $scheme;
                proxy_pass http://wordpress;
        }
    }

5、配置文件写好之后,在docker-compose.yml所在的路径运行命令:

docker-compose up -d

6、使用浏览器访问网站,配置wordpress。

最后说一下,wordpress使用SSL访问,并且前端是Nginx这种反向代理的话,是需要特殊配置的,nginx配置文件里proxy_set_header X-Forwarded-Proto $scheme;这个参数就是这个目的。详细可以参考wordpress的文档:

https://wordpress.org/support/topic/compatibility-with-wordpress-behind-a-reverse-proxy/

此条目发表在docker分类目录。将固定链接加入收藏夹。

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注