Nginx技術進階詳講
作者 : Stanley 羅昊
【轉載請注明出處和署名,謝謝!】
並發數問題
講到並發數這個概念,想必各位應該都知道是什么意思,就是同時訪問一個項目,就比我們現在做的一些項目完工以后要放到公網環境下的時候,所有人都能用,比如,你上百度,同時別人也在上,所以有多少人同時在,又同時去處理,這就是所謂的並發數;
tomcat的並發數大概在300左右,如果再多的話,它的訪問速度就會變的很慢,這里值得提一下,雖然只有300,但是並發數還是比較多的,什么概念呢?就死在一秒之內,甚至不到一秒,同時訪問這個系統的並發量300左右,當然它也受限於網絡帶寬的問題;
帶寬越大,我在你這個網頁上下載的速度也就越快,如果我的帶寬只有一兆的話,那么我的下載速度也就幾十KB,所以這些並發數,還受限於這寫影響;
Nginx解決並發數問題
剛才我也說了,Tomcat的並發量大概也就300,同時連進來的人數若要超過這300,那么速度就會變得非常慢,會出現丟包的情況,至於什么是丟包我在這里就不詳說了,各位可以自行百度;
怎么解決這個問題呢?
那么就用Nginx(靜態資源服務武器)來解決這個問題;
nginx是一個很強大的高性能的wbe和反向代理服務器,它狙狗非常優越的特性:
在連接高並發的情況下,Nginx是Apache服務器不錯的替代品,而它的並發量在50000左右,簡直無法跟tomcat相比,就不是一個數量級的;
但是有一個疑問就是,那直接學或直接用Nginx不就完了嗎,干嘛還要學Tomcat、JBOSS....
Nginx是一個HTTP和反向代理服務器,Tomcat是應用服務器,能夠運行java程序、執行jsp、serviet;
Nginx不行,它是來處理靜態資源的,你往上面放一個靜態的圖片、視頻、音頻以及一個HTML,它能幫你處理,你往上面放一個java源代碼,它就不能幫你處理了;
所以,Nginx跟Tomcat這些應用服務器沒有任何沖突,Nginx的應用面,跟Tomcat簡直就是兩個應用面,他們之間沒有任何沖突;
使用Nginx訪問靜態資源
Ngxin下載網盤地址【windows】(騰訊微雲):
鏈接:https://share.weiyun.com/5VfMTOP 密碼:mf39a6
下載安裝好后打開,我們需要配置一些屬性來做負載均衡👇
1.啟動Nginx
解壓到指定文件夾后,我們雙擊Nginx:
進去之后雙擊nginx.exe,運行即可【可以在系統資源管理器】中查看Nginx運行狀態;
2.配置Nginx
在conf文件中,雙擊nginx.conf使用記事本或者其他文本工具打開:
接下來我們開始對它的配置文件進行一系列的解讀;
3.Nginx.conf配置文件解讀
點進去后,首先我聲明一點,我不是做運維的,我是干開發的,所以我只會說一些對於我們開發而言比較重要的一些配置;
第一部分:👇
http { include mime.types; default_type application/octet-stream; #log_format main '$remote_addr - $remote_user [$time_local] "$request" ' # '$status $body_bytes_sent "$http_referer" ' # '"$http_user_agent" "$http_x_forwarded_for"'; #access_log logs/access.log main; sendfile on; #tcp_nopush on; #keepalive_timeout 0; keepalive_timeout 65; #gzip on; server { listen 8888; server_name localhost; #charset koi8-r; #access_log logs/host.access.log main; location / { root html; index index.html index.htm; }
首先,http是處理http協議的,setver算是一個節點,這代表其中一個服務,服務監聽端口是8888端口,當你執行8888端口的時候,他就會自動幫你映射到你Nginx所在的根目錄;
這個根目錄是在咱們的電腦上的Nginx安裝目錄:
在配置文件中可以清晰的看到,它映射到這個nginx根目錄中的html文件夾:
而這里面的資源,你都可以通過8888來訪問了;
比如我現在想訪問我這里的一張圖片,很簡單,打開瀏覽器,直接輸入端口8888,加上你的文件地址全目錄即可【前提是你先啟動Nginx】👇
地址欄輸入👇:
這樣就完成了靜態資源的訪問;
反向代理(動靜分離)
反向代理(Reverse Proxy)實際運行方式是指以代理服務器來接受internet上的連接請求,然后將請求轉發給內部網絡上的服務器,並將從服務器上得到的結果返回給internet上請求連接的客戶端,此時代理服務器對外就表現為一個服務器。
通俗點理解就是,當你訪問一個頁面,那個頁面上肯定有一些什么圖片啊音頻視頻,當我們訪問這個網頁的時候,相當於你發了兩次請求,比如百度,你訪問百度一次,又向它的內外服務器發了一次請求,而它的內網服務器就是nginx,它從內網服務器拿出你訪問的一些圖片,音頻,從而可以看出,靜態資源與動態資源是放在一個不同的服務器上;
我訪問百度,百度一看我要訪問的是圖片就是一些靜態資源,那么,它就是把你的這次請求轉發給靜態資源服務器,獲取圖片后,響應給你;
所以,作為用戶,你不知道你到底訪問的是哪一台服務器;
通過反向代理機制可以做負載均衡;
負載均衡
先通過一張圖大概了解一下:
我們需要在配置文件中配置一下,首先,還是在剛剛我在上面寫的那個文件,用記事本打開,接下來,我將介紹第二個比較重要的配置👇:
#配置應用服務器的ip端口 http { upstream myproject { server 127.0.0.1:8081; server 127.0.0.1:8082; } server { listen 6565; server_name www.domain.com; location / { proxy_pass http://myproject; } } }
首先,這段代碼在配置文件中不內置,需要自己手動添加進去,我大概介紹一下;
upstream是關鍵字來標識自己是一個配置反向代理的字段,不可以更改,后面的myspringboot可以隨便更改;
后面的就是配置你的應用服務器集群,用來幫你代理的;
配置完成后重啟才能生效;
直接在任務管理器結束Nginx進程,再開即可~
而下面的server就代表,通過6565來訪問以上兩個應用服務器季集群,從而達到,負載均衡;
今日感悟:
人的一切痛苦,本質上都是對自己無能的憤怒;