docker部署nginx并實現(xiàn)https教程
更新時間:2025年11月28日 15:11:41 作者:劉艷芬_
文章介紹了如何使用Docker部署Nginx并實現(xiàn)HTTPS,首先,文章提到了服務(wù)器環(huán)境,然后詳細步驟包括安裝Docker、準備SSL證書、編寫Nginx配置文件和Dockerfile、創(chuàng)建Nginx鏡像并運行容器,最后,文章驗證了Nginx的訪問
docker部署nginx并實現(xiàn)https
1、服務(wù)器環(huán)境
[root@liuyanfen12 ~]#systemctl stop firewalld [root@liuyanfen12 ~]#setenforce 0 #關(guān)閉防火墻和核心防護

2、安裝docker
[root@liuyanfen12 ~]#yum install -y yum-utils device-mapper-persistent-data lvm2 #安裝依賴包 [root@liuyanfen12 ~]#yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo #設(shè)置阿里云鏡像源 [root@liuyanfen12 ~]#yum install -y docker-ce docker-ce-cli containerd.io #安裝Docker-CE(社區(qū)版) [root@liuyanfen12 ~]#systemctl enable --now docker.service #開機自啟并立即啟動 [root@liuyanfen12 ~]#systemctl status docker.service #查看狀態(tài)



3、準備證書
[root@liuyanfen12 ~]#mkdir /opt/nginx -p
#創(chuàng)建目錄
[root@liuyanfen12 ~]#cd /opt/nginx/
#切換
[root@liuyanfen12 nginx]#ls
[root@liuyanfen12 nginx]#vim certificate.sh
#編輯證書腳本
CA_SUBJECT="/O=luck/CN=ca.luck.com"
SUBJECT="/C=CN/ST=js/L=nj/O=luck/CN=www.luck.com"
SERIAL=34
EXPIRE=202002
FILE=luck.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
--------------------------------------------------------------------------------------------------------
#openssl req -x509 -newkey rsa:2048 -subj $CA_SUBJECT -keyout ca.key -nodes -days 202002 -out ca.crt
-x509: 生成自簽名的證書,而不是生成 CSR(證書簽名請求)。
-newkey rsa:2048: 使用 RSA 算法生成一個新的密鑰對,密鑰長度為2048位。
-subj $CA_SUBJECT: 指定證書的主體信息,這里是定義的 CA 主體信息。
-keyout ca.key: 指定生成的私鑰文件名為 ca.key。
-nodes: 創(chuàng)建的私鑰不加密,即沒有密碼保護。
-days $EXPIRE: 設(shè)置證書有效期,這里是到2020年2月。
-out ca.crt: 指定生成的自簽名CA證書文件名為 ca.crt
--------------------------------------------------------------------------------------------------------
#openssl req -newkey rsa:2048 -nodes -keyout ${FILE}.key -subj $SUBJECT -out ${FILE}.csr
-newkey rsa:2048: 同上,創(chuàng)建一個新的RSA密鑰對。
-keyout ${FILE}.key: 生成的服務(wù)器私鑰文件名為 ${FILE}.key,此處為 kgc.com.key。
-subj $SUBJECT: 指定服務(wù)器證書的主體信息。
-out ${FILE}.csr: 生成的證書簽名請求文件名為 ${FILE}.csr,此處為 kgc.com.csr。
--------------------------------------------------------------------------------------------------------
#openssl x509 -req -in ${FILE}.csr -CA ca.crt -CAkey ca.key -set_serial $SERIAL -days $EXPIRE -out
-req: 表明接下來的操作是基于一個證書請求文件。
-in ${FILE}.csr: 指定要使用的證書請求文件,即之前生成的 kgc.com.csr。
-CA ca.crt: 指定簽發(fā)證書的CA證書文件,即第一步生成的 ca.crt。
-CAkey ca.key: 指定CA的私鑰文件,用于簽署新的證書。
-set_serial $SERIAL: 指定新證書的序列號。
-days $EXPIRE: 設(shè)置服務(wù)器證書的有效期。
-out ${FILE}.crt: 生成的服務(wù)器證書文件名為 ${FILE}.crt,此處為 kgc.com.crt。
--------------------------------------------------------------------------------------------------------
#chmod 600 ${FILE}.key ca.key
chmod 600: 改變文件權(quán)限,使其只有所有者有讀寫權(quán)限,增強安全性。
${FILE}.key 和 ca.key: 分別指服務(wù)器私鑰和CA私鑰文件,確保它們的訪問權(quán)限受限
--------------------------------------------------------------------------------------------------------
[root@liuyanfen12 nginx]#chmod +x certificate.sh
#添加權(quán)限
[root@liuyanfen12 nginx]#./certificate.sh
#運行
Generating a 2048 bit RSA private key
..........................................................................................................+++
.................+++
writing new private key to 'ca.key'
-----
Generating a 2048 bit RSA private key
.....................+++
..+++
writing new private key to 'luck.com.key'
-----
Signature ok
subject=/C=CN/ST=js/L=nj/O=luck/CN=www.luck.com
Getting CA Private Key
[root@liuyanfen12 nginx]#ls
ca.crt ca.key certificate.sh luck.com.crt luck.com.csr luck.com.key
[root@liuyanfen12 nginx]#cat luck.com.crt ca.crt > www.luck.com.crt
#使用cat命令將luck.com.crt和ca.crt兩個文件的內(nèi)容合并到一個新文件www.luck.com.crt中,這樣做的目的是為了組合服務(wù)器證書和CA證書,使得Nginx或任何其他Web服務(wù)器能夠通過單一文件提供完整的證書鏈給客戶端,以便正確驗證服務(wù)器證書
[root@liuyanfen12 nginx]#mv luck.com.key www.luck.com.key
#使用 mv 命令重命名luck.com.key為www.luck.com.key 為了與上面合并后的證書文件保持名稱一致性,或者準備為www.dlsockerng.com子域名服務(wù)使用同一密鑰對
[root@liuyanfen12 nginx]#ls
ca.crt ca.key certificate.sh luck.com.crt luck.com.csr www.luck.com.crt www.luck.com.key


