docker部署nginx并且實現(xiàn)https的方法步驟
一、Docker中啟用HTTPS有幾個重要的原因
- 安全性:HTTPS通過加密數(shù)據(jù)傳輸,可以確保數(shù)據(jù)在傳輸過程中不被竊 聽或篡改。這對于保護敏感信息(如用戶憑據(jù)、支付信息等)的傳輸至關(guān)重要。
- 數(shù)據(jù)完整性:HTTPS可以驗證數(shù)據(jù)的完整性,確保數(shù)據(jù)在傳輸過程中沒有被篡改或損壞。
- 信任度:使用HTTPS可以增強用戶對網(wǎng)站的信任度,因為瀏覽器通常會顯示安全的鎖圖標或綠色地址欄來指示連接是安全的。
- SEO優(yōu)化:搜索引擎(如Google)通常會更喜歡使用HTTPS的網(wǎng)站,并將其排名更靠前。因此,啟用HTTPS可以對網(wǎng)站的搜索引擎優(yōu)化(SEO)產(chǎn)生積極影響。
- 合規(guī)性:一些法規(guī)和標準要求網(wǎng)站必須使用HTTPS來保護用戶數(shù)據(jù),如GDPR(歐盟一般數(shù)據(jù)保護條例)。
總的來說,啟用HTTPS可以提高網(wǎng)站的安全性、可信度,同時符合法規(guī)要求,因此在Docker中啟用HTTPS是一個很好的實踐。
二、https介紹
Web網(wǎng)站的登錄頁面都是使用https加密傳輸?shù)模用軘?shù)據(jù)以保障數(shù)據(jù)的安全,HTTPS能夠加密信息,以免敏感信息被第三方獲取,所以很多銀行網(wǎng)站或電子郵箱等等安全級別較高的服務(wù)都會采用HTTPS協(xié)議,HTTPS其實是有兩部分組成:HTTP + SSL / TLS,也就是在HTTP上又加了一層處理加密信息的模塊。服務(wù)端和客戶端的信息傳輸都會通過TLS進行加密,所以傳輸?shù)臄?shù)據(jù)都是加密后的數(shù)據(jù)。
三、https過程
客戶端發(fā)起HTTPS請求
用戶在瀏覽器里輸入一個 https 網(wǎng)址,然后連接到服務(wù)器的 443 端口
- 服務(wù)端的配置 采用HTTPS協(xié)議的服務(wù)器必須要有一套數(shù)字證書,可以自己制作,也可以向組織申請,區(qū)別就是自己頒發(fā)的證書需要客戶端驗證通過,才可以繼續(xù)訪問,而使用受信任的公司申請的證書則不會彈出提示頁面。這套證書其實就是一對公鑰和私鑰
- 傳送服務(wù)器的證書給客戶端 證書里其實就是公鑰,并且還包含了很多信息,如證書的頒發(fā)機構(gòu),過期時間等等
- 客戶端解析驗證服務(wù)器證書 這部分工作是由客戶端的TLS來完成的,首先會驗證公鑰是否有效,比如:頒發(fā)機構(gòu),過期時間等等,如果發(fā)現(xiàn)異常,則會彈出一個警告框提示證書存在問題。如果證書沒有問題,那么就生成一個隨機值,然后用證書中公鑰對該隨機值進行非對稱加密
- 客戶端將加密信息傳送服務(wù)器 這部分傳送的是用證書加密后的隨機值,目的就是讓服務(wù)端得到這個隨機值,以后客戶端和服務(wù)端的通信就可以通過這個隨機值來進行加感解密了
- 服務(wù)端解密信息 服務(wù)端將客戶端發(fā)送過來的加密信息用服務(wù)器私鑰解密后,得到了客戶端傳過來的隨機值
- 服務(wù)器加密信息并發(fā)送信息 服務(wù)器將數(shù)據(jù)利用隨機值進行對稱加密,再發(fā)送給客戶端
- 客戶端接收并解密信息 客戶端用之前生成的隨機值解密服務(wù)段傳過來的數(shù)據(jù),于是獲取了解密后的內(nèi)容
四、安裝docker-20.10.18
systemctl stop firewalld.service setenforce 0 #安裝依賴包 yum install -y yum-utils device-mapper-persistent-data lvm2 ----------------------------------------------------------------------------------------- yum-utils:提供了 yum-config-manager 工具。 device mapper: 是Linux內(nèi)核中支持邏輯卷管理的通用設(shè)備映射機制,它為實現(xiàn)用于存儲資源管理的塊設(shè)備驅(qū)動提供了一個高度模塊化的內(nèi)核架構(gòu)。 device mapper存儲驅(qū)動程序需要 device-mapper-persistent-data 和 lvm2。 ----------------------------------------------------------------------------------------- #設(shè)置阿里云鏡像源 yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo #安裝 Docker-CE并設(shè)置為開機自動啟動 yum install -y docker-ce-20.10.18 docker-ce-cli containerd.io ##安裝20版本 systemctl start docker.service systemctl enable docker.service ----------------------------------------------------------------------------------------- 安裝好的Docker系統(tǒng)有兩個程序,Docker服務(wù)端和Docker客戶端。其中Docker服務(wù)端是一個服務(wù)進程,負責管理所有容器。 Docker客戶端則扮演著Docker服務(wù)端的遠程控制器,可以用來控制Docker的服務(wù)端進程。大部分情況下Docker服務(wù)端和客戶端運行在一臺機器上。 ----------------------------------------------------------------------------------------- docker version #查看 docker 版本信息
五、如何獲取證書
- 在阿里云、華為云、騰訊云等云服務(wù)商那里申請一年有效期的免費證書或者購買證書
- 在本地使用 openssl、mkcert、cfssl、certbot(Let's Encrypt)的工具生成本地私鑰證書
通過阿里云獲取證書
https://www.aliyun.com/product/cas?userCode=r3yteowb
六、docker部署nginx并且實現(xiàn)https
6.1準備證書
cd /opt -------------------------------------- vim certificate.sh CA_SUBJECT="/O=kgc/CN=ca.kgc.com" SUBJECT="/C=CN/ST=js/L=nj/O=kgc/CN=www.kgc.com" SERIAL=34 EXPIRE=202002 FILE=kgc.com openssl req -x509 -newkey rsa:2048 -subj $CA_SUBJECT -keyout ca.key -nodes -days 202002 -out ca.crt openssl req -newkey rsa:2048 -nodes -keyout ${FILE}.key -subj $SUBJECT -out ${FILE}.csr openssl x509 -req -in ${FILE}.csr -CA ca.crt -CAkey ca.key -set_serial $SERIAL -days $EXPIRE -out ${ FILE}.crt chmod 600 ${FILE}.key ca.key
bash certificate.sh #執(zhí)行該腳本后執(zhí)行后會生成ca.crt ca.key certificate.sh kgc.com.crt kgc.com.csr kgc.com.key 這幾個文件,需要對其進行處理 # kgc.com.crt(購買者) ca.crt(b頒發(fā)者) www.kgc.com.key(驗證鑰匙) cat kgc.com.crt ca.crt > www.kgc.com.crt mv kgc.com.key www.kgc.com.key
#在/mnt下創(chuàng)建一個cert的文件夾,用于存放證書文件 [root@localhost opt]#hostnamectl set-hostname zzz [root@localhost opt]#su [root@zzz opt]#mkdir /mnt/cert [root@zzz opt]#mv /opt/www.kgc.com.crt /opt/www.kgc.com.key /mnt/cert [root@zzz opt]# [root@zzz opt]#ll /mnt/cert 總用量 8 -rw-r--r-- 1 root root 2201 5月 4 13:59 www.kgc.com.crt -rw------- 1 root root 1704 5月 4 13:56 www.kgc.com.key
6.2準備nginx.conf 和 index.html文件
[root@zzz opt]#cd /mnt [root@zzz mnt]#ls cert [root@zzz mnt]#echo "hello nanjing" > index.html [root@zzz mnt]#ls cert index.html [root@zzz mnt]#cat index.html hello nanjing [root@zzz mnt]#rz -E rz waiting to receive. [root@zzz mnt]#ls cert index.html nginx(1).conf [root@zzz mnt]#mv nginx\(1\).conf nginx.conf [root@zzz mnt]#ls cert index.html nginx.conf [root@zzz mnt]#pwd /mnt [root@zzz mnt]#
user nginx; worker_processes auto; error_log /var/log/nginx/error.log; pid /run/nginx.pid; events { worker_connections 1024; } http { log_format main '$remote_addr - $remote_user [$time_local] "$request" ' '$status $body_bytes_sent "$http_referer" ' '"$http_user_agent" "$http_x_forwarded_for"'; access_log /var/log/nginx/access.log main; sendfile on; tcp_nopush on; tcp_nodelay on; keepalive_timeout 65; types_hash_max_size 4096; include /etc/nginx/mime.types; default_type application/octet-stream; server { listen 80; listen 443 ssl; ssl_certificate /mnt/www.kgc.com.crt; ssl_certificate_key /mnt/www.kgc.com.key; ssl_session_cache shared:sslcache:20m; ssl_session_timeout 10m; server_name www.kgc.com; root /usr/share/nginx/html; error_page 404 /404.html; location = /404.html { } error_page 500 502 503 504 /50x.html; location = /50x.html { } } }
6.3生成容器
[root@zzz mnt]#docker run -itd -p 8080:80 -p 8082:443 -v /mnt/nginx.conf:/etc/nginx/nginx.conf -v /mnt/index.html:/usr/share/nginx/html/index.html -v /mnt/cert/:/mnt/ --name nginx nginx:latest 48944bdf4b31909ee2fc37c3acd16bf1fd4f804f6a00e9a011b9f8a5223657b5 [root@zzz mnt]#docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 48944bdf4b31 nginx:latest "/docker-entrypoint.…" 3 seconds ago Up 2 seconds 0.0.0.0:8080->80/tcp, :::8080->80/tcp, 0.0.0.0:8082->443/tcp, :::8082->443/tcp nginx [root@zzz mnt]# [root@zzz mnt]#docker images REPOSITORY TAG IMAGE ID CREATED SIZE nginx latest 605c77e624dd 2 years ago 141MB #生成容器,指定容器內(nèi)80端口映射到本機的8080端口,指定容器內(nèi)443端口映射到本機的8082端口 #將/mnt/nginx.conf掛載到容器內(nèi)/etc/nginx/nginx.conf下, #將/mnt/index.html掛載到容器內(nèi)的/usr/share/nginx/html/index.html,將容器內(nèi)的index.html覆蓋掉 #將/mnt/cert掛載到容器內(nèi)的/mnt下,/mnt/cert下的所有文件都會出現(xiàn)在容器的/mnt下 #別名為 nginx 使用 nginx:latest 鏡像生成并啟動
6.4瀏覽器驗證證書
到此這篇關(guān)于docker部署nginx并且實現(xiàn)https的方法步驟的文章就介紹到這了,更多相關(guān)docker部署nginx實現(xiàn)https內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Docker?Compose構(gòu)建Jenkins的實現(xiàn)
本文主要介紹了Docker?Compose構(gòu)建Jenkins的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2022-06-06在Docker容器中部署靜態(tài)網(wǎng)頁的方法教程
這篇文章主要給大家介紹了在Docker容器中部署靜態(tài)網(wǎng)頁的方法教程,文中介紹的非常詳細,對大家具有一定的參考學習價值,需要的朋友們下面來一起看看吧。2017-06-06使用Docker快速運行Firefox并實現(xiàn)遠程訪問本地火狐瀏覽器的詳細過程
文章介紹了如何在Docker中運行Firefox瀏覽器,并通過Cpolar內(nèi)網(wǎng)穿透工具實現(xiàn)遠程訪問,步驟包括部署Firefox、本地訪問、安裝Cpolar、配置公網(wǎng)地址、設(shè)置固定二級子域名等,本文給大家介紹的非常詳細,感興趣的朋友一起看看吧2025-02-02詳解使用docker 1.12 搭建多主機docker swarm集群
本篇文章主要介紹了使用docker 1.12 搭建多主機docker swarm集群,具有一定的參考價值,感興趣的小伙伴們可以參考一下2017-07-07