docker中Nginx之https面徽、反向代理(解決mixed content)等配置

從實際應(yīng)用場景出發(fā),應(yīng)用采用微服務(wù)開發(fā)郭计,并且通過Dockerfile構(gòu)建且部署在k8s集群上。

本文默認(rèn)有了以下的基礎(chǔ)知識:
Linux的基本操作
docker命令的操作
Dockerfile的編寫
對Nginx有一些了解
對http椒振、https有一些認(rèn)識
對devops理念有點了解

準(zhǔn)備工作:
默認(rèn)Linux系統(tǒng)昭伸,且已經(jīng)安裝了openssldocker
cd ~mkdir testcd test,下文所有的操作都在test目錄澎迎。

一庐杨、實際場景中遇到的問題
  • 自簽名證書如何生成
  • Nginx如何配置https
  • mixed content問題如何解決

關(guān)于mixed content錯誤,是由于https應(yīng)用中存在http的請求夹供,瀏覽器報的錯誤灵份,本文用Nginx的反向代理來解決該問題,用https應(yīng)用的Nginx容器來代理需要請求的http應(yīng)用

二哮洽、本文內(nèi)容
  1. 自簽名證書的生成
  2. Nginx配置https
  3. Nginx配置反向代理
  4. Dockerfile編寫
  5. 鏡像構(gòu)建及運(yùn)行
三填渠、自簽名證書的生成

使用openssl生成證書及簽名

第一步:生成CA私鑰
$ openssl genrsa -out privatekey.pem 2048
第二步:由私鑰生產(chǎn)對應(yīng)的公鑰
$ openssl rsa -in privatekey.pem -pubout -out publickey.pem
第三步:根據(jù)私鑰生成證書簽名請求
$ openssl req -new -key privatekey.pem -out csr.pem -subj "/C=CN/ST=BJ/L=BJ/O=HD/OU=dev/CN=hello/emailAddress=test@test.com"
第四步:生成CA私鑰
$ openssl genrsa -out ca.key 2048

發(fā)送簽發(fā)請求到CA進(jìn)行簽發(fā),生成 x509證書袁铐,這里我們沒有CA服務(wù)器揭蜒,所以需要假裝生成一個CA服務(wù)器

第五步:根據(jù)CA私鑰生成CA的自簽名證書
$ openssl req -new -x509 -days 365 -key ca.key -out ca.crt -subj "/C=CN/ST=BJ/L=BJ/O=HD/OU=dev/CN=ca/emailAddress=ca@test.com"
第六步:使用CA的私鑰和證書對用戶證書簽名
$ openssl x509 -req -days 3650 -in csr.pem -CA ca.crt -CAkey ca.key -CAcreateserial -out crt.pem

最后,得到的crt.pemprivatekey.pem是我們需要的證書和私鑰剔桨,在Nginx實現(xiàn)https時需要用到屉更。在當(dāng)前目錄mkdir cert,然后 mv crt.pem ./cert/洒缀、mv privatekey.pem ./cert/瑰谜。

四欺冀、Nginx配置https
第一步: 在當(dāng)前目錄vim nginx-ssl.conf
第二步:寫入以下內(nèi)容:
server {
    listen 443 ssl http2;
    server_name _;
    ssl_certificate conf.d/cert/crt.pem;
    ssl_certificate_key conf.d/cert/privatekey.pem;
    ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
    ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE;
    ssl_prefer_server_ciphers on;
    ssl_session_timeout 10m;
    client_max_body_size   20m;
    location / {
        root /usr/share/nginx/html;
        index index.html index.htm
    }
} 
五、Nginx反向代理配置

把當(dāng)前應(yīng)用升級為https后萨脑,一般情況下當(dāng)前應(yīng)用需要調(diào)用其他的http的應(yīng)用隐轩,這種情況瀏覽器會出現(xiàn)Mixed content錯誤,想到的解決辦法有兩種:
第一種:把被調(diào)用的http應(yīng)用升級為https
第二種:采用Nginx反向代理渤早,用當(dāng)前的https的Nginx來代理被調(diào)用的http應(yīng)用
本文采用反向代理的方式职车。在配置反向代理時,采用url中前綴來匹配相關(guān)的地址鹊杖。

vim nginx-ssl.conf添加如下內(nèi)容:

