軟體架構-nginx詳解上

suliver發表於2021-09-09

今天說說nginx, 其實有老鐵比較奇怪,nginx不是運維來搞的嗎?確實是的,大部分情況下,公司比較大的話,存在運維的話,這個鍋肯定是運維來做的。但是現在有個趨勢叫devops之前我也說過,開發運維一體化,開發也要懂一定的運維知識。在一些網際網路的創業公司剛開始技術的工種,並不是分的那麼清楚,可能都要會的。環境的搭建,運維,框架搭建,開發都必須拿得下來。
原始碼:github.com/limingios/netFuture/tree/master/nginx

圖片描述

Nginx服務搭建與基礎演示(一)

Nginx

  • 官網

nginx.org/

圖片描述

  • 介紹

Nginx是一個輕量級、高效能、穩定性高、併發性好的HTTP和反向代理伺服器。也是由於其的特性,其應用非常廣。

  • 歷史

由俄羅斯的程式設計師Igor Sysoev所開發,最初供俄國大型的入口網站及搜尋引擎Rambler(俄文:Рамблер)使用。 其特點是佔有記憶體少,併發能力強,事實上nginx的併發能力確實在同型別的網頁伺服器中表現較好.目前中國大陸使用nginx網站使用者有:新浪、網易、 騰訊,另外知名的微網誌Plurk也使用nginx。

  • 理解代理的概念

1.正向代理:某些情況下,代理我們使用者去訪問伺服器,需要使用者手動的設定代理伺服器的ip和埠號。
2.反向代理:是用來代理伺服器的,代理我們要訪問的目標伺服器。代理伺服器接受請求,然後將請求轉發給內部網路的伺服器(叢集化),並將從伺服器上得到的結果返回給客戶端,此時代理伺服器對外就表現為一個伺服器。

  • 根據原始碼配置的機器

圖片描述

系統型別 IP地址 節點角色 CPU Memory Hostname
Centos7 192.168.66.110 nginx 1 2G nginx
Centos7 192.168.66.111 tomcat 1 2G tomcat1
Centos7 192.168.66.112 tomcat 1 2G tomcat2

圖片描述

  • 三臺機器

準備工作

yum -y install make zlib zlib-devel gcc-c++ libtool openssl openssl-devel

圖片描述

圖片描述

圖片描述

  • nginx主機安裝pcre的安裝包(192.168.66.110)

sourceforge.net/projects/pcre/files/pcre/
nginx rewrite依賴於PCRE庫,所以需要在linux系統中編譯安裝PCRE庫

圖片描述

wget 
tar zxvf pcre-8.41.tar.gz
cd image.png
./configure
make && make install
pcre-config --prefix

圖片描述

圖片描述

圖片描述

  • 安裝nginx
cd ..
wget 
tar zxvf nginx-1.13.10.tar.gz
mkdir  nginx
cd nginx-1.13.10
./configure --prefix=/root/nginx --with-http_stub_status_module --with-http_ssl_module --with-pcre=/root/pcre-8.41
make && make install 
cd ~
cd nginx/sbin/
./nginx -v
./nginx -t

圖片描述

圖片描述

  • 啟動nginx
cd ~/nginx/sbin/
./nginx

其實沒有許可權

圖片描述

修改配置檔案

vi ~/nginx/conf/nginx.conf
#修改成user root
#wq儲存
#重新載入nginx新的配置
./sbin/nginx -s reload

圖片描述

圖片描述

圖片描述

  • 111 和112 兩個機器安裝tomcat
java -version
wget 

圖片描述

圖片描述

tar zxvf apache-tomcat-8.5.37.tar.gz 
cd apache-tomcat-8.5.37
cd bin
./startup.sh
curl 127.0.0.1:8080

圖片描述

圖片描述

圖片描述

圖片描述

  • 111 和112 新增一個index.jsp檔案方法檢視
cd /root/apache-tomcat-8.5.37/webapps/ROOT
>index.jsp
vi index.jsp
cat index.jsp

