【微服務部署】七、使用Docker安裝Nginx并配置免費的SSL證書步驟詳解

1. 創(chuàng)建Nginx宿主機掛載目錄并賦權
mkdir -p /opt/container/nginx/html /opt/container/portal /opt/container/nginx/www /opt/container/nginx/logs /opt/container/nginx/etc /etc/ssl/nginx

chmod -R 777 /opt/container/nginx/html /opt/container/portal /opt/container/nginx/www /opt/container/nginx/logs /opt/container/nginx/etc /etc/ssl/nginx

2. 默認映射沒有配置文件,需要將容器中的配置文件復制到目錄下

??通過Docker安裝的Nginx,映射的目錄往往沒有默認的配置文件和頁面,如果隨便從其他位置復制,如果配置文件版本不同,會導致Nginx無法訪問。為了解決這個問題,先創(chuàng)建一個Nginx容器,將配置文件和默認的頁面提前復制到宿主機的映射目錄,再把容器刪除即可。我們只是用到它的默認配置文件和頁面,后面步驟是具體搭建Nginx。

docker pull nginx
docker run --name nginx -p 80:80 -d nginx
# 復制nginx默認頁面
docker cp nginx:/usr/share/nginx/html/* /opt/container/nginx/html
# 復制 所有的配置文件
docker cp nginx:/etc/nginx/* /opt/container/nginx/etc

# 用完之后,把容器刪除
docker stop 容器id
docker rm 容器id
3. 編寫docker-compose-nginx.yml文件

??習慣用docker-compose搭建Docker服務,感覺可以對配置等內容留檔,當然你也可以選擇直接使用Docker命令創(chuàng)建Nginx。

  • /opt/container/nginx/html 映射Nginx默認頁面存放目錄
  • /opt/container/portal 映射開發(fā)的應用前端頁面存放目錄
  • /etc/ssl/nginx 存放Nginx SSL證書

(二選一)docker-compose的方式創(chuàng)建Nginx:

version: '3'
services:
    ##nginx配置
    nginx:
      image: nginx:latest
      restart: always
      container_name: nginx
      environment:
        - TZ=Asia/Shanghai
      ports:
        - 8000:80
        - 4443:443
      volumes:
        - /opt/container/nginx/html:/usr/share/nginx/html/
        - /opt/container/portal:/nginx/html/
        - /opt/container/nginx/www:/var/www
        - /opt/container/nginx/logs:/var/log/nginx
        - /opt/container/nginx/etc:/etc/nginx
        - "/etc/localtime:/etc/localtime"
        - "/usr/share/zoneinfo/Asia/Shanghai:/etc/timezone"
        - /etc/ssl/nginx:/nginx/ssl

(二選一)docker命令的方式創(chuàng)建Nginx:

docker run \
-p 80:80 \
-p 443:443 \
--name=nginx \
-e TZ="Asia/Shanghai" \
--restart=always \
-v /opt/container/nginx/html:/usr/share/nginx/html \
-v /opt/container/portal:/nginx/html \
-v /opt/container/nginx/www:/var/www \
-v /opt/container/nginx/logs:/var/log/nginx \
-v /opt/container/nginx/etc:/etc/nginx \
-v /etc/localtime:/etc/localtime \
-v /usr/share/zoneinfo/Asia/Shanghai:/etc/timezone \
-v /etc/ssl/nginx:/nginx/ssl \
-d nginx:latest
4. docker-compose啟動Nginx命令

如果使用docker命令安裝,則不需要這一步驟。

cd /opt/software
docker-compose -f docker-compose-nginx.yml up -d
5. 在云服務器上申請免費的SSL證書,各大云服務器廠商都可以免費申請,這里以阿里云為例,免費申請SSL證書
  • 登錄阿里云控制臺,進入[數字證書管理服務] > [SSL證書] > [免費證書]


    image.png
  • 點擊 [創(chuàng)建證書] > [證書申請],然后按要求填寫申請信息,然后提交審核


    image.png
  • 等待申請通過,在證書列表中,就會看到已申請的SSL證書,然后點擊下載按鈕,選擇需要部署的服務器類型,我們這里使用的是nginx,所以選擇下載nginx服務器類型的SSL證書。


    image.png

    image.png
  • 下載成功后,可以得到一個包含域名的zip包,里面有.key和.pem文件


    image.png
6. 將下載的SSL證書.key和.pem文件上傳到Linux服務器/etc/ssl/nginx目錄,這里因為我們創(chuàng)建docker容器時指定的映射目錄是這個。
7. 修改nginx.conf配置文件,將證書配置到對應域名配置中,然后重啟nginx服務,域名就可以通過https訪問了。
    server {
        listen 80;
        listen 443 ssl;
        ssl_certificate /nginx/ssl/證書名稱.pem;
        ssl_certificate_key /nginx/ssl/證書名稱.key;
        server_name  域名;

        gzip on;
        gzip_buffers 32 4K;
        gzip_comp_level 6;
        gzip_min_length 100;
        gzip_types application/javascript text/css text/xml text/plain application/x-javascript image/jpeg image/gif image/png;
        gzip_disable "MSIE [1-6]\."; 
        gzip_vary on;
        #charset koi8-r;
        access_log  /var/log/nginx/portal.access.log  main;
        location / {
            proxy_set_header Host $http_host;               
            proxy_set_header X-Real-Ip $remote_addr;
            proxy_set_header REMOTE-HOST $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_pass http://172.17.0.1:8080/;
        }
    }

??免費的證書有效期只有一年,而且是單域名證書,對于小型項目或者剛剛起步的網站,可以節(jié)省成本,就是在操作上需要每年重新申請一次。一般云服務廠商都會有證書申請個數限制,但對于初期項目來說基本夠用了。

?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

友情鏈接更多精彩內容