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