圖片描述

圖片描述

圖片描述

圖片描述

###upstream 與location 模組引數與案例講解(二)

未來軟體其實都是趨於模組化的。拼裝完成。

upstream
  • 官網的介紹

nginx.org/en/docs/

圖片描述

  • upstream例項

nginx.org/en/docs/http/ngx_http_upstream_module.html

圖片描述

  • upstream 引數
引數名稱 描述
service 反向服務地址 加埠
weight 權重
max_fails 失敗多少次 認為主機已掛掉則,踢出,預設是1次,企業一般配置2到3次,但是電商更加重視使用者體驗所以就是1次。前提這個機器供給比較多。
fail_timeout 踢出後重新探測時間
backup 備用服務
max_conns 允許最大連線數
slow_start 當節點恢復,不立即加入

修改66.110 那個nginx配置檔案

vi /root/nginx/conf/nginx.conf
cat /root/nginx/conf/nginx.conf

圖片描述

圖片描述

因為權重相同,所以輪播111 和 112 2個tomcat

圖片描述
圖片描述

*負載均衡演算法
1.ll+weight

預設的負載演算法,其實就是根據權重才分配服務請求。

2.ip_hash

基於Hash 計算 應用場景:保持session 一至性,第一次訪問那臺,一直是同一臺。hash(ip)%3 =index。弊端小區或者學校集中化的地方,他們出去的ip都是一致的,某個節點負載會非常非常的大。成為熱點,有了ip_hash導致weight權重就失效了。

3.url_hash

(第三方)應用場景:靜態資源快取,節約儲存,加快速度

4.least_conn

最少連結

5.least_time

最小的響應時間,計算節點平均響應時間,然後取響應最快的那個,分配更高權重。

6.keeplive

佔用連線數。記憶體消耗比較大,但是響應速度很快,應該保持這socket連線。

  • location
    1.root

後面的配置相當於把瀏覽器中的輸入路徑進行了重指

2.index

在前後端分離的基礎上,指定網站初始頁

3.proxy_set_header

用來重定義發往後端伺服器的請求頭

4.proxy_pass

如果在proxy_pass後面的url加/,表示絕對根路徑;如果沒有/,表示相對路徑,把匹配的路徑部分也給代理走

圖片描述

動靜分離方案

一般動靜分離兩種方式

  1. 靜態檔案放入nginx
  2. 靜態檔案放入指定的伺服器,透過請求地址來區別跳轉到那個伺服器。
  • 靜態檔案放入nginx
#思路:動、靜態的檔案,請求時匹配不同的目錄當訪問gif,jpeg時 直接訪問e:wwwroot;

server {  
  listen       80;  
  server_name  localhost;  

  location / {  
      root   e:wwwroot;  
      index  index.html;  
  }  

  # 所有靜態請求都由nginx處理,存放目錄為html  
  location ~ .(gif|jpg|jpeg|png|bmp|swf|css|js)$ {  
      root    e:wwwroot;  
  }  

  # 所有動態請求都轉發給tomcat處理  
  location ~ .(jsp|do)$ {  
      proxy_pass  ;  
  }  

  error_page   500 502 503 504  /50x.html;  
  location = /50x.html {  
      root   e:wwwroot;  
  }  
}  
  • 靜態伺服器的方式

多個upstream,多個location, location的名稱不一樣。

PS:最後來個通俗的說法,你就是大王,我是你的太監,upstream就是後宮,後宮可以有多個,每個後宮裡面已經分配好了按照胖瘦不同,後宮A全部都是120以上,後宮B全部都100以下,後宮裡面有很多愛妃,到晚上了大王有需求了,告訴太監,太監根據後宮的情況,按照一定的演算法,看看那個愛妃可以進行侍寢,我這個太監就告訴大王,大王就直接去我透過演算法的方式告訴他的愛妃哪裡。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/2370/viewspace-2826698/,如需轉載,請註明出處,否則將追究法律責任。

相關文章