server {
    listen 443 ssl http2;
    server_name _;
    ssl_certificate conf.d/cert/crt.pem;
    ssl_certificate_key conf.d/cert/privatekey.pem;
    ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
    ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE;
    ssl_prefer_server_ciphers on;
    ssl_session_timeout 10m;
    client_max_body_size   20m;
    location / {
        root /usr/share/nginx/html;
        index index.html index.htm
    }
   # 根據(jù)url前綴https代理http
   location ^~ /test1/ {
        proxy_pass http://test1.com
    }
   location ^~ /test2/ {
        proxy_pass http://test2.com
    }
} 
六悴灵、Dockerfile編寫,在test目錄vim Dockerfile骂蓖,添加內(nèi)容如下:
FROM nginx:latest
MAINTAINER <test@test.com>

ADD ./cert /etc/nginx/conf.d/cert/
ADD ./nginx-ssl.conf /etc/nginx/conf.d/
WORKDIR /usr/share/nginx/html/
ADD ./dist ./

EXPOSE 80
EXPOSE 443

ADD ./dist ./這個一般情況是webpack或者vue-cli構(gòu)建后生成的文件积瞒,將它添加到Nginx的root目錄就可以訪問了。

七登下、鏡像構(gòu)建及運(yùn)行
第一步:鏡像構(gòu)建
docker build -t test/mynginx:v1 .
第二步:運(yùn)行容器
docker run --name mynginx-v1 -d -p 8081:80 -p 8443:443 test/mynginx:v1
最后:

可將鏡像打上標(biāo)簽茫孔、上傳到鏡像倉庫,然后在kubernetes集群中啟動等等被芳。本文為了演示每一步都是手動操作缰贝,但其實隨著云計算的發(fā)展,基礎(chǔ)設(shè)施變得越來越自動化筐钟,手動的方式無異于在科技時代還是使用遠(yuǎn)古時代的石器工具揩瞪,其效率可想而知。如果有條件的話可以借助一些devops平臺如Azure devops篓冲,如果沒條件可以自己寫shell腳本對流程進(jìn)行編排。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末宠哄,一起剝皮案震驚了整個濱河市壹将,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌毛嫉,老刑警劉巖诽俯,帶你破解...
    沈念sama閱讀 218,607評論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異承粤,居然都是意外死亡暴区,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,239評論 3 395
  • 文/潘曉璐 我一進(jìn)店門辛臊,熙熙樓的掌柜王于貴愁眉苦臉地迎上來仙粱,“玉大人,你說我怎么就攤上這事彻舰》ジ睿” “怎么了候味?”我有些...
    開封第一講書人閱讀 164,960評論 0 355
  • 文/不壞的土叔 我叫張陵,是天一觀的道長隔心。 經(jīng)常有香客問我白群,道長,這世上最難降的妖魔是什么硬霍? 我笑而不...
    開封第一講書人閱讀 58,750評論 1 294
  • 正文 為了忘掉前任帜慢,我火速辦了婚禮,結(jié)果婚禮上唯卖,老公的妹妹穿的比我還像新娘崖堤。我一直安慰自己,他們只是感情好耐床,可當(dāng)我...
    茶點故事閱讀 67,764評論 6 392
  • 文/花漫 我一把揭開白布密幔。 她就那樣靜靜地躺著,像睡著了一般撩轰。 火紅的嫁衣襯著肌膚如雪胯甩。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,604評論 1 305
  • 那天堪嫂,我揣著相機(jī)與錄音偎箫,去河邊找鬼。 笑死皆串,一個胖子當(dāng)著我的面吹牛淹办,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播恶复,決...
    沈念sama閱讀 40,347評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼怜森,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了谤牡?” 一聲冷哼從身側(cè)響起副硅,我...
    開封第一講書人閱讀 39,253評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎翅萤,沒想到半個月后恐疲,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,702評論 1 315
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡套么,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,893評論 3 336
  • 正文 我和宋清朗相戀三年培己,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片胚泌。...
    茶點故事閱讀 40,015評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡省咨,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出诸迟,到底是詐尸還是另有隱情茸炒,我是刑警寧澤愕乎,帶...
    沈念sama閱讀 35,734評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站壁公,受9級特大地震影響感论,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜紊册,卻給世界環(huán)境...
    茶點故事閱讀 41,352評論 3 330
  • 文/蒙蒙 一比肄、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧囊陡,春花似錦芳绩、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,934評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至遏片,卻和暖如春嘹害,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背吮便。 一陣腳步聲響...
    開封第一講書人閱讀 33,052評論 1 270
  • 我被黑心中介騙來泰國打工笔呀, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人髓需。 一個月前我還...
    沈念sama閱讀 48,216評論 3 371
  • 正文 我出身青樓许师,卻偏偏與公主長得像,于是被迫代替她去往敵國和親僚匆。 傳聞我的和親對象是個殘疾皇子微渠,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,969評論 2 355