https是时代的趋势,那咱们也不能落下,今天就来玩玩https
Let’s Encrypt 是一家免费、开放、自动化的证书颁发机构(CA),为公众的利益而运行。 详情
这里咱们依然使用Docker来安装php
/docker/certbot/conf
文件夹,用于存放证书文件(也能够换成你喜欢的路径,别忘了改配置就行)mkdir -p /docker/certbot/conf
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(赞成)便可。
这样,证书就应该安装完成了。html
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
从新启动nginxnginx
docker-compose up -d
在第二章咱们建立了 你的域名_80.conf
这个配置文件:web
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; } }
如今修改一下:docker
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; }
docker restart nginx(镜像名称)
如今访问一下本身的域名,看看是否变成https了?segmentfault