nginx工具是一款高性能的開(kāi)源 Web 服務(wù)器軟件,也可以用于反向代理、負(fù)載均衡等,并且具有高性能、低內(nèi)存消耗等優(yōu)點(diǎn)。
本文我們主要講解關(guān)于nginx的反向代理功能,并在服務(wù)器上實(shí)現(xiàn)如下功能:
1. 反向代理其他后臺(tái)服務(wù)
2. 通過(guò)域名訪問(wèn)后臺(tái)服務(wù)
前期準(zhǔn)備:
1. 一臺(tái)云服務(wù)器(ubuntu20.04 LTS)
2. 一個(gè)可用的域名
注意:
1. 本文中因服務(wù)器上已經(jīng)提前安裝了nginx,所以第二段(安裝nginx)中使用的系統(tǒng)是一個(gè)全新的本地ubuntu系統(tǒng)來(lái)演示,因此其ip地址為局域網(wǎng)地址。
2. 第三章(nginx反向代理配置)中,使用的系統(tǒng)為云服務(wù)器ubuntu系統(tǒng),其ip地址為公網(wǎng)地址,并且已經(jīng)使用了域名進(jìn)行了解析。
3. 若使用的是CentOS等其他系統(tǒng),則部分管理命令和操作命令可能不相同,但nginx配置和使用邏輯基本相同。
sudo apt update
sudo apt install nginx -y
-y選項(xiàng)代表安裝過(guò)程中的詢問(wèn)默認(rèn)為yes
安裝完成后,可以檢查系統(tǒng)中是否多了兩個(gè)目錄文件,/etc/nginx/和/var/www/html,其中:
/etc/nginx/:包含NGINX 的配置文件,主要用于配置 nginx 服務(wù)器的行為,包括監(jiān)聽(tīng)的端口、反向代理設(shè)置、SSL/TLS 配置等。
/var/www/html:nginx默認(rèn)的網(wǎng)站根目錄,這里存放了HTML頁(yè)面、JS文件等資源。
在本文中,我們主要講解nginx的反向代理功能,所以/var/www/html作為nginx的web服務(wù)器功能目錄,我們暫時(shí)不進(jìn)行任何修改。
啟動(dòng)nginx服務(wù),并添加為系統(tǒng)啟動(dòng)時(shí)自啟動(dòng):
sudo systemctl start nginx sudo systemctl enable nginx
查看nginx服務(wù)當(dāng)前狀態(tài):
sudo systemctl status nginx
通過(guò)檢查狀態(tài)可以看出當(dāng)前nginx服務(wù)狀態(tài)為正在running運(yùn)行,并且已經(jīng)enabled添加到了開(kāi)機(jī)自啟動(dòng),通過(guò)下方輸出的日志也可以看出已經(jīng)啟動(dòng)成功。
在瀏覽器使用服務(wù)器ip地址進(jìn)行訪問(wèn)ngxin的web服務(wù)器功能:
192.168.3.168:80 或192.168.3.168 #默認(rèn)訪問(wèn)80端口
至此可以證明nginx已經(jīng)安裝成功。
在反向代理功能中,需要了解nginx配置文件中/etc/nginx/sites-available和/etc/nginx/sites-enabled兩個(gè)目錄:
sites-available:這個(gè)目錄包含了所有可用的虛擬主機(jī)配置文件。每個(gè)文件通常對(duì)應(yīng)一個(gè)虛擬主機(jī)(一個(gè)網(wǎng)站)的配置。在這里你可以存放所有已經(jīng)創(chuàng)建的虛擬主機(jī)配置文件,無(wú)論是否啟用。
sites-enabled:這個(gè)目錄包含了當(dāng)前啟用的虛擬主機(jī)配置文件的符號(hào)鏈接。在nginx啟動(dòng)時(shí),它只會(huì)讀取 sites-enabled 目錄中的配置文件。
通俗來(lái)講:虛擬主機(jī)是指同一個(gè)物理服務(wù)器上運(yùn)行的不同網(wǎng)站或服務(wù),available目錄存放了我們想要代理的虛擬主機(jī)的配置文件,但這些配置文件是否啟用取決于我們是否將其鏈接到了enabled目錄中,因?yàn)閚ginx服務(wù)只會(huì)讀取enabled目錄來(lái)進(jìn)行設(shè)置,這種做法使得添加、編輯和禁用虛擬主機(jī)配置變得更加簡(jiǎn)單和安全。
本次演示將使用nginx為emqx的管理控制臺(tái)服務(wù)(EMQX Dashboard,端口18083)完成反向代理功能。(若沒(méi)有emqx服務(wù),也可以用于其他任何應(yīng)用程序和服務(wù),道理相同)
這里需要用到二級(jí)域名,所以對(duì)域名直接進(jìn)行了二級(jí)域名泛解析
例如,這里我們使用的域名為keeshow.cn,我們想將emqx管理控制臺(tái)服務(wù)通過(guò)mqtt.keeshow.cn來(lái)訪問(wèn)。
新增/etc/nginx/sites-available/mqtt.keeshow.cn配置文件,配置內(nèi)容為:
server {
listen 80;
listen [::]:80;
server_name mqtt.keeshow.cn;
client_max_body_size 1024m;
location / {
proxy_pass http://127.0.0.1:18083;
proxy_set_header HOST $host;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
server塊:定義了一個(gè)虛擬主機(jī),用于處理特定的域名和端口的請(qǐng)求。
listen:80:監(jiān)聽(tīng)IPv4 地址上的端口 80(HTTP 默認(rèn)端口),[::]:80:監(jiān)聽(tīng)IPv6 地址上的端口 80。這樣可以同時(shí)處理 IPv4 和 IPv6 的 HTTP 請(qǐng)求。
server_name:指定該虛擬主機(jī)響應(yīng)的域名。只有請(qǐng)求的Host 頭匹配 mqtt.keeshow.cn 時(shí),才會(huì)使用這個(gè)server 塊。
client_max_body_size:設(shè)置客戶端請(qǐng)求體的最大允許大小為1024MB。這在需要上傳大文件時(shí)有用,防止請(qǐng)求因?yàn)檫^(guò)大被拒絕。
location 塊:定義了對(duì)根路徑(/)的請(qǐng)求的處理方式。
proxy_pass:將所有到達(dá)mqtt.keeshow.cn 的請(qǐng)求代理到本地的127.0.0.1:18083。代表nginx接收到請(qǐng)求后,將它轉(zhuǎn)發(fā)給運(yùn)行在本地端口 18083 的 EMQX Dashboard。
proxy_set_header:請(qǐng)求頭設(shè)置相關(guān)。
HOST $host:將客戶端請(qǐng)求的Host 頭傳遞給后端服務(wù)器。$host 變量代表客戶端請(qǐng)求的主機(jī)名。
X-Forwarded-Proto $scheme:將客戶端使用的協(xié)議(HTTP或 HTTPS)傳遞給后端服務(wù)器。$scheme 變量表示請(qǐng)求的協(xié)議。
X-Real-IP $remote_addr:將客戶端的真實(shí)IP 地址傳遞給后端服務(wù)器。$remote_addr 變量表示客戶端的IP 地址。
X-Forwarded-For $proxy_add_x_forwarded_for:將客戶端的原始IP 地址和所有代理的 IP 地址傳遞給后端服務(wù)器。$proxy_add_x_forwarded_for 變量包含客戶端的IP 地址以及所有代理服務(wù)器的 IP 地址。
創(chuàng)建完成后,查看sites-available目錄可以看到新增的配置文件,同理,如果需要新增其他配置文件,也需要?jiǎng)?chuàng)建在該目錄中。
鏈接sites-available目錄中的配置文件鏈接到sites-enabled目錄中:
sudo ln -s /etc/nginx/sites-available/mqtt.keeshow.cn /etc/nginx/sites-enabled/
該鏈接會(huì)在sites-enabled目錄中生成一個(gè)軟連接,并指向了sites-available目錄中的原始配置文件,同理,我們也能在這里看到其他已代理服務(wù)的鏈接,他們都來(lái)自于sites-available目錄。
完成配置后,檢查配置有無(wú)語(yǔ)法錯(cuò)誤:sudo nginx -t
#重新加載nginx配置文件 sudo systemctl reload nginx
#重新啟動(dòng)nginx sudo systemctl restart nginx
完成以上步驟后,代表已經(jīng)配置好了nginx的反向代理,再通過(guò)域名訪問(wèn)EMQX管理控制臺(tái)服務(wù),能夠正常訪問(wèn)。
1. nginx作為反向代理服務(wù)器,它的反向代理功能可以幫助將客戶端的請(qǐng)求轉(zhuǎn)發(fā)到后端的多個(gè)服務(wù)器或服務(wù)上,并將后端服務(wù)器的響應(yīng)返回給客戶端。
2. 當(dāng)使用域名進(jìn)行反向代理時(shí),客戶端只能看到域名,而無(wú)法直接看到后端服務(wù)器的真實(shí)IP地址。這樣可以隱藏后端服務(wù)器的真實(shí)IP地址,增強(qiáng)了安全性和隱私保護(hù)。
今天的分享就到這里啦,EBYTE每一天都致力于更好的助力物聯(lián)化、智能化、自動(dòng)化的發(fā)展,提升資源利用率,更多產(chǎn)品更多資料,感興趣的小伙伴可以登錄我們的億佰特官網(wǎng)和企業(yè)公眾號(hào)(微信號(hào):cdebyte)進(jìn)行了解,也可以直接撥打400電話咨詢技術(shù)專員!
相關(guān)閱讀:
1、HTTP傳輸協(xié)議與WebSocket協(xié)議詳解對(duì)比