01【熟悉】實際開發中的問題? 現在我們一個項目跑在一個tomcat裡面 當一個tomcat無法支持高的併發量時。可以使用多個tomcat 那麼這多個tomcat如何雲分配請求 |-nginx 02【熟悉】伺服器概述 1,目前常見的web伺服器 1,Apache(http://httpd.apach ...
01【熟悉】實際開發中的問題?
現在我們一個項目跑在一個tomcat裡面
當一個tomcat無法支持高的併發量時。可以使用多個tomcat
那麼這多個tomcat如何雲分配請求
|-nginx
02【熟悉】伺服器概述
1,目前常見的web伺服器
1,Apache(http://httpd.apache.org)
它是世界上用的最多的web伺服器,市場占有率達60%左右,模塊非常豐富,系統非常穩定,可移植性好,但是比較消耗資源
2,lighttpd(http://www.lighttpd.net)
它是德國人開發的一個開源軟體,目標是提供一個高性能的網站,它具有記憶體開銷低,cpu占用低,效能好及模塊豐富,Nginx的重要競爭對手之一
3,tomcat(http://tomcat.apache.org)
是一個開源的軟體,運行servlet+jsp web應用軟體,對靜態文件,高併發的處理能力弱。
4,IBM websphere
它功能完善,開放的Web應用程式伺服器,是IBM電子商務計劃的核心部分,它是基於java的應用環境,範圍從簡單到高級到企業級應用,相於對其它web伺服器來說應該比較少
5,Microsoft IIS
Microsoft的web伺服器產品為Internet information Server (IIS) IIS提供了圖形界面管理工具,IIS是一種web伺服器組件,其中有 web伺服器,FTP伺服器,nntp伺服器,smtp伺服器,因為有window2008和2012的支持,所以IIS也有一定的市場
2,各web伺服器占有率
查詢網站
https://news.netcraft.com/archives/2017/10/26/october-2017-web-server-survey-13.html
03【熟悉】Nginx概述
1、前言
為毛要用nginx伺服器代理,不直接用tomcat 7.0,還做多了一次接請求?
這個是我想問的,公司的新項目是要用Nginx+tomcat7+jdk開發的,用戶命名可以直接訪問tomcat,為啥還要用Nginx?這貨是個啥玩意?
2、為什麼使用Nginx?
在傳統的Web項目中,併發量小,用戶使用的少。所以在低併發的情況下,用戶可以直接訪問tomcat伺服器,然後tomcat伺服器返回消息給用戶。比如,我們上傳圖片:
當然我們知道,為瞭解決併發,可以使用負載均衡:也就是我們多增加幾個tomcat伺服器。當用戶訪問的時候,請求可以提交到空閑的tomcat伺服器上。
但是這種情況下可能會有一種這樣的問題:上傳圖片操作。我們把圖片上傳到了tomcat1上了,當我們要訪問這個圖片的時候,tomcat1正好在工作,所以訪問的請求就交給其他的tomcat操作,而tomcat之間的數據沒有進行同步,所以就發生了我們要請求的圖片找不到。
為瞭解決這種情況,我們就想出了分散式。我們專門建立一個圖片伺服器,用來存儲圖片。這樣當我們都把圖片上傳的時候,不管是哪個伺服器接收到圖片,都把圖片上傳到圖片伺服器。
圖片伺服器上需要安裝一個http伺服器,可以使用tomcat、apache、nginx。
看到這裡大家可能會問,既然我們要選擇的是http伺服器,為什麼不繼續使用tomcat,而要使用Nginx?
原因如下:nginx常用做靜態內容服務和代理伺服器(不是你FQ那個代理),直面外來請求轉發給後面的應用服務(tomcat,django什麼的),tomcat更多用來做做一個應用容器,讓java web app跑在裡面的東西,對應同級別的有jboss,jetty等東西。
3、什麼是Nginx?
根據前面的對比,我們可以瞭解到Nginx是一個http伺服器。是一個使用c語言開發的高性能的http伺服器及反向代理伺服器。Nginx是一款高性能的http 伺服器/反向代理伺服器及電子郵件(IMAP/POP3)代理伺服器。由俄羅斯的程式設計師Igor Sysoev所開發,官方測試nginx能夠支支撐5萬併發鏈接,並且cpu、記憶體等資源消耗卻非常低,運行非常穩定。
3.1 Nginx的應用場景
1、 http伺服器。Nginx是一個http服務可以獨立提供http服務。可以做網頁靜態伺服器。
2、 虛擬主機。可以實現在一臺伺服器虛擬出多個網站。例如個人網站使用的虛擬主機。
- 基於埠的,不同的埠
- 基於功能變數名稱的,不同功能變數名稱
3、 反向代理,負載均衡。當網站的訪問量達到一定程度後,單台伺服器不能滿足用戶的請求時,需要用多台伺服器集群可以使用nginx做反向代理。並且多台伺服器可以平均分擔負載,不會因為某台伺服器負載高宕機而某台伺服器閑置的情況。
4、小結
通過瞭解Nginx也算是多了一門技術,而且還是挺簡單的,使用也比較方便。重點是可以給系統帶來很大的性能提升。
04【掌握】在Centos7系統下安裝Nginx
前往下載
我是下載了1.16版本的
2,安裝先安裝nginx依賴的包
- gcc
安裝nginx需要先將官網下載的源碼進行編譯,編譯依賴gcc環境,如果沒有gcc環境,需要安裝gcc
yum install gcc-c++
- PCRE
PCRE(Perl Compatible Regular Expressions)是一個Perl庫,包括 perl 相容的正則表達式庫。nginx的http模塊使用pcre來解析正則表達式,所以需要在linux上安裝pcre庫。
yum install -y pcre pcre-devel
- zlib
zlib庫提供了很多種壓縮和解壓縮的方式,nginx使用zlib對http包的內容進行gzip,所以需要在linux上安裝zlib庫。
yum install -y zlib zlib-devel
- openssl
OpenSSL 是一個強大的安全套接字層密碼庫,囊括主要的密碼演算法、常用的密鑰和證書封裝管理功能及SSL協議,並提供豐富的應用程式供測試或其它目的使用。
nginx不僅支持http協議,還支持https(即在ssl協議上傳輸http),所以需要在linux安裝openssl庫。
yum install -y openssl openssl-devel
4,解壓拷貝
把解壓nginx-1.16.1.tar.gz包
tar -zxvf nginx-1.16.1.tar.gz
修改文件夾的名字
mv nginx-1.16.1 nginx
把nginx拷貝到/usr/local/src裡面
cp -r nginx /usr/local/src
5,安裝
進入nginx的目錄
cd /usr/local/src/nginx
創建nginx的安裝目錄
mkdir /usr/nginx
運行configure
./configure --prefix=/usr/nginx (指定安裝目錄編譯)
./configure --prefix=/usr/nginx --with-http_stub_status_module --with-http_ssl_module --with-http_gzip_static_module
make編譯
cd /usr/local/src/nginx
make
make install編譯安裝
cd /usr/local/src/nginx
make install
6, Nginx的目錄說明
conf 配置目錄
html靜態文件[cdn加速]
logs日誌目錄
sbin執行文件
7, Nginx的啟動、停止
啟動
cd /usr/nginx/sbin
./nginx
停止
./nginx -s stop
刷新[當用戶修改了conf/nginx.conf]
./nginx -s reload
05【掌握】反向代理+負載均衡
1.1.正向代理
拿借錢打個比方,A想向C借錢,但是C不認識A所以不借給他,然後A就通過B向C借錢,B借到錢之後再轉交給A,在這個過程中B就扮演了一個正向代理的角色,這個過程中,真正借錢的人是誰,C是不知道的~
我們常說的代理也就是指正向代理,正向代理的過程,它隱藏了真實的請求客戶端,服務端不知道真實的客戶端是誰,客戶端請求的服務都被代理伺服器代替來請求,科學上罔 xxxxxx 扮演的就是典型的正向代理角色。
比如我想訪問www.google.com,要想翻越這堵牆,你可以在國外用xxxxxx來搭建一臺代理伺服器,代理幫我們請求www.google.com,代理再把請求響應結果再返回給我。
1.2.反向代理
還用借錢的例子,A想向C借錢,然後C借給他了,但是實際上這個錢可能C向B借的至於錢到底是誰的,A是不知道的
這裡的C扮演著一個反向代理的角色,客戶不知道真正提供服務的人是誰。
反向代理隱藏了真實的服務端,當我們訪問www.baidu.com的時候,背後可能有成千上萬台伺服器為我們服務,但具體是哪一臺,你不知道,也不需要知道,你只需要知道反向代理伺服器是誰就好了。www.baidu.com就是我們的反向代理伺服器,反向代理伺服器會幫我們把請求轉發到提供真實服務的伺服器那裡去。Nginx就是性能非常好的反向代理伺服器,它可以用來做負載均衡。
2,負載均衡
網站的訪問量越來越大,伺服器的服務模式也得進行相應的升級,比如分離出資料庫伺服器、分離出圖片作為單獨服務,這些是簡單的數據的負載均衡,將壓力分散到不同的機器上。有時候來自web前端的壓力,也能讓人十分頭痛。怎樣將同一個功能變數名稱的訪問分散到兩台或更多的機器上呢?這其實就是另一種負載均衡了,nginx自身就可以做到,只需要做個簡單的配置就行。
nginx不單可以作為強大的web伺服器,也可以作為一個反向代理伺服器,而且nginx還可以按照調度規則實現動態、靜態頁面的分離,可以按照輪詢、ip哈希、URL哈希、權重等多種方式對後端伺服器做負載均衡,同時還支持後端伺服器的健康檢查。
Nginx負載均衡一些基礎知識:
nginx 的 upstream目前支持 4 種方式的分配
1)、輪詢(預設)
每個請求按時間順序逐一分配到不同的後端伺服器,如果後端伺服器down掉,能自動剔除。
2)、weight
指定輪詢幾率,weight和訪問比率成正比,用於後端伺服器性能不均的情況。
2)、ip_hash
每個請求按訪問ip的hash結果分配,這樣每個訪客固定訪問一個後端伺服器,可以解決session的問題。
3)、fair(第三方)
按後端伺服器的響應時間來分配請求,響應時間短的優先分配。
4)、url_hash(第三方)
你的壓力來源於無法自律,只是假裝努力,現狀跟不上內心欲望,所以你焦慮又恐慌。——楊不易