Nginx學習筆記


一、Nginx簡介(相關概念)

  1. 什么是nginx
  • Nginx (engine x) 是一個高性能的HTTP反向代理web服務器,特點是占有內存少,並發能力強,事實上nginx的並發能力在同類型的網頁服務器中表現較好。

  • Nginx專為性能優化而開發,性能是其重要的考量,實現上非常注重效率,能經受高負載的考驗,能支持高達50000個並發連接數

  1. 反向代理

  • 正向代理:在客戶端(瀏覽器)配置代理服務器,通過代理服務器進行互聯網訪問
  • 反向代理:客戶端對代理是無感知的。客戶端發送請求到代理服務器,由代理服務器去選擇目標服務器獲取數據后,再返回給客戶端。此時,對於客戶端來說,反向代理服務器和目標服務器就是一個服務器,暴露的是代理服務器地址,隱藏了真實服務器ip地址

個人理解:"正向代理"是代理客戶端(瀏覽器)的,"反向代理"是代理服務器的

  1. 負載均衡

單個服務器解決不了,我們增加服務器的數量,然后將請求分發到各個服務器上,將原先請求集中到單個服務器上的情況改為將請求分發到多個服務器上,將負載分發到不同的服務器,也就是我們所說的負載均衡。

  1. 動靜分離

為了加快網站的解析速度,可以把動態頁面和靜態頁面由不同的服務器來解析,加快解析速度,降低原來單個服務器的壓力。

二、常用命令

  1. 使用nginx命令,首先要進入/usr/local/nginx/sbin目錄

  2. 查看nginx版本號

  3. 啟動nginx

  4. 關閉nginx

  5. 重新加載nginx

[root@centos sbin]# pwd
/usr/local/nginx/sbin
[root@centos sbin]# ./nginx -v
nginx version: nginx/1.14.2
[root@centos sbin]# ./nginx -s stop
[root@centos sbin]# ps -ef|grep nginx
root       2397   2266  0 17:49 pts/0    00:00:00 grep nginx
[root@centos sbin]# ./nginx
[root@centos sbin]# ps -ef|grep nginx
root       2399      1  0 17:49 ?        00:00:00 nginx: master process ./nginx
nobody     2400   2399  0 17:49 ?        00:00:00 nginx: worker process
root       2402   2266  0 17:49 pts/0    00:00:00 grep nginx
[root@centos sbin]# ./nginx -s reload

三、配置文件

  1. 路徑:/usr/local/nginx/conf/nginx.conf

  2. 組成:

    1. 全局塊:

      從配置文件開始,到events塊之間的內容,主要設置一些影響nginx服務器整體運行的配置指令

      例如:worker_processes 1; 值越大,可以支持的並發處理量也越多

    2. events塊:

      主要配置影響Nginx服務器與用戶的網絡連接

      例如:worker_connections 1024; 支持的最大連接數

    3. http塊

      配置最頻繁

      包括http全局塊、server塊

四、Nginx安裝

CentOS6.8安裝Nginx

五、Nginx配置Demo

以下Demo的運行環境:nginx1.14.2版本,安裝在虛擬機centos6.8上面。tomcat安裝在win10系統上。

Nginx反向代理Demo

Nginx負載均衡Demo

Nginx動靜分離Demo

六、Nginx原理

1個master:管理、監控

1個或多個worker:執行

客戶端請求master時,worker來爭搶請求

問題1:一個master和多個worker的好處

  1. 可以使用nginx -s reload熱部署(reload時,沒任務的workerreload,有任務的繼續做任務,做完了再reload)
  2. 每個worker是個獨立的進程,不需要加鎖,效率高
  3. 多個獨立的worker,如果其中的一個worker掛了,其他worker不受影響,服務不會中斷

問題2:設置多少個worker合適

  底層采用io多路復用機制,每個worker都是一個獨立的進程,但每個進程里只有一個主線程,通過異步非阻塞的方式來處理請求,即使是上萬個請求也不在話下,每個worker的線程可以把一個cpu的性能發揮到極致,所以worker數和服務器的cup數相等時最為適宜。設少了浪費cpu,多了造成cpu頻繁切換上下文帶來的損耗。

問題3:發送一個請求,占用worker幾個連接數?

  2個或4個。

  訪問靜態資源時,nginx找到靜態資源服務器,把資源直接返回,占用2個連接;

  訪問動態資源,nginx訪問tomcat,就占用4個連接。

問題4:nginx有1個master,6個worker,每個worker支持最大連接數是1024,支持最大並發數是多少?

  若全都訪問靜態資源,最大並發=worker_connections*worker_process/2 (1024*6/2)

  若全都訪問動態資源,最大並發=worker_connections*worker_process/4 (1024*6/4)


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM