nginx基礎之路

一.nginx概念

在學習nginx之前,帶著這幾個疑惑去學習
1.nginx是什么,他可以做什么?
2.反向代理?
3.負載均衡?
4.動靜分離?

1.nginx是一個輕量級的http,web服務器
優點:高性能,并發能力強,可做反向代理。
附:同時也提供了IMAP/POP3/SMTP服務
2.什么是反向代理?
ok 舉個例子:
先看下正向代理
eg1.如果國內訪問谷歌,我們不可以直接訪問,需要先請求代理服務器,再由代理服務器,將請求去轉發到谷歌,最后將結果返回。


image.png

反向代理
eg2.我們去訪問www.baidu.com 我們只知道訪問了百度,得到了想要資源,但是,到底是哪臺服務器給我們的資源我們并不知道。
而在百度內部,假設有A,B,C三臺服務器,我們訪問了百度(其實是訪問了反向代理服務器),他會去根據一些算法,去給我們找到真正有資源的A,B,C服務器,最后由三臺中的一臺,將資源給反向代理服務器,再由反向代理服務器,將資源給我們。

image.png

區別:
正向代理,對server端(谷歌)透明,Server端只知道是代理服務器,訪問了他,是否讓他知道用戶信息由代理服務器決定。
反向代理,對client端透明,client端只知道請求了百度(其實是反向代理服務器)拿到了想要的資源,而具體是百度內部,ABC服務器中的誰給他的,他不知道。

個人理解:客戶端為正,服務端為反,重點在服務端內部進行一系列操作(反為重點),所以被稱為反向代理,反之不是反向代理,另一種就是正向代理了。
正對服務端透明 客戶端配置
反對客戶端透明 服務端配置 客戶端無感知

3.負載均衡
最初我們早期BS架構
多個客戶端對應一個服務器,在請求不多時,服務器完全夠用。

image.png

后隨著時代的發展,客戶端請求越來越多,單一的服務器很難滿足用戶需求,抗住大量并發。
所以 先將請求先集合到一臺服務器,再分發給其他服務器完成。------負載均衡
image.png

4.動靜分離
動態靜態資源在一起


image.png

動靜態資源分開


image.png

將動態請求與靜態請求分開
可理解為
tomcat解析動態資源
nginx解析靜態資源
動靜分離優點:將動靜態資源分開,讓動靜服務器解析自己的資源,加快網頁解析,緩解單個服務器壓力。
ps:不是單純的動靜態頁面分開

二.nginx安裝,配置,及命令

  1. 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可省略
image.png

OK 至此nginx 安裝完成

PS windows訪問可能要注意
將80端口設置可訪問


image.png

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文件

image.png

nginx配置文件組成
(1).全局塊
nginx全局配置,影響nginx整體運行

eg.
image.png

nginx用來處理服務器的工作進程數

(2)events塊
nginx服務器允許用戶網絡連接數
下面表示1024個


image.png

(3)http塊
nginx配置最多的地方,代理,緩存,日志等就是在此處配置的。
里面又分http全局塊,server塊
http全局塊:
日志自定義,超時時間,等等
server塊:一個server相當于一個虛擬主機,可以有多個虛擬機
里面還分
server全局塊 監聽端口,主機ip地址。
location塊 請求路徑/有關。
簡單的反向代理流程:


image.png

在vi /etc/hosts 加上:
image.png

nginx中配置
image.png

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

image.png

測試一下:訪問http://127.0.0.1:8080/8080html/a.html
nginx中配置
image.png

ok配置完成
輸入
http://168.56.43.11:9999/8080html/a.html ok
location配置規則
location配置規則

2.負載均衡
輸入172.23.24.XX/html/a.html 負載均衡效果,被8080,8081端口分攤
先啟動兩個tomcat webapps目錄下均建立html/a.html
nginx配置中

image.png

默認采用輪詢策略
補充:weight 權重策略 默認個為1
在server 172.23.24.xx 后面加 weight=5 越大表示越先分配
image.png

ip_hash策略
給A用戶分配a服務器,B用戶分配b服務器,只要服務器不宕機固定訪問a,b
可以解決session的緩存的問題
image.png

fair策略
根據服務器響應時間,越短就越先分配
image.png

3.動靜分離

動靜分離

配合瀏覽器 expire緩存使用,在特地時間內去訪問靜態不容易變的資源,去比對服務器中,改文件的更改時間,如果在時間內,就不用去請求服務器。
要求:
當請求192.168.1.X www/a.html 訪問的是本地/opt/test/www/a/html
當請求192.168.1.X image/ 訪問的是本地/opt/test/iamge/
配置如圖
autoindex on 參數是幫你把改目錄下文件列出來
image.png

expires 3d 在location加入 表示3天內

4.高可用集群

image.png

之前nginx流程如圖所示,如果這一臺nginx宕機了怎么辦
這里有個備份nginx概念,主nginx宕機,有備份nginx來處理。怎么知道是否宕機?借助于keepalived檢測
至于客戶端怎么知道是訪問主nginx還是備nginx?有個虛擬ip的概念,對外暴露的只是虛擬ip

高可用

具體配置看此視頻

四.nginx原理

nginx實際分為master進程和多個work進程,master得到請求將任務分給work,由work執行


image.png

而work是通過爭搶機制去拿到任務


image.png

多個work的好處
nginx -s reload 是熱部署,這樣只有現在有任務的work不能停止,而其他work可以停止去讀取配置文件。
各個work都是獨立的,即使有個work出現錯誤,也不會影響其他work工作
每個work是個獨立的進程,而且每個進程里面只有一個獨立的線程,并且采用io多路復用的方式,這樣的好處就是可以處理多個task不會出現堵塞
如何設置work?
work數與服務器cpu數相等
多了會造成線程上線文切換的開支
少了會造成浪費

參考:
反向代理,正向代理區別
nginx
nginx安裝

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。