亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 網站 > Nginx > 正文

為docker中的nginx配置https的方法步驟

2024-08-30 12:30:10
字體:
來源:轉載
供稿:網友

沒有 https 加持的網站會逐漸地被瀏覽器標記為不安全的,所以為網站添加 https 已經變得刻不容緩。對于商業網站來說,花錢購買 SSL/TLS 證書并不是什么問題。但對于個人用戶來說,如果能有免費的 SSL/TLS 證書可用將會是非常幸福的事情!Let's Encrypt 就是一個提供免費 SSL/TLS 證書的網站,由于其證書期限只有三個月,所以需要我們用自動化的方式去更新證書。本文將介紹如何為通過 docker 運行的 nginx 中的站點添加 https 支持,并自動完成證書的更新。本文的演示環境為:運行在 Azure 上的 Ubuntu 16.04 主機(此圖來自互聯網):

docker,nginx,https

準備環境

在 Azure 上創建 Ubuntu 類型的虛機事件非常容易的事情,安裝 docker 也無須贅言。比較容易忽略的是配置合適的網絡安全組規則,比如打開 80 和 443 端口:

docker,nginx,https

還有就是配置 DNS:

docker,nginx,https

創建一個普通的 http 站點

簡單起見,直接使用一個鏡像中的 nodejs 應用作為 web 站點:

$ docker pull ljfpower/nodedemo$ docker network create -d bridge webnet$ docker run -d --restart=always --expose=3000 /   --network=webnet --name=myweb /   ljfpower/nodedemo

在用戶的家目錄下創建 nginx 目錄及其子目錄 conf.d、conf.crt 和 html,創建 logs 目錄及其子目錄 nginx 和 letsencrypt:

$ mkdir -p nginx/{conf.d,conf.crt,html}$ mkdir -p logs/{nginx,letsencrypt}

說明,本文演示的示例中需要我們手動創建的文件和目錄結構如下:

docker,nginx,https

創建 nginx/nginx.conf 文件,內容如下:

