一.nginx概念
在學習nginx之前,帶著這幾個疑惑去學習
1.nginx是什么,他可以做什么?
2.反向代理?
3.負載均衡?
4.動靜分離?
1.nginx是一個輕量級的http,web服務器
優點:高性能,并發能力強,可做反向代理。
附:同時也提供了IMAP/POP3/SMTP服務
2.什么是反向代理?
ok 舉個例子:
先看下正向代理
eg1.如果國內訪問谷歌,我們不可以直接訪問,需要先請求代理服務器,再由代理服務器,將請求去轉發到谷歌,最后將結果返回。
反向代理
eg2.我們去訪問www.baidu.com 我們只知道訪問了百度,得到了想要資源,但是,到底是哪臺服務器給我們的資源我們并不知道。
而在百度內部,假設有A,B,C三臺服務器,我們訪問了百度(其實是訪問了反向代理服務器),他會去根據一些算法,去給我們找到真正有資源的A,B,C服務器,最后由三臺中的一臺,將資源給反向代理服務器,再由反向代理服務器,將資源給我們。
區別:
正向代理,對server端(谷歌)透明,Server端只知道是代理服務器,訪問了他,是否讓他知道用戶信息由代理服務器決定。
反向代理,對client端透明,client端只知道請求了百度(其實是反向代理服務器)拿到了想要的資源,而具體是百度內部,ABC服務器中的誰給他的,他不知道。
個人理解:客戶端為正,服務端為反,重點在服務端內部進行一系列操作(反為重點),所以被稱為反向代理,反之不是反向代理,另一種就是正向代理了。
正對服務端透明 客戶端配置
反對客戶端透明 服務端配置 客戶端無感知
3.負載均衡
最初我們早期BS架構
多個客戶端對應一個服務器,在請求不多時,服務器完全夠用。
后隨著時代的發展,客戶端請求越來越多,單一的服務器很難滿足用戶需求,抗住大量并發。
所以 先將請求先集合到一臺服務器,再分發給其他服務器完成。------負載均衡
4.動靜分離
動態靜態資源在一起
動靜態資源分開
將動態請求與靜態請求分開
可理解為
tomcat解析動態資源
nginx解析靜態資源
動靜分離優點:將動靜態資源分開,讓動靜服務器解析自己的資源,加快網頁解析,緩解單個服務器壓力。
ps:不是單純的動靜態頁面分開
二.nginx安裝,配置,及命令
- Nginx編譯相關依賴庫的安裝
安裝gcc g++的依賴庫
sudo apt-get install build-essential
sudo apt-get install libtool
安裝pcre依賴庫(http://www.pcre.org/)
sudo apt-get install libpcre3 libpcre3-dev
安裝zlib依賴庫(http://www.zlib.net)
sudo apt-get install zlib1g-dev
安裝SSL依賴庫
sudo apt-get install openssl
官網下載tar包http://nginx.org/en/download.html
下載下來之后:
tar -zxvf nginx-1.18.0.tar.gz
cd nginx-1.18.0/
./configure
make #編譯
make install
驗證有沒有成功
cd /usr/local
ls #發現有nginx文件夾
cd nginx
cd sbin
./nginx #如果權限不夠 加上sudo
查看應用是否啟動成功
ps -ef |grep nginx
cd /usr/local/nginx/conf
more nginx.conf
image.png
默認端口號是80
瀏覽器訪問http://localhost:80 #80可省略
OK 至此nginx 安裝完成
PS windows訪問可能要注意
將80端口設置可訪問
2.nginx常用命令
前提要進入到 cd /usr/local/nginx/sbin 下
查看版本
./nginx -v
關閉ngnix
nginx -s stop
啟動ngnix
./nginx
./nginx -s 參數
stop —快速關機
quit —正常關機
reload —重新加載配置文件
reopen —重新打開日志文件
3.解讀配置文件
3.1全局塊
3.2event塊
3.3http塊
三.nginx配置實例
1.反向代理
ok,要配置第一步我們先要找到配置文件
/usr/local/nginx 下的conf文件
nginx配置文件組成
(1).全局塊
nginx全局配置,影響nginx整體運行
nginx用來處理服務器的工作進程數
(2)events塊
nginx服務器允許用戶網絡連接數
下面表示1024個
(3)http塊
nginx配置最多的地方,代理,緩存,日志等就是在此處配置的。
里面又分http全局塊,server塊
http全局塊:
日志自定義,超時時間,等等
server塊:一個server相當于一個虛擬主機,可以有多個虛擬機
里面還分
server全局塊 監聽端口,主機ip地址。
location塊 請求路徑/有關。
簡單的反向代理流程:
在vi /etc/hosts 加上:
nginx中配置
ok訪問 www.123.com 發現訪問的是 本地8080端口的tomcat
反向代理實例2:
訪問168.56.43.11:9999/8080html 進入到127.0.0.1:8080
訪問168.56.43:11:9999/8081html 進入到127.0.0.1:8081
首先啟動兩個tomcat實例,一個端口為8080,一個為8081
在tomcat目錄中的webapps,創建一個文件加8080html再創建一個文件a.html
測試一下:訪問http://127.0.0.1:8080/8080html/a.html
nginx中配置
ok配置完成
輸入
http://168.56.43.11:9999/8080html/a.html ok
location配置規則
2.負載均衡
輸入172.23.24.XX/html/a.html 負載均衡效果,被8080,8081端口分攤
先啟動兩個tomcat webapps目錄下均建立html/a.html
nginx配置中
默認采用輪詢策略
補充:weight 權重策略 默認個為1
在server 172.23.24.xx 后面加 weight=5 越大表示越先分配
ip_hash策略
給A用戶分配a服務器,B用戶分配b服務器,只要服務器不宕機固定訪問a,b
可以解決session的緩存的問題
fair策略
根據服務器響應時間,越短就越先分配
3.動靜分離
配合瀏覽器 expire緩存使用,在特地時間內去訪問靜態不容易變的資源,去比對服務器中,改文件的更改時間,如果在時間內,就不用去請求服務器。
要求:
當請求192.168.1.X www/a.html 訪問的是本地/opt/test/www/a/html
當請求192.168.1.X image/ 訪問的是本地/opt/test/iamge/
配置如圖
autoindex on 參數是幫你把改目錄下文件列出來
expires 3d 在location加入 表示3天內
4.高可用集群
之前nginx流程如圖所示,如果這一臺nginx宕機了怎么辦
這里有個備份nginx概念,主nginx宕機,有備份nginx來處理。怎么知道是否宕機?借助于keepalived檢測
至于客戶端怎么知道是訪問主nginx還是備nginx?有個虛擬ip的概念,對外暴露的只是虛擬ip
具體配置看此視頻
四.nginx原理
nginx實際分為master進程和多個work進程,master得到請求將任務分給work,由work執行
而work是通過爭搶機制去拿到任務
多個work的好處
nginx -s reload 是熱部署,這樣只有現在有任務的work不能停止,而其他work可以停止去讀取配置文件。
各個work都是獨立的,即使有個work出現錯誤,也不會影響其他work工作
每個work是個獨立的進程,而且每個進程里面只有一個獨立的線程,并且采用io多路復用的方式,這樣的好處就是可以處理多個task不會出現堵塞
如何設置work?
work數與服務器cpu數相等
多了會造成線程上線文切換的開支
少了會造成浪費
參考:
反向代理,正向代理區別
nginx
nginx安裝