前陣子突然被問到,「你說你有碰過Nginx,那你知道什麼是Nginx嗎?」,這麼突然被一問,老實說我只回的出「它是一個伺服器」,如果要往更細節的問,我其實真的就回答不好了QQ
既然發現到自己好像對碰過的東西有些模糊地帶,不如就花點時間,把模糊的地方給清晰化(?)吧!


什麼是Nginx?
下載 (3)
Nginx是一種web server,除了Nginx外,還有一個也很有名的web server叫做Apache,不過今天的主角是Nginx,就只以Nginx為主了。
接下來直接看一下
官方的介紹吧!
截圖 2023-03-25 上午10.10.40
官方的介紹:
nginxX是一個HTTP和反向代理伺服器,也是一個信件代理伺服器,以及一個通用的TCP/UDP代理伺服器。

更白話的去理解什麼是Nginx的話,就是一台當我們連進網頁時,接收我們request,再發送response給我們的機器,那台機器裡面會存放一些網頁的資料(例如:前端相關的靜態資源),也會有其他附加的用途可以應用。


Nginx的用途有哪些?
大概了解Nginx是什麼之後,再更進一步來看看幾個Nginx比較常會拿來應用的用途。

反向代理
在剛接觸Nginx的時候,第一個接觸到的概念就是proxy(代理),其中又區分成反向代理和正向代理。
在使用Nginx時,可以透過proxy_pass來設定反向代理,接著也來快速看一下反向代理和正向代理的概念各是什麼。

未命名
- 正向代理:
在正向代理的情境下,當client,也就是我們使用瀏覽器輸入網址,發送request的時候,會先連到proxy server,再轉連到我實際上真正要連到的web server。這個時候真正的目的地並不會知道更早之前發生什麼事,都只知道proxy server對他發送request,所以會不知道實際發送request的人是client,而不是proxy serve。這個情境通常都會應用在VPN上,沒錯!就是大家最近常聽到的surfshark VPN的VPN,有在玩遊戲或是跨到國外追劇的人應該都對這種VPN不陌生,而他的應用概念就是正向代理,白話一點來說的話,也就是先連到VPN提供的proxy,再用那個proxy去騙實際上要連到的目的地你的真實身份,因為他只會知道是VPN的proxy對他發送request。
- 反向代理:
正向代理隱藏的是client的身份,那反過來看的話,反向代理也就是隱藏真實目的地。在反向代理的情境下,client端,也就是我們使用瀏覽器輸入網址,發送request時,我們會以為proxy server是我們的目的地,但是實際上proxy server還會繼續往下導到真正的目的地。這個概念的應用情境通常都會應用在負載平衡上和與安全相關的防火牆上。


負載平衡
這邊應用到的概念也就是前面有提到的反向代理,透過設定upstream 搭配 proxy_pass來達成。當負載太高時,就會被分配連到其他伺服器。口語化來解說的話,也就是雖然連的網址是一樣的,但會依照當下的負載狀況,去分配實際上連到的伺服器.

緩存
Nginx還可以拿來做一些緩存的動作,可以透過設定proxy_cache來進行緩存的動作,如果是已經有取得過的資源,就不會再重新拉一次資料。

靜態HTTP伺服器
如果有一些靜態資源,也可以放到Nginx裡面,透過發送指定的request,下去取得要的資源。這個也是我之前實務上有用過的用法,前端的一些靜態資源會被放到指定的Nginx裡面,當request path有對到對應的設定,就會到指定的位置取得靜態資源。

總結
Nginx是一個伺服器,但不只單純可以接收request和發送response的伺服器,還附帶多種用途可以應用,也是因為這樣,有很多人在使用Nginx。我自己碰過的寫法是用consul template下去寫,但這篇單純簡單地認識Nginx的部分,就不談詳細的內容怎麼寫了。

最後再來個接觸Nginx的心得總結!雖然自己目前還不是什麼Nginx專家,但是前端如果有去了解這部分,的確對於開發業務上有一定的幫助,也比較知道在發送request和接收response的這個過程,到底都發生了什麼事情。而且等到有理解到一些部分後,腦海中就比較好把這些偏抽象的概念轉成畫面。所以如果跟我一樣原本只專注在純前端的技術,對於偏向伺服器的這部分內容不是很了解的朋友們,就非常推薦去玩玩看Nginx,一定能讓打開自己的視野喔!XD


好啦!這次小小的學習筆記就到這裡囉!掰掰~

arrow
arrow
    創作者介紹
    創作者 文科少女寫程式 的頭像
    文科少女寫程式

    文科少女學程式

    文科少女寫程式 發表在 痞客邦 留言(0) 人氣()