Nginx教程(一)-全面認知

什麼是 nginx

nginx 是一款高性能的 http 服務器,反向代理服務器,電子郵件(IMAP/POP3)代理服務器;html

它的特色就是高性能,佔用內存少,支持高併發,運行穩定;node

官方測試 可支持 5萬 的併發量;nginx

 

nginx 的用途

nginx 能夠用於多種場景,最經常使用的是反向代理,其餘場景也須要反向代理實現web

http 服務器:nginx 是一個 http 服務器,能夠獨立提供 http 服務,能夠作 web 靜態資源服務器數據庫

正向代理:客戶端代理apache

反向代理:反向代理是它最重要,也是最經常使用的一個場景windows

負載均衡:把多個請求近似平均的分配到多個服務器上tomcat

  // 也就是說負載均衡須要多個服務器       【一個服務器多個端口應該也行,我沒試過,使用時請自行測試】服務器

  // 負載均衡的本質其實也是反向代理併發

動靜分離:把 web 靜態資源和動態資源放在不一樣的服務器上,而後加上反向代理 

配置高可用集羣:組件分佈式 nginx,防止 單 nginx 宕機致使 web 服務掛掉

 

功能框架

常規 web 框架

咱們先看下常規 web 服務的 請求響應 過程,加入後臺須要操做數據庫,以下圖

開發環境的 web 服務器是單線程的,多個請求必須排隊

 

反向代理

nginx 做爲反向代理,隱藏真實 IP,在 windows 上配置 域名-ip 解析器,使用域名經過 代理(nginx) 訪問 真實服務(tomcat) 

 

負載均衡

把 多個 request 平均分配到 多個 服務器上,避免單服務器的排隊,提升併發

 

動靜分離

把 web 動態資源和靜態資源 分開存儲

 

 

安裝

nginx 安裝有多種方式,詳細過程 參照 官方安裝文檔,這裏只簡單介紹 tar 包安裝。

nginx 須要安裝依賴

//一鍵安裝四個依賴
yum -y install gcc zlib zlib-devel pcre-devel openssl openssl-devel

下載 tar 包並解壓,下載地址 官網下載,進入目錄,執行以下命令

./configure
make
make install

 

解壓後以下圖

 

簡單配置

nginx 默認 80 端口,這個端口通常被 apache 佔用,默認 IP通常是 localhost,因爲咱們常常會搞一些其餘事情把 hostname 改掉,因此這裏先換成 IP

 server {
        listen       8765;
        server_name  localhost;

啓動並查看版本

[root@node conf]# /usr/local/nginx/sbin/nginx 
[root@node conf]# /usr/local/nginx/sbin/nginx -v
nginx version: nginx/1.16.1

 /usr/local/nginx/sbin 就是上圖那個解壓後的 sbin

能夠看到安裝成功

 

web 端可訪問

經常使用命令

nginx -s stop       快速關閉Nginx,可能不保存相關信息,並迅速終止web服務。
nginx -s quit       平穩關閉Nginx,保存相關信息,有安排的結束web服務。
nginx -s reload     因改變了Nginx相關配置,須要從新加載配置而重載。
nginx -s reopen     從新打開日誌文件。
nginx -c filename   爲 Nginx 指定一個配置文件,來代替缺省的。
nginx -t            不運行,而僅僅測試配置文件。nginx 將檢查配置文件的語法的正確性,並嘗試打開配置文件中所引用到的文件。
nginx -v            顯示 nginx 的版本。
nginx -V            顯示 nginx 的版本,編譯器版本和配置參數。
nginx         啓動

 

詳細配置

配置文件解讀

     1  worker_processes  1;         #worker進程的數量

2 events { #事件區塊開始 3 worker_connections 1024; #每一個work進程支持的最大鏈接數 4 } #事件區塊結束

5 http { #http區塊開始 6 include mime.types; #nginx支持的媒體類型庫文件包含 7 default_type application/octet-stream; #默認的媒體類型 8 sendfile on; #開啓高效傳輸模式 9 keepalive_timeout 65; #鏈接超時

10 server { #第一個server區塊開始,表示一個獨立的虛擬主機站點 11 listen 80; #提供服務的端口,默認80 12 server_name localhost; #提供服務的域名主機名

13 location / { #第一個location區塊開始 14 root html; #站點的根目錄,相對於nginx安裝目錄 15 index index.html index.htm; 16 } 17 error_page 500 502 503 504 /50x.html; 18 location = /50x.html { 19 root html; 20 } 21 } 22 }

 

反向代理配置

server {
    listen       80;                                                         
    server_name  localhost;                                               
    client_max_body_size 1024M;
 
    location / {
        proxy_pass http://localhost:8080;
        proxy_set_header Host $host:$server_port;
    }
}

上面是 反向代理的 IP:PORT,下面是被代理的 服務, / 對應 url, 當訪問 localhost:80 時,至關於訪問 localhost:8080

 

負載均衡配置

負載均衡須要分配 request 到不一樣服務器,那如何分配呢?有幾種策略 

RR 策略

nginx 的默認策略,按時間順序把請求逐個分配到不一樣服務器,若是某個服務器掛掉,會自動剔除。

upstream test {
    server localhost:8080;
    server localhost:8081;
}
server {
    listen       80;                                                         
    server_name  localhost;                                               
    client_max_body_size 1024M;
 
    location / {
        proxy_pass http://test;
        proxy_set_header Host $host:$server_port;
    }
}

upstream  表明多個服務器,假若有個服務器掛掉了,nginx 會自動判斷,不給他分配 request,因此不影響 web 的使用。

 

注意 upstream 後面的 test 與 http 後面的要保持一致

 

權重策略

給每臺服務器分配權重,權重大的越容易被分配 request,性能好的機器天然權重大,這種策略就是用於 服務器性能 差別較大的場景。

upstream test {
    server localhost:8080 weight=9;
    server localhost:8081 weight=1;
}
server {
    listen       80;                                                         
    server_name  localhost;                                               
    client_max_body_size 1024M;
 
    location / {
        proxy_pass http://test;
        proxy_set_header Host $host:$server_port;
    }
}

好比有 10 個 request,可能 8080 處理 9 個,8081 處理 1 個

 

還有 ip_hash 策略,包括上面兩種是 nginx 自帶的策略;

還有第三方策略 fair 策略、url_hash 策略,具體配置我就不寫了,大同小異,參考 各類策略的詳細配置

 

 

 

參考資料:

http://www.nginx.cn/doc/index.html  Nginx中文文檔

https://blog.csdn.net/weixin_41835612/article/details/83738188  有具體配置

https://www.cnblogs.com/xiaohuochai/p/9093819.html  有具體配置

https://www.jianshu.com/p/15e7f2adb463  有具體配置

https://www.jianshu.com/p/15e7f2adb463   有具體配置

https://www.cnblogs.com/ysocean/p/9392908.html  理論挺詳細

https://blog.csdn.net/duguyuyun12345/article/details/83471821  Nginx使用教程

相關文章
相關標籤/搜索