Nginx变身爆火神器,手把手教你在永洪BI中应用
Nginx是一款輕量級的Web服務(wù)器/反向代理服務(wù)器及電子郵件(IMAP/POP3)代理服務(wù)器,在BSD-like協(xié)議下發(fā)行。其特點是占有內(nèi)存少,并發(fā)能力強(qiáng),事實上nginx的并發(fā)能力在同類型的網(wǎng)頁服務(wù)器中表現(xiàn)較好。
Nginx不屬于永洪標(biāo)準(zhǔn)產(chǎn)品的組成部分,其作為高并發(fā)場景下反向代理和負(fù)載均衡的一種通用的解決方案,在許多的項目中得到了實踐,驗證了其可用性。本文就其在永洪產(chǎn)品中的具體應(yīng)用做一個說明。
Nginx變身爆火神器,手把手教你在永洪BI中應(yīng)用
Nginx安裝
本文演示的是 Linux centOS7.x 的操作系統(tǒng)上安裝 Nginx ,至于在其它操作系統(tǒng)上進(jìn)行安裝,可以網(wǎng)上自行搜索或者參考Nginx的官方文檔,都非常簡單。
使用yum 安裝 Nginx:yum installnginx -y
安裝完成后,通過 rpm-ql nginx 命令查看 Nginx 的安裝信息:
#Nginx配置文件
/etc/nginx/nginx.conf# nginx 主配置文件
/etc/nginx/nginx.conf.default
#可執(zhí)行程序文件
/usr/bin/nginx-upgrade
/usr/sbin/nginx
#nginx庫文件
/usr/lib/systemd/system/nginx.service# 用于配置系統(tǒng)守護(hù)進(jìn)程
/usr/lib64/nginx/modules# Nginx模塊目錄
#存放Nginx日志文件
/var/log/nginx
/etc/nginx/conf.d/是子配置項存放處,/etc/nginx/nginx.conf 主配置文件會默認(rèn)把這個文件夾中所有子配置項都引入;
/usr/share/nginx/html/靜態(tài)文件都放在這個文件夾,也可以根據(jù)你自己的習(xí)慣放在其他地方;
Nginx啟動等相關(guān)命令:
開機(jī)配置
systemctl enable nginx # 開機(jī)自動啟動
systemctl disable nginx # 關(guān)閉開機(jī)自動啟動
啟動Nginx
systemctl start nginx
停止Nginx
systemctl stop nginx
重啟Nginx
systemctl restart nginx
重新加載Nginx
systemctl reload nginx
查看 Nginx 運行狀態(tài)
systemctl status nginx
查看Nginx進(jìn)程
ps -ef | grep nginx
殺死Nginx進(jìn)程
kill -9 pid
Nginx在永洪產(chǎn)品的實際應(yīng)用
多C節(jié)點通過nginx做負(fù)載均衡
通常情況下,在多C的環(huán)境中,客戶只希望以一個統(tǒng)一的界面為業(yè)務(wù)人員提供服務(wù),這個時候反向代理多個C的工作,就可以交由Nginx來實現(xiàn),但是這里存在一個問題:
如果被代理到不同C上的報告或者數(shù)據(jù)集的資源不同,就會給用戶帶來混淆和困擾,所以一般建議做反向代理的多個C,都使用數(shù)據(jù)庫系統(tǒng)的方式配置統(tǒng)一的元數(shù)據(jù)庫,這樣可以保證每個用戶的請求被代理到不同的C上所看到的內(nèi)容是統(tǒng)一的。
多C節(jié)點實現(xiàn)負(fù)載均衡配置如下(僅暫時部分配置供參考):
上圖中,展示了三個C節(jié)點作為訪問節(jié)點,配置好訪問權(quán)重之后,nginx會均勻的向每一臺服務(wù)器發(fā)送對應(yīng)的請求,實現(xiàn)負(fù)載均衡。以下是對上圖的主要內(nèi)容解釋:
upstream bi.com
服務(wù)器地址池,bi.com可以自行修改,不會在外部使用
weight
分配到每個服務(wù)器的訪問權(quán)重
ip_hash
nginx會讓相同的客戶端ip請求相同的服務(wù)器。
proxy_pass http://bi.com
監(jiān)聽nginx服務(wù)器并轉(zhuǎn)到upstream池中的服務(wù)器地址
通過以上配置內(nèi)容可以實現(xiàn)C節(jié)點服務(wù)器的負(fù)載均衡,減輕單個C節(jié)點接受所有請求的訪問壓力,但美中不足的是,這樣做了之后手機(jī)端訪問之后會出現(xiàn)問題,那么如何解決手機(jī)端訪問的問題呢?我們一一道來。
Nginx做了負(fù)載之后希望移動端也可以訪問
目前,我們的移動端主要是通過websocket實現(xiàn)與服務(wù)器的雙向通信連接,所以在負(fù)載均衡配置中,我們需要添加websocket的相關(guān)連接配置,以保證我們的移動端也能正常訪問,詳細(xì)配置參考下圖:
Nginx變身爆火神器,手把手教你在永洪BI中應(yīng)用
值得注意的是,這里我們注釋了ip_hash,是因為ip_hash可能會導(dǎo)致我們的bi無法獲取到真實的請求信息。接下來我們對相關(guān)名詞進(jìn)行解釋:
map指令可以將變量組合成為新的變量,會根據(jù)客戶端傳來的連接中是否帶有Upgrade頭來決定是否給源站傳遞Connection頭,這樣做的方法比直接全部傳遞upgrade更加優(yōu)雅。
獲取真實IP:在多重代理的情況下nginx會獲取真實服務(wù)器的IP。
Websocket所需要配置的:服務(wù)器處理完請求后,告訴客戶端已成功切換協(xié)議,升級為Websocket協(xié)議。握手成功之后,服務(wù)器端和客戶端便角色對等,就像普通的Socket一樣,能夠雙向通信。不再進(jìn)行HTTP的交互,而是開始WebSocket的數(shù)據(jù)幀協(xié)議實現(xiàn)數(shù)據(jù)交換。
HTTPS與跨域
有些朋友可能還想知道,我的域名是通過nginx解析的,并且我的證書也解析在該域名上,現(xiàn)在想通過代理的方式去解決BI系統(tǒng)https訪問的問題,該如何配置。參考下圖配置:
Nginx變身爆火神器,手把手教你在永洪BI中應(yīng)用
通過這樣,我們就實現(xiàn)了通過代理的方式使用https訪問BI,下面我們對這個配置中的部分內(nèi)容解釋一下:
ssl_certificate
證書路徑
ssl_certificate_key
證書密鑰路徑
ssl_session_cache
設(shè)置存儲session參數(shù)的緩存的類型和大小
ssl_session_timeout
Session過期時間
ssl_ciphers
指定用于保護(hù)服務(wù)器通信的算法
ssl_prefer_server_ciphers
設(shè)置協(xié)商加密算法時,優(yōu)先使用我們服務(wù)端的加密套件,而不是客戶端瀏覽器的加密套件
ssl_protocols
用于啟動特定的加密協(xié)議
proxy_cookie_path
設(shè)置session的保存位置,如果是通過https轉(zhuǎn)發(fā)訪問到http的服務(wù)上,配置這個解決跨域問題
還有一點,某些朋友可能想到,我配置了https之后,原本的http端口我想讓他自動強(qiáng)制跳轉(zhuǎn)到https上來,都通過https訪問該怎么做呢?
其實也是有辦法的,這里推薦兩種方式:
方式1:
通過301跳轉(zhuǎn):return301
https://servernameserver_nameservern?amerequest_uri;
方式2:
自動匹配再跳轉(zhuǎn):
rewrite^(*)$ https://servernameserver_nameservern?amerequest_uri permanent;
結(jié)語
近期我們收到大量小伙伴關(guān)于“如何在永洪產(chǎn)品基礎(chǔ)上使用Nginx”的咨詢,所以本文主要針對于Nginx這類代理服務(wù)器,在永洪產(chǎn)品中的具體使用,有不足之處歡迎指正。
還在為文中涉及到的到問題發(fā)愁的小伙伴們,也可以趕緊動手試一試。
總結(jié)
以上是生活随笔為你收集整理的Nginx变身爆火神器,手把手教你在永洪BI中应用的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 这款国产BI我推荐了:Tableau+S
- 下一篇: 如何用最短时间搞定酷炫可视化大屏?这款工