全棧開發(fā)—使用Nginx配置HTTPS和反向代理

個人博客開發(fā)系列文章:

使用Nginx配置HTTPS和反向代理

想起大學(xué)時自己建了個簡單的網(wǎng)站,當(dāng)時使用的http,然后打開的時候經(jīng)常都被http劫持,那是真的無可奈何,所以這次必須要整個https。https是啥?想必大家都知道,不懂的直接超文本安全傳輸協(xié)議

HTTPS效果圖

配置HTTPS

證書申請

  • 電腦操作系統(tǒng)是macOS 10.14.5
  • 服務(wù)器:騰訊云CentOS 7.2
  • Nginx版本:1.16.0

在這里,我使用的是騰訊云的免費證書:

  • 進(jìn)入控制臺 -> 左上角云產(chǎn)品 -> 域名和網(wǎng)站 -> SSL證書 -> 申請免費證書
  • 申請之后,大概過不了幾分鐘,就通過審核了,然后下載之
  • 下載之后有幾個文件:
目錄

證書配置

首先登錄你的服務(wù)器,我們需要創(chuàng)建一個文件夾來放我們的證書

mkdir /usr/local/nginx/cert

然后使用scp命令把我們的證書傳到服務(wù)器上

# 進(jìn)入到放證書的文件夾
cd shirmy.me

