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了?
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。