從零開始搭建網站環境(php-yaf nginx mariadb)番外篇———開啓https

https是時代的趨勢,那咱們也不能落下,今天就來玩玩https

安裝證書

Let’s Encrypt

Let’s Encrypt 是一家免費、開放、自動化的證書頒發機構(CA),爲公衆的利益而運行。 詳情

這裏咱們依然使用Docker來安裝php

  • 創建 /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(贊成)便可。
這樣,證書就應該安裝完成了。html

修改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

從新啓動nginxnginx

docker-compose up -d

配置Nginx

第二章咱們建立了 你的域名_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;

}

重啓Nginx

docker restart nginx(鏡像名稱)

訪問瀏覽器

如今訪問一下本身的域名,看看是否變成https了?segmentfault

相關文章
相關標籤/搜索