# 把 Nginx 下的文件遠(yuǎn)程拷貝到服務(wù)器上
scp -r ./Nginx/* 你的服務(wù)器用戶名@你的服務(wù)器IP:/usr/local/nginx/cert

接下來就可以修改Nginx的配置了,其實騰訊云提供了很完善的證書安裝指引,里面有除了Nginx之外的其它服務(wù)器配置方式:

騰訊云SSL證書安裝指引

如果直接使用文檔中的方式,Nginx會報警告,需要做一些小的修改:

server {
    listen 443; #SSL 訪問端口號為 443
    server_name www.shirmy.com; #填寫綁定證書的域名
    # ssl on; #啟用 SSL 功能 這行會報警告 去掉即可
    ssl_certificate ../cert/1_www.shirmy.me_bundle.crt; #證書文件名稱
    ssl_certificate_key ../cert/2_www.shirmy.me.key; #私鑰文件名稱
    ssl_session_timeout 5m;
    ssl_protocols TLSv1 TLSv1.1 TLSv1.2; #請按照這個協(xié)議配置
    ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE; #請按照這個套件配置,配置加密套件,寫法遵循 openssl 標(biāo)準(zhǔn)。
    ssl_prefer_server_ciphers on;

    location / {
        root /var/www/www.domain.com; #網(wǎng)站主頁路徑。此路徑僅供參考,具體請您按照實際目錄操作。
        index  index.html index.htm;
        # 這是為解決 Vue Router 哈希模式刷新后404的問題 Nginx 找不到文件后會在內(nèi)部發(fā)起一個子請求到根目錄下的 index.html
        try_files $uri $uri/ /index.html;
    }
}

HTTP跳轉(zhuǎn)到HTTPS

騰訊云文檔提供了以下的配置方式,但是我用的是另外一種配置方式:

# 文檔提供的配置方式
}
  server {
    listen 80;
    server_name www.domain.com; #填寫綁定證書的域名
    rewrite ^(.*)$ https://$host$1 permanent; #把http的域名請求轉(zhuǎn)成https
}

另一種方式

這種方式其實是利用了<meta>標(biāo)簽中的的http-equiv屬性,與之對應(yīng)的值是content,我們需要新建一個index.html文件,復(fù)制并修改以下代碼:

<html>
    <!-- 自動刷新并指向新頁面,0 是指0秒后刷新(立即刷新) -->
    <meta http-equiv="refresh" content="0;url=https://www.shirmy.me/">
</html>

這樣當(dāng)我們訪問http://www.shirmy.me時就會重新刷新到https://www.shirmy.me,然后再修改nginx配置如下:

server {
    listen 80;  # 監(jiān)聽默認(rèn)端口
    server_name www.shirmy.me; # 域名
    location / {
        root www/http.shirmy.me/;    # 剛剛的 index.html 所在目錄
        index index.html index.htm;
    }
}

最后,重啟我們的Nginx服務(wù)器:

cd /usr/local/nginx/sbin

# 平滑重啟
./nginx -s reload

# 非平滑重啟
./nginx -s stop && ./nginx

大功告成,配置了HTTPS的網(wǎng)站,要保證網(wǎng)站的鏈接都是安全的,包括API請求都必須使用HTTPS

Nginx反向代理

  • 我們的網(wǎng)頁發(fā)起請求時,帶個端口豈不是很難看,比如https//api.shirmy.me:3000/v1/articles,如何去掉端口呢?
  • 又比如說我們要訪問集群服務(wù)器時,會先訪問一個中間服務(wù)器,然后這個中間服務(wù)器再把你的請求分發(fā)到壓力小的服務(wù)器,這也需要通過反向代理來實現(xiàn)。
# 負(fù)載均衡就是靠下面這個來實現(xiàn)
# blogapi 替換成你喜歡的名字
upstream blogapi {
    server http://127.0.0.1:3000;
    # server 你也可以選擇配置多個IP
}
server {
    # 同上面一樣的 HTTPS 配置
    listen 443 ssl;
    server_name api.shirmy.me;
    ssl_certificate ../cert/1_api.shirmy.me_bundle.crt;
    ssl_certificate_key ../cert/2_api.shirmy.me.key;
    ssl_session_timeout 5m;
    ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
    ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE;
    ssl_prefer_server_ciphers on;

    # 反向代理配置
    location / {
        # $host 代表轉(zhuǎn)發(fā)服務(wù)器
        proxy_set_header Host $host;
        proxy_redirect off;
        # 記錄真實IP
        proxy_set_header X-Real-IP $remote_addr;
        # 存儲請求鏈路上各代理IP
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        # 連接超時時間
        proxy_connect_timeout 60;
        # nginx接收upstream server數(shù)據(jù)超時時間
        proxy_read_timeout 600;
        # nginx發(fā)送數(shù)據(jù)至upstream server超時時間
        proxy_send_timeout 600;
        # 反向代理到上面定義好的 upstream blogapi 下的服務(wù)器上
        proxy_pass http://blogapi;
    }
}

如此一來,就實現(xiàn)了反向代理和負(fù)載均衡,此外,我們應(yīng)該讓用戶第一次訪問該服務(wù)器后,以后再訪問也是訪問該服務(wù)器,避免多次建立http連接,那么我們可以這樣修改:

upstream blogapi {
    # 避免每次被請求到多臺服務(wù)器上 滿足用戶保持訪問同一臺服務(wù)器 又能實現(xiàn)負(fù)載均衡
    ip_hash;
    server http://127.0.0.1:3000;
    # server 你也可以選擇配置多個服務(wù)器IP
}

最后記得重啟/usr/local/nginx/sbin/nginx -s reload

多個域名配置

除了主頁shirmy.me之外,我們通常還要有一個管理后臺:admin.shirmy.me,因為用的是免費證書,所以我們也只好為子域名申請一個SSL證書,并且以同樣的方式配置。

我們又總不能用端口shirmy.me:5000這樣子訪問吧,其實只要這樣做:

server {
    listen 80;
    # admin.shirmy.me
    server_name admin.shirmy.me;
    location / {
        # 直接看上面 HTTP 跳轉(zhuǎn)到 HTTPS 的配置
        root www/http.admin.shirmy.me/;
        index index.html index.htm;
    }
}

最后記得重啟/usr/local/nginx/sbin/nginx -s reload

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 228,443評論 6 532
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 98,530評論 3 416
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 176,407評論 0 375
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經(jīng)常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 62,981評論 1 312
  • 正文 為了忘掉前任,我火速辦了婚禮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 71,759評論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 55,204評論 1 324
  • 那天,我揣著相機(jī)與錄音,去河邊找鬼。 笑死,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,263評論 3 441
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 42,415評論 0 288
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 48,955評論 1 336
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 40,782評論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 42,983評論 1 369
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,528評論 5 359
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 44,222評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,650評論 0 26
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,892評論 1 286
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,675評論 3 392
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 47,967評論 2 374