https是时代的趋势,那我们也不能落下,今天就来玩玩https

安装证书

Let’s Encrypt

Let’s Encrypt 是一家免费、开放、自动化的证书颁发机构(CA),为公众的利益而运行。详情

这里我们依然使用Docker来安装

  • 建立 /docker/certbot/conf 文件夹,用于存放证书文件(也可以换成你喜欢的路径,别忘了改配置就行)
mkdir -p /docker/certbot/conf
  • 运行docker命令
docker run -it --rm -p 88:80 --name certbot -v "/docker/certbot/conf:/etc/letsencrypt"  -v "/docker/www/html:/usr/share/nginx/html" certbot/certbot certonly  --webroot -w /usr/share/nginx/html --email 你的邮箱 -d 你的网站域名(不加http)

这里我们挂载了两个文件夹,一个是 /docker/certbot/conf (存放证书),一个是 /docker/www/html (网站根目录),别忘了替换邮箱和域名。
看过我前面文章的朋友可能注意到了,之前一直用的都是 docker-compose.yml 文件来运行docker的,这次怎么换成 run 命令了呢?这是有一点小复杂的原因的。其一是这个命令只要运行一次就好,其二就是我不知道怎么写……
等docker安装完,不出意外的话你会看到控制台会出现一个让你选择的窗口,输入A(同意)即可。
这样,证书就应该安装完成了。

修改Nginx的docker-compose.yml

cd /docker/nginx
vi docker-compose.yml
version: "3.5"

networks:
    zf_site_network:
        name: zf_site_network

services:
    nginx:
        container_name: nginx
        image: nginx
        privileged: true
        ports:
            - "80:80"
            - "443:443"
        restart: always
        volumes:
            - /docker/www:/usr/share/nginx/www
            - /docker/nginx/conf:/etc/nginx/conf.d
            - /docker/certbot/conf:/etc/letsencrypt  # 挂载证书文件夹
            - /docker/nginx/logs:/var/log/nginx      # 挂载日志
        networks:
            - zf_site_network
        environment:
            - TZ=Asia/Shanghai

重新启动nginx

docker-compose up -d

配置Nginx

第二章我们创建了 你的域名_80.conf这个配置文件:

server {
    listen        80;
    server_name  你的域名;
    root   网站根目录;
    location / {
        index index.php index.html;
    }
     if (!-e $request_filename) {
         rewrite ^/(.*)  /index.php/$1 last;
    }
    location ~ \.php(.*)$ {
        fastcgi_pass   php:9000;
        fastcgi_index  index.php;
        fastcgi_split_path_info  ^((?U).+\.php)(/?.+)$;
        fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
        fastcgi_param  PATH_INFO  $fastcgi_path_info;
        fastcgi_param  PATH_TRANSLATED  $document_root$fastcgi_path_info;
        include        fastcgi_params;
    }
}

现在修改一下:

server {
    listen        80;
    server_name  你的域名;
    rewrite ^(.*) https://$host$1 permanent;
}
server {
    listen 443 ssl;
    server_name 你的域名;

    root   网站根目录;
    location / {
        index index.php index.html;
    }
    
    if (!-e $request_filename) {
         rewrite ^/(.*)  /index.php/$1 last;
    }
    location ~ \.php(.*)$ {
        fastcgi_pass   php:9000;
        fastcgi_index  index.php;
        fastcgi_split_path_info  ^((?U).+\.php)(/?.+)$;
        fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
        fastcgi_param  PATH_INFO  $fastcgi_path_info;
        fastcgi_param  PATH_TRANSLATED  $document_root$fastcgi_path_info;
        include        fastcgi_params;
    }

    ssl on;
    ssl_certificate        /etc/letsencrypt/live/你的域名/fullchain.pem;
    ssl_certificate_key    /etc/letsencrypt/live/你的域名/privkey.pem;
    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 utf-8;
    access_log  /var/log/nginx/你的域名.access.log  main;
    error_log /var/log/nginx/你的域名.error.log warn;

}

重启Nginx

docker restart nginx(镜像名称)

访问浏览器

现在访问一下自己的域名,看看是否变成https了?


zeronofreya
192 声望3 粉丝