docker部署nginx并且實(shí)現(xiàn)https的方法步驟
一、Docker中啟用HTTPS有幾個重要的原因
- 安全性:HTTPS通過加密數(shù)據(jù)傳輸,可以確保數(shù)據(jù)在傳輸過程中不被竊 聽或篡改。這對于保護(hù)敏感信息(如用戶憑據(jù)、支付信息等)的傳輸至關(guān)重要。
- 數(shù)據(jù)完整性:HTTPS可以驗(yàn)證數(shù)據(jù)的完整性,確保數(shù)據(jù)在傳輸過程中沒有被篡改或損壞。
- 信任度:使用HTTPS可以增強(qiáng)用戶對網(wǎng)站的信任度,因?yàn)闉g覽器通常會顯示安全的鎖圖標(biāo)或綠色地址欄來指示連接是安全的。
- SEO優(yōu)化:搜索引擎(如Google)通常會更喜歡使用HTTPS的網(wǎng)站,并將其排名更靠前。因此,啟用HTTPS可以對網(wǎng)站的搜索引擎優(yōu)化(SEO)產(chǎn)生積極影響。
- 合規(guī)性:一些法規(guī)和標(biāo)準(zhǔn)要求網(wǎng)站必須使用HTTPS來保護(hù)用戶數(shù)據(jù),如GDPR(歐盟一般數(shù)據(jù)保護(hù)條例)。
總的來說,啟用HTTPS可以提高網(wǎng)站的安全性、可信度,同時(shí)符合法規(guī)要求,因此在Docker中啟用HTTPS是一個很好的實(shí)踐。
二、https介紹
Web網(wǎng)站的登錄頁面都是使用https加密傳輸?shù)?,加密?shù)據(jù)以保障數(shù)據(jù)的安全,HTTPS能夠加密信息,以免敏感信息被第三方獲取,所以很多銀行網(wǎng)站或電子郵箱等等安全級別較高的服務(wù)都會采用HTTPS協(xié)議,HTTPS其實(shí)是有兩部分組成:HTTP + SSL / TLS,也就是在HTTP上又加了一層處理加密信息的模塊。服務(wù)端和客戶端的信息傳輸都會通過TLS進(jìn)行加密,所以傳輸?shù)臄?shù)據(jù)都是加密后的數(shù)據(jù)。
三、https過程
客戶端發(fā)起HTTPS請求
用戶在瀏覽器里輸入一個 https 網(wǎng)址,然后連接到服務(wù)器的 443 端口
- 服務(wù)端的配置 采用HTTPS協(xié)議的服務(wù)器必須要有一套數(shù)字證書,可以自己制作,也可以向組織申請,區(qū)別就是自己頒發(fā)的證書需要客戶端驗(yàn)證通過,才可以繼續(xù)訪問,而使用受信任的公司申請的證書則不會彈出提示頁面。這套證書其實(shí)就是一對公鑰和私鑰
- 傳送服務(wù)器的證書給客戶端 證書里其實(shí)就是公鑰,并且還包含了很多信息,如證書的頒發(fā)機(jī)構(gòu),過期時(shí)間等等
- 客戶端解析驗(yàn)證服務(wù)器證書 這部分工作是由客戶端的TLS來完成的,首先會驗(yàn)證公鑰是否有效,比如:頒發(fā)機(jī)構(gòu),過期時(shí)間等等,如果發(fā)現(xiàn)異常,則會彈出一個警告框提示證書存在問題。如果證書沒有問題,那么就生成一個隨機(jī)值,然后用證書中公鑰對該隨機(jī)值進(jìn)行非對稱加密
- 客戶端將加密信息傳送服務(wù)器 這部分傳送的是用證書加密后的隨機(jī)值,目的就是讓服務(wù)端得到這個隨機(jī)值,以后客戶端和服務(wù)端的通信就可以通過這個隨機(jī)值來進(jìn)行加感解密了
- 服務(wù)端解密信息 服務(wù)端將客戶端發(fā)送過來的加密信息用服務(wù)器私鑰解密后,得到了客戶端傳過來的隨機(jī)值
- 服務(wù)器加密信息并發(fā)送信息 服務(wù)器將數(shù)據(jù)利用隨機(jī)值進(jìn)行對稱加密,再發(fā)送給客戶端
- 客戶端接收并解密信息 客戶端用之前生成的隨機(jī)值解密服務(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è)備映射機(jī)制,它為實(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è)置為開機(jī)自動啟動 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ù)進(jìn)程,負(fù)責(zé)管理所有容器。 Docker客戶端則扮演著Docker服務(wù)端的遠(yuǎn)程控制器,可以用來控制Docker的服務(wù)端進(jìn)程。大部分情況下Docker服務(wù)端和客戶端運(yùn)行在一臺機(jī)器上。 ----------------------------------------------------------------------------------------- docker version #查看 docker 版本信息

五、如何獲取證書
- 在阿里云、華為云、騰訊云等云服務(wù)商那里申請一年有效期的免費(fèi)證書或者購買證書
- 在本地使用 openssl、mkcert、cfssl、certbot(Let's Encrypt)的工具生成本地私鑰證書
通過阿里云獲取證書
https://www.aliyun.com/product/cas?userCode=r3yteowb

六、docker部署nginx并且實(shí)現(xiàn)https
6.1準(zhǔn)備證書

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 這幾個文件,需要對其進(jìn)行處理 # kgc.com.crt(購買者) ca.crt(b頒發(fā)者) www.kgc.com.key(驗(yàn)證鑰匙) 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準(zhǔn)備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端口映射到本機(jī)的8080端口,指定容器內(nèi)443端口映射到本機(jī)的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瀏覽器驗(yàn)證證書


到此這篇關(guān)于docker部署nginx并且實(shí)現(xiàn)https的方法步驟的文章就介紹到這了,更多相關(guān)docker部署nginx實(shí)現(xiàn)https內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Docker?Compose構(gòu)建Jenkins的實(shí)現(xiàn)
本文主要介紹了Docker?Compose構(gòu)建Jenkins的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2022-06-06
在Docker容器中部署靜態(tài)網(wǎng)頁的方法教程
這篇文章主要給大家介紹了在Docker容器中部署靜態(tài)網(wǎng)頁的方法教程,文中介紹的非常詳細(xì),對大家具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來一起看看吧。2017-06-06
使用Docker快速運(yùn)行Firefox并實(shí)現(xiàn)遠(yuǎn)程訪問本地火狐瀏覽器的詳細(xì)過程
文章介紹了如何在Docker中運(yùn)行Firefox瀏覽器,并通過Cpolar內(nèi)網(wǎng)穿透工具實(shí)現(xiàn)遠(yuǎn)程訪問,步驟包括部署Firefox、本地訪問、安裝Cpolar、配置公網(wǎng)地址、設(shè)置固定二級子域名等,本文給大家介紹的非常詳細(xì),感興趣的朋友一起看看吧2025-02-02
詳解使用docker 1.12 搭建多主機(jī)docker swarm集群
本篇文章主要介紹了使用docker 1.12 搭建多主機(jī)docker swarm集群,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-07-07

