今天我們來講一講怎么用docker部署nginx,并通過nginx部署ssl證書
第一步、安裝nginx
docker pull nginx:latest
老樣子通過 docker images去查看是否安裝成功
第二步、接下來啟動nginx?
啟動之前我們現在根目錄的/opt/docker_v/nginx下新建四個文件夾,分別為conf,conf.d, html , logs ,用來映射配置文件
docker run --name nginx -d -p 80:80 -p 443:443 -p 3900:3900 -p 3700:3700 -v /opt/docker_v/nginx/conf.d/default.conf:/etc/nginx/conf.d/default.conf -v /opt/docker_v/nginx/html:/usr/share/nginx/html -v /opt/docker_v/nginx/conf/nginx.conf:/etc/nginx/nginx.conf -v /opt/docker_v/nginx/logs:/var/log/nginx nginx
此時運行會報錯
看字面意思是說nginx.conf不是一個文件夾,是否確定將一個文件夾映射到一個文件中,這個問題困擾了我好久,查了很多資料,終于找到了解決辦法,如下:
1、首先運行 :docker run --name nginx -p 8086:80 -d nginx
注意:這個命令不會將配置文件映射出來
2、通過docker cp命令將剛剛運行的nginx容器中的相關配置文件拷貝到我們后需要映射的目錄下
docker cp 07e55c69a133:/etc/nginx/conf.d/default.conf /opt/docker_v/nginx/conf.d/default.conf
docker cp 07e55c69a133:/usr/share/nginx/html /opt/docker_v/nginx/html
docker cp 07e55c69a133:/etc/nginx/nginx.conf /opt/docker_v/nginx/conf/nginx.conf
docker cp 07e55c69a133:/var/log/nginx /opt/docker_v/nginx/logs
3、docker rm -f 剛剛運行的nginx容器,他的使命已經結束了
4、再次運行我們之前的命令
docker run --name nginx -d -p 80:80 -p 443:443 -p 3900:3900 -p 3700:3700 -v /opt/docker_v/nginx/conf.d/default.conf:/etc/nginx/conf.d/default.conf -v /opt/docker_v/nginx/html:/usr/share/nginx/html -v /opt/docker_v/nginx/conf/nginx.conf:/etc/nginx/nginx.conf -v /opt/docker_v/nginx/logs:/var/log/nginx nginx
這個時候就不會報錯了,通過瀏覽器打開我們的域名地址
第三步、通過nginx反向代理轉發
假如我們有一個項目,端口號為8086,此時如果通過域名去訪問,必須加上端口號才能訪問,如:http://api.mofang.cn:8086 ,因為服務器默認的端口號為80,只有端口號為80的項目才可以不需要額外加上端口號
此時我們就可以用nginx做一個代理轉發,具體步驟如下
1、進入到我們之前映射的配置目錄,找到nginx.conf文件
添加一下代碼
server {
? ? ? ? listen 80;#端口號
? ? ? ? server_name? api.mofang.top;//配置好的二級域名
? ? ? ? location / {
? ? ? ? ? ? ? ?proxy_pass http://公網IP:8086;
? ? ? ? ? ? ? ?root? /usr/share/nginx/html;
? ? ? ? ? ? ? ?index? index.html index.htm;
? ? ? }
}
配置好以后 重啟nginx??
docker restart nginx
這個時候,我們的項目就通過nginx代理到了我們的8086端口上,通過剛剛的二級域名就能直接訪問了,不需要加端口了
第四步、前兩天我在阿里云上申請了一個免費的ssl證書,今天一起搞了
如何申請請看這 https://yq.aliyun.com/articles/637307
證書部署步驟如下
1、首先將下載下來的證書添加的服務器的/opt/docker_v/nginx/conf/ca目錄下
2、通過docker cp拷貝到nginx容器內部的/etc/nginx/ca目錄下
注意:容器內部ca文件夾需要自己去mkdir
docker cp /opt/docker_v/nginx/conf/ca/4468778_api.mofang.top.pem e0b892b8ac43:/etc/nginx/ca/4468778_api.mofang.top.pem?
docker cp /opt/docker_v/nginx/conf/ca/4468778_api.mofang.top.key e0b892b8ac43:/etc/nginx/ca/4468778_api.mofang.top.key
3、配置nginx.conf文件,在文件下方加上以下代碼
server {
#SSL 訪問端口號為 443 docker映射端口3700
listen 443 ssl;
#填寫綁定證書的域名
server_name api.mofang.top;
#證書文件名稱
ssl_certificate ca/4468778_api.mofang.top.pem;
#私鑰文件名稱
ssl_certificate_key ca/4468778_api.mofang.top.key;
ssl_session_timeout 5m;
#請按照以下協議配置
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
#請按照以下套件配置,配置加密套件,寫法遵循 openssl 標準。
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE;
ssl_prefer_server_ciphers on;
location / {
proxy_pass http://公網IP:8086;
}
}
接下來重啟nginx,就OK了
最后提一句:nginx配置過程中不是一帆風順,大家一定要用好映射出來的logs文件,里面有錯誤日志,錯誤一目了然,可以給大家減少許多時間。