user nginx;worker_processes auto;error_log /var/log/nginx/error.log warn;pid  /var/run/nginx.pid;events { worker_connections 2048;}http { include  /etc/nginx/mime.types; default_type application/octet-stream; sendfile  on; keepalive_timeout 65; client_max_body_size 10M; include /etc/nginx/conf.d/*.conf;}

然后創建 nginx/conf.d/default.conf 文件,內容如下:

upstream web{ server myweb:3000;}server { listen  80; listen  [::]:80; server_name filterinto.com www.filterinto.com; location ^~ /.well-known/acme-challenge/ {  default_type "text/plain";  root /usr/share/nginx/html; } location = /.well-known/acme-challenge/ {  return 404; } location / {  proxy_pass http://web; }}

其中 /.well-known/acme-challenge/ 目錄是 certbot 工具在生成證書時創建的。接下來創建文件 nginx/html/index.html 文件,內容如下:

<!DOCTYPE html><html><head> <meta charset="utf-8" /> <title>Let's Encrypt First Time Cert Issue Site</title></head><body> <h1>Hello HTTPS!</h1> <p>  Just used for the very first time SSL certificates are issued by Let's Encrypt's  certbot. </p></body></html>

這個頁面也是 certbot 在生成證書時需要用到的。最后讓我們啟動容器(在用戶的家目錄下執行下面的命令):

$ docker run -d / -p 80:80 / -v $(pwd)/nginx/conf.d:/etc/nginx/conf.d:ro / -v $(pwd)/nginx/nginx.conf:/etc/nginx/nginx.conf:ro / -v $(pwd)/logs/nginx:/var/log/nginx / -v $(pwd)/nginx/html:/usr/share/nginx/html / --restart=always / --name=gateway / --network=webnet / nginx:1.14

注意:這時沒有映射 443 端口,也沒有掛載存放證書的目錄。只能以 http 協議訪問訪問我們的站點:

docker,nginx,https

為站點生成 SSL/TLS 證書

Let's Encrypt 是一個提供免費 SSL/TLS 證書的網站,它為用戶提供了 certbot 工具用來生成 SSL/TLS 證書。方便起見,我們把 certbot 簡單的封裝到容器中。在用戶的家目錄下創建 certbot 目錄,進入 certbot 目錄并把下面的內容保存到 Dockerfile 文件中:

FROM alpine:3.4RUN apk add --update bash certbotVOLUME ["/etc/letsencrypt"]

然后執行下面的命令創建 certbot 鏡像:

$ docker build -t certbot:1.0 .

然后在 certbot 目錄下創建自動更新證書的腳本 renew_cert.sh,內容如下:

#!/bin/bashWEBDIR="$1"LIST=('filterinto.com' 'www.filterinto.com')LED_LIST=()WWW_ROOT=/usr/share/nginx/htmlfor domain in ${LIST[@]};do docker run /  --rm /  -v ${WEBDIR}/nginx/conf.crt:/etc/letsencrypt /  -v ${WEBDIR}/logs/letsencrypt:/var/log/letsencrypt /  -v ${WEBDIR}/nginx/html:${WWW_ROOT} /  certbot:1.0 /  certbot certonly --verbose --noninteractive --quiet --agree-tos /  --webroot -w ${WWW_ROOT} /  --email="nick.li@grapecity.com" /  -d "$domain" CODE=$? if [ $CODE -ne 0 ]; then  FAILED_LIST+=($domain) fidone# output failed domainsif [ ${#FAILED_LIST[@]} -ne 0 ];then echo 'failed domain:' for (( i=0; i<${#FAILED_LIST[@]}; i++ )); do  echo ${FAILED_LIST[$i]} donefi

在用戶的家目錄中執行 ./renew_cert.sh /home/nick 命令就可以生成新的證書(/home/nick 為當前用戶的家目錄)。生成的證書被保存在 /home/nick/nginx/conf.crt/live 目錄下,以域名命名的目錄下保存著該域名的證書:

docker,nginx,https

然后去檢查下 nginx/html 目錄,發現多了一個隱藏的 .well-known 目錄,這個目錄就是在生成證書時創建的:

docker,nginx,https

有了 SSL/TLS 證書,接下來我們就可以配置 https 站點了。

為站點配置 SSL/TLS 證書

有了 SSL/TLS 證書,接下來更新 nginx 的配置文件就可以了,更新 nginx/conf.d/default.conf 的內容如下:

upstream web{ server myweb:3000;}server { listen  80; listen  [::]:80; server_name filterinto.com www.filterinto.com; location ^~ /.well-known/acme-challenge/ {  default_type "text/plain";  root /usr/share/nginx/html; } location = /.well-known/acme-challenge/ {  return 404; } return 301 https://$server_name$request_uri;}server { listen  443; listen  [::]:443; server_name filterinto.com; # enable ssl ssl      on; ssl_protocols TLSv1 TLSv1.1 TLSv1.2; ssl_prefer_server_ciphers on; ssl_ciphers    "EECDH+ECDSA+AESGCM EECDH+aRSA+AESGCM EECDH+ECDSA+SHA384 EECDH+ECDSA+SHA256 EECDH+aRSA+SHA384 EECDH+aRSA+SHA256 EECDH EDH+aRSA !aNULL !eNULL !LOW !3DES !MD5 !EXP !PSK !SRP !DSS !RC4"; # config ssl certificate ssl_certificate   conf.crt/live/filterinto.com/fullchain.pem; ssl_certificate_key  conf.crt/live/filterinto.com/privkey.pem; location ^~ /.well-known/acme-challenge/ {  default_type "text/plain";  root /usr/share/nginx/html; } location = /.well-known/acme-challenge/ {   return 404; } location / {  proxy_pass http://web; }}server { listen  443; listen  [::]:443; server_name www.filterinto.com; # enable ssl ssl      on; ssl_protocols TLSv1 TLSv1.1 TLSv1.2; ssl_prefer_server_ciphers on; ssl_ciphers    "EECDH+ECDSA+AESGCM EECDH+aRSA+AESGCM EECDH+ECDSA+SHA384 EECDH+ECDSA+SHA256 EECDH+aRSA+SHA384 EECDH+aRSA+SHA256 EECDH EDH+aRSA !aNULL !eNULL !LOW !3DES !MD5 !EXP !PSK !SRP !DSS !RC4"; # config ssl certificate ssl_certificate   conf.crt/live/www.filterinto.com/fullchain.pem; ssl_certificate_key  conf.crt/live/www.filterinto.com/privkey.pem; location ^~ /.well-known/acme-challenge/ {  default_type "text/plain";  root /usr/share/nginx/html; } location = /.well-known/acme-challenge/ {   return 404; } location / {  proxy_pass http://web; }}

然后刪除容器 gateway 并用下面的腳本重新創建:

$ docker run -d / -p 80:80 / -p 443:443 / -v $(pwd)/nginx/conf.d:/etc/nginx/conf.d:ro / -v $(pwd)/nginx/conf.crt:/etc/nginx/conf.crt:ro / -v $(pwd)/nginx/nginx.conf:/etc/nginx/nginx.conf:ro / -v $(pwd)/logs/nginx:/var/log/nginx / -v $(pwd)/nginx/html:/usr/share/nginx/html / --restart=always / --name=gateway / --network=webnet / nginx:1.14

現在就只能通過 https 來訪問站點了:

docker,nginx,https

自動更新證書

Let's Encrypt 提供的 SSL/TLS 證書期限只有三個月,每過三個月要手動更新一次證書也夠嗆的,下面我們介紹自動更新證書的方法。

其實我們的配置已經為自動化更新證書提供了最大的便利(其實是使用 docker 帶來的便利),在定時任務中添加下面兩條記錄就可以了:

0 0 1 * * /home/nick/certbot/renew_cert.sh /home/nick >> /home/nick/logs/cert.log 2>> /home/nick/logs/cert.error.log0 1 1 * * docker exec gateway nginx -s reload

每月 1 號的 0 點更新證書,一個小時后 reload nginx 的配置。

總結

Let's Encrypt 是一個非常棒的網站,對于初學者和個人來說,能夠幫助我們輕松的實現 HTTPS 站點(還是免費的)!在方便的同時,其隱患也是顯而易見的:既然誰都可以無門檻的獲得 SSL/TLS 證書,那么非法網站也可以通過它把自己偽裝成看上去合法的站點。 所以千萬不要片面的認為 HTTPS 站點就是安全的!

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持VEVB武林網。


注:相關教程知識閱讀請移步到服務器教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
亚洲香蕉成视频在线观看| 国产视频精品自拍| 欧美香蕉大胸在线视频观看| 日韩hd视频在线观看| 一区二区三区国产在线观看| 日韩精品欧美激情| 91国在线精品国内播放| 欧美视频在线免费| 亚洲伊人一本大道中文字幕| 久久91精品国产| www.色综合| 国产精品av免费在线观看| 亚洲美女黄色片| 欧美乱大交做爰xxxⅹ性3| 国精产品一区一区三区有限在线| 国模视频一区二区三区| 国产精品国产自产拍高清av水多| 国产精品揄拍500视频| 色噜噜亚洲精品中文字幕| 欧美激情在线一区| 亲子乱一区二区三区电影| 亚洲女人初尝黑人巨大| 日韩av在线高清| 日韩精品免费在线播放| 精品偷拍各种wc美女嘘嘘| 亚洲国产精品字幕| 黑丝美女久久久| 亚洲美女喷白浆| 日韩精品视频三区| 色在人av网站天堂精品| 亚洲天堂第二页| 午夜精品久久久久久99热软件| 日韩精品极品视频免费观看| 国产小视频91| 国产成人在线亚洲欧美| 91高清视频在线免费观看| 色樱桃影院亚洲精品影院| 久久久国产精彩视频美女艺术照福利| 美日韩精品免费观看视频| 国产精品黄页免费高清在线观看| 国产91精品久久久| 亚洲国内精品在线| 麻豆国产精品va在线观看不卡| 日韩一二三在线视频播| 国产69精品久久久久久| 精品人伦一区二区三区蜜桃网站| 91美女片黄在线观看游戏| 久久久免费精品视频| 国产精品第三页| 亚洲一区二区三区777| 91久久久精品| 国产a级全部精品| 日韩av毛片网| 久久69精品久久久久久国产越南| 国产精品午夜视频| 精品美女久久久久久免费| 国产欧美日韩中文| 国产女精品视频网站免费| 久久天堂av综合合色| 成人久久18免费网站图片| 国产精品亚洲视频在线观看| 欧美中文在线视频| 三级精品视频久久久久| 日韩中文字幕网站| 国产va免费精品高清在线观看| 日本伊人精品一区二区三区介绍| 中文字幕精品在线视频| 国产欧美日韩免费| 91亚洲精品久久久久久久久久久久| 国产专区精品视频| 色诱女教师一区二区三区| 深夜精品寂寞黄网站在线观看| 国产精品白嫩初高中害羞小美女| 日韩av影视在线| 欧美精品一区在线播放| 2019中文字幕在线| 国产精品人人做人人爽| 国产色视频一区| 国产精品久久久久久久久久久新郎| 国产在线精品播放| 亚洲成人精品久久久| 亚洲色图35p| 亚洲成人激情小说| 国产在线高清精品| 亚洲在线www| 国产日韩欧美影视| 久久久精品国产亚洲| 亚洲天堂成人在线| 久久久久久有精品国产| 欧美激情精品久久久久久| 热99精品里视频精品| 欧美香蕉大胸在线视频观看| 欧美日本啪啪无遮挡网站| 国a精品视频大全| 亚洲白拍色综合图区| 日韩欧美在线视频免费观看| 亚洲xxxx在线| 中文字幕欧美精品在线| 伊人青青综合网站| 久久亚洲精品小早川怜子66| 午夜精品福利在线观看| 国产亚洲精品久久久| 国产精品久久久久福利| 国产精品国产三级国产aⅴ9色| 国产日韩欧美日韩| 久久6精品影院| 亚洲欧洲免费视频| 日韩最新免费不卡| 国产午夜精品麻豆| www.日本久久久久com.| 欧洲美女免费图片一区| 国产精品视频免费在线观看| 91免费电影网站| 91av中文字幕| 久久免费少妇高潮久久精品99| 国产精品久久激情| 91香蕉亚洲精品| 伊人亚洲福利一区二区三区| 精品露脸国产偷人在视频| 日韩av男人的天堂| 九九视频直播综合网| 国产中文字幕亚洲| 欧美成人黄色小视频| 久久不射电影网| 亚洲一级黄色av| 日韩精品中文字| 国产不卡一区二区在线播放| 欧美成人精品影院| 久久精品国产96久久久香蕉| 欧美日韩另类字幕中文| 大量国产精品视频| 亚洲va欧美va国产综合久久| 欧洲成人免费视频| 亚洲视屏在线播放| 亚洲国产精久久久久久久| 另类专区欧美制服同性| 久久成年人免费电影| 国产精品久久久久久中文字| 91在线观看免费高清完整版在线观看| 97精品久久久中文字幕免费| 日韩中文字幕在线免费观看| 亚洲视频网站在线观看| 亚洲人成人99网站| 青草青草久热精品视频在线网站| 中文字幕日韩欧美| 久久久久免费精品国产| 久久久久久久网站| 欧美日韩国产一区中文午夜| 久久亚洲国产成人| 欧美性极品xxxx做受| 欧美日韩国产精品一区| 久久久综合免费视频| 国产91在线播放精品91| 日韩经典中文字幕| 久久久精品在线观看| 亚洲欧洲免费视频| 777国产偷窥盗摄精品视频| 日韩不卡在线观看| 91tv亚洲精品香蕉国产一区7ujn| 久久久精品欧美| www.欧美三级电影.com| 国产精品精品视频一区二区三区| 俺也去精品视频在线观看| 欧美精品在线视频观看|