4、準備nginx配置文件和dockerfile文件
[root@liuyanfen12 nginx]#ls
#上傳nginx安裝包,準備nginx.conf和Dockerfile文件
ca.crt certificate.sh luck.com.crt nginx-1.12.0.tar.gz www.luck.com.crt
ca.key Dockerfile luck.com.csr nginx.conf www.luck.com.key
#編輯dockerfile腳本
[root@liuyanfen12 nginx]#vim Dockerfile
FROM centos:7
MAINTAINER this is nginx image <nginx>
RUN yum -y install pcre-devel zlib-devel gcc gcc-c++ make openssl openssl-devel
RUN useradd -M -s /sbin/nologin nginx
ADD nginx-1.12.0.tar.gz /usr/local/src/
WORKDIR /usr/local/src/nginx-1.12.0
RUN ./configure \
--prefix=/usr/local/nginx \
--user=nginx \
--group=nginx \
--with-http_ssl_module \
#加載ngx_http_ssl_module模塊,該模塊是處理SSL/TLS連接所必需的
--with-http_stub_status_module;make -j4 && make install
ENV PATH /usr/local/nginx/sbin:$PATH
ADD nginx.conf /usr/local/nginx/conf/nginx.conf
ADD www.luck.com.crt /usr/local/nginx/conf/
ADD www.luck.com.key /usr/local/nginx/conf/
EXPOSE 80
EXPOSE 443
CMD [ "/usr/local/nginx/sbin/nginx","-g","daemon off;" ]
[root@liuyanfen12 nginx]#vim nginx.conf
#修改nginx.conf配置文件,在server模塊中添加配置(35行-42行)
server {
listen 80;
listen 443 ssl;
ssl_certificate /usr/local/nginx/conf/www.luck.com.crt;
ssl_certificate_key /usr/local/nginx/conf/www.luck.com.key;
ssl_session_cache shared:sslcache:20m;
ssl_session_timeout 10m;
server_name localhost;
--------------------------------------------------------------------------------------------------------
listen 443 ssl;
#這行指定Nginx監(jiān)聽443端口,并啟用SSL支持。Web瀏覽器默認通過443端口建立HTTPS連接
ssl_certificate /usr/local/nginx/conf/www.dockerng.com.crt;
#指定SSL證書文件的路徑,這個路徑指向合并了服務(wù)器證書和CA證書鏈的文件(如果適用),以
#便客戶端在驗證服務(wù)器身份時使用。
ssl_certificate_key /usr/local/nginx/conf/www.dockerng.com.key;
#指定與上述證書匹配的私鑰文件路徑。此私鑰用于加密和解密服務(wù)器與客戶端之間的通信內(nèi)容
ssl_session_cache shared:sslcache:20m;
#配置一個共享的SSL會話緩存,大小為20MB。該緩存可以提高性能,通過復(fù)用已存在的SSL會話
#信息來減少重新協(xié)商和加密操作的開銷
ssl_session_timeout 10m;
#設(shè)置SSL會話超時時間為10分鐘。這意味著,在無活動期間達到這個時間長度后,客戶端必須與
#服務(wù)器重新建立新的SSL會話或者恢復(fù)先前的會話(如果仍然有效)。這個值可以根據(jù)實際需求調(diào)
#整以平衡安全性與性能。
--------------------------------------------------------------------------------------------------------



5、創(chuàng)建nginx鏡像與容器
[root@liuyanfen12 ~]#docker pull centos:7 #拉取基礎(chǔ)鏡像centos:7 [root@liuyanfen12 ~]#docker images #查看基礎(chǔ)鏡像信息 [root@liuyanfen12 nginx]#docker build -t nginx:centos . #生成鏡像 [root@liuyanfen12 nginx]#docker images #顯示鏡像信息 REPOSITORY TAG IMAGE ID CREATED SIZE nginx centos c3f56b07162d 25 seconds ago 592MB centos 7 eeb6ee3f44bd 2 years ago 204MB [root@liuyanfen12 nginx]#docker run -d --name nginx -p 80:80 -p 443:443 nginx:centos #創(chuàng)建容器并指定映射端口 618a521cf19a57ada8db2769b38fafcd2b09ff0065c2aa879ca7aed5c3fdd779 [root@liuyanfen12 nginx]#docker ps -a #顯示所有容器信息 CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 618a521cf19a nginx:centos "/usr/local/nginx/sb…" 4 seconds ago Up 3 seconds 0.0.0.0:80->80/tcp, :::80->80/tcp, 0.0.0.0:443->443/tcp, :::443->443/tcp nginx



6、驗證訪問
https://192.168.10.12/ #使用瀏覽器訪問驗證

總結(jié)
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
您可能感興趣的文章:
- Docker?Compose+Nginx+Certbot自動化部署HTTPS的詳細指南
- 如何在Docker環(huán)境下為Nginx配置HTTPS
- Nginx配置ssl支持https全過程(docker版)
- docker部署nginx并且實現(xiàn)https的方法步驟
- ubuntu服務(wù)器部署gitlab docker并配置nginx反向代理https訪問的過程解析
- docker nginx + https 子域名配置詳細教程
- 為docker中的nginx配置https的方法步驟
- docker安裝nginx并配置通過https訪問的方法
- Docker部署Nginx HTTPS服務(wù)的實現(xiàn)步驟
相關(guān)文章
Docker制作MySQL鏡像并使用`/docker-entrypoint-initdb.d/`問題
這篇文章主要介紹了Docker制作MySQL鏡像并使用`/docker-entrypoint-initdb.d/`問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2024-05-05
docker在linux系統(tǒng)上邊下載鏡像速度緩慢的問題及解決
這篇文章主要介紹了docker在linux系統(tǒng)上邊下載鏡像速度緩慢的問題及解決,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2024-04-04
Docker容器中Mysql數(shù)據(jù)的導(dǎo)入/導(dǎo)出詳解
服務(wù)器在使用了 Docker 后,對于備份和恢復(fù)數(shù)據(jù)庫的事情做下記錄,下面這篇文章主要給大家介紹了Docker容器中Mysql數(shù)據(jù)導(dǎo)入/導(dǎo)出的相關(guān)資料,文中通過示例代碼介紹的非常詳細,需要的朋友可以參考下2018-09-09
Docker 數(shù)據(jù)存儲路徑之解決默認docker路徑位置磁盤空間不足的問題
本文指導(dǎo)如何通過修改daemon.json將Docker數(shù)據(jù)目錄從/var/lib/docker遷移至/mnt/disk/docker,保留所有鏡像、容器等數(shù)據(jù),無需調(diào)整docker.service,步驟包括停止服務(wù)、遷移數(shù)據(jù)、修改配置及重啟驗證,需要的朋友跟隨小編一起學(xué)習(xí)吧2025-08-08

