軟體架構-nginx詳解上
今天說說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加/,表示絕對根路徑;如果沒有/,表示相對路徑,把匹配的路徑部分也給代理走
動靜分離方案
一般動靜分離兩種方式
- 靜態檔案放入nginx
- 靜態檔案放入指定的伺服器,透過請求地址來區別跳轉到那個伺服器。
- 靜態檔案放入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/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 乾貨:軟體架構詳解架構
- 乾貨:軟體架構分析詳解架構
- 軟體架構與架構師架構
- 軟體架構1.什麼是軟體架構架構
- 【DATAGUARD】Oracle Dataguard體系架構詳解Oracle架構
- Oracle Golden Gate體系架構詳解OracleGo架構
- 架構之:軟體架構漫談架構
- 軟體架構師架構
- 軟體架構設計原則和模式(上):分層架構設計架構模式
- iOS架構詳解iOS架構
- Oracle記憶體詳解之一 整體架構Oracle記憶體架構
- 軟體架構模式之微服務架構架構模式微服務
- 軟體架構風格——規則架構架構
- 大型網站架構系列:負載均衡詳解(上)網站架構負載
- Tungsten Fabric架構解析丨詳解vRouter體系結構架構VR
- 軟體架構簡介架構
- 軟體架構入門架構
- 軟體架構設計架構
- 軟體構架師之路
- 軟體架構與敏捷架構敏捷
- kafka核心架構詳解Kafka架構
- TDengine 3.0 架構詳解架構
- Chromium VIZ架構詳解架構
- Angular 4.0 架構詳解Angular架構
- Jenkins架構詳解Jenkins架構
- RabbitMQ架構詳解(7大架構原理模型圖解)MQ架構模型圖解
- appuploader 上架詳解大全(上)APP
- 『網際網路架構』軟體架構-mybatis體系結構(14)架構MyBatis
- 關於軟體架構和業務架構的思考架構
- 軟體架構指南 - martinfowler架構
- 軟體架構理解和延伸架構
- 轉:軟體架構入門架構
- API與軟體架構-介面API架構
- 關於軟體架構圖架構
- 軟體系統架構有感架構
- 軟體架構風格概括架構
- SpringMVC詳解(二)------詳細架構SpringMVC架構
- Facebook移動架構:Android Flux架構詳解架構AndroidUX