nginx優勢以及應用場景,編譯安裝和nginx

一. Nginx是什么?

1. Nginx概述
  • 高性能、輕量級Web服務軟件
  • 系統資源消耗低
  • 對HTTP并發連接的處理能力高
  • 單臺物理服務器可支持30,000~50,000個并發請求
  • Nginx(發音同 “engine x”)是一個高性能的反向代理和Web服務器軟件,由俄羅斯人Igor Sysoev開發。第一個版本發布于2004年,源代碼基于雙條款BSD許可證發布。Nginx在互聯網企業中因其資源消耗低、運行穩定且高性能的并發處理能力而廣泛應用。
  • Nginx是互聯網上最受歡迎的開源Web服務器之一,不僅提供了一整套開發和交付的應用技術,還是應用交付領域的開源領導者。
  • 2019年3月,F5宣布收購Nginx,將其作為F5的一部分。F5表示,將加強對開源和Nginx應用平臺的投資,致力于Nginx開源技術、開發人員和社區的發展。
2. Nginx模塊與作用
  • main模塊:全局配置模塊,配置運行nginx服務器的用戶(組)、worker_process數(進程)、nginx進程PID存放路徑、錯誤日志存放路徑、配置文件的引入等。
  • stream服務模塊:實現反向代理功能,包括TCP協議代理。
  • 郵件服務模塊:支持Nginx的郵件服務,對POP3、IMAP和SMTP協議的支持。
  • 第三方模塊:二次開發擴展Nginx服務器應用,完成開發者自定義功能(如Json支持、Lua支持)。
  • events模塊:影響nginx服務器與用戶的網絡連接。
    events {worker_connections 65536;use epoll;accept_mutex on;multi_accept on;
    }
    
  • http模塊:跟web服務相關,擴展標準的HTTP功能,處理一些特殊服務,包含自定義服務日志、sendfile傳輸文件、連接超時時間、單連接請求數上限、Flash多媒體傳輸、解析GeoIP請求、網絡傳輸壓縮、安全協議SSL支持等。
  • location模塊:uri網址定位。
  • server模塊:服務模塊,配置80端口監聽、虛擬主機、DNS域名解析等。
  • auth_basic模塊:對網頁設置用戶名密碼。
  • gzip模塊:壓縮。
  • proxy模塊:設置后端IP地址、端口號及http和加密的https。
  • ssl模塊:https加密。
3. Nginx三大作用:反向代理、負載均衡、動靜分離
  • 反向代理:在服務端配置,客戶端訪問服務器A,服務器A為代理服務器,將客戶請求轉發到服務器B。
    • 作用:緩存服務器響應,減少服務器壓力;負載均衡,將用戶請求分配給多個服務器;訪問控制。
  • 正向代理:在客戶端配置,代理服務器代理客戶端與目標服務器進行交互。
    • 作用:提高訪問速度;隱藏客戶端真實IP地址。
  • 負載均衡:分攤到多個操作單元(如Web服務器、FTP服務器等)上進行執行,從而共同完成工作任務。
    • Nginx七層負載均衡調度算法
      1. 輪詢(默認):每個請求按時間順序逐一分配到不同的后端服務器。
      upstream backendserver {server 192.168.10.14:80 max_fails=2 fail_timeout=10s;server 192.168.10.15:80 max_fails=2 fail_timeout=10s;
      }
      
      1. 加權輪詢:指定輪詢幾率,weight值和訪問比例成正比。
      upstream backendserver {server 192.168.10.14:80 weight=5 max_fails=2 fail_timeout=10s;server 192.168.10.15:80 weight=10 max_fails=2 fail_timeout=10s;
      }
      
      1. IP哈希:每個請求按訪問IP的hash結果分配,解決session會話保持問題。
      upstream backendserver {ip_hash;server 192.168.10.14:80 max_fails=2 fail_timeout=10s;server 192.168.10.15:80 max_fails=2 fail_timeout=10s;
      }
      
      1. 最少連接數:按Nginx反向代理與后端服務器之間的連接數分配,連接數最少的優先分配。
      upstream backendserver {least_conn;server 192.168.0.14:80 max_fails=2 fail_timeout=10s;server 192.168.0.15:80 max_fails=2 fail_timeout=10s;
      }
      
      1. 響應時間(需編譯安裝第三方模塊):按后端服務器的響應時間分配請求,響應時間短的優先分配。
      upstream backendserver {fair;server 192.168.10.14:80 max_fails=2 fail_timeout=10s;server 192.168.10.15:80 max_fails=2 fail_timeout=10s;
      }
      
      1. URL哈希(需編譯安裝第三方模塊):按訪問URL的hash結果分配請求,使同一個URL訪問到同一個后端服務器。
      upstream backendserver {server 192.168.10.14:80 max_fails=2 fail_timeout=10s;server 192.168.10.15:80 max_fails=2 fail_timeout=10s;hash $request_uri;
      }
      
  • 動靜分離:通過代理方式,在server{}段中加入帶正則匹配的location來指定匹配項。靜態頁面交給Nginx處理,動態頁面交給PHP-FPM模塊或Apache處理。

二. Nginx和Apache的差異

Apache
  • 同步多進程模型:一個連接對應一個進程,具有高穩定性。
  • 優勢
    1. rewrite功能強大(實現URL跳轉)。
    2. 模塊多,基本可找到所需的模塊。
    3. 穩定性高,bug少。
    4. PHP支持簡單。
    5. 處理動態請求更有優勢。
Nginx
  • 異步非阻塞模型:多個連接(萬級別)對應一個進程,具有高性能。
  • 優勢
    1. 輕量級,采用C編寫,占用更少的內存與資源。
    2. 抗并發/高并發,負載能力高。
    3. 處理靜態文件性能比Apache高三倍以上。
    4. 設計高度模塊化,編寫模塊簡單。
    5. 配置簡潔,正則配置更簡單,可用-t測試配置。
    6. 作為負載均衡服務器,支持七層負載均衡,有效防止DDoS攻擊。
    7. 可作為反向代理服務器和郵件代理服務器使用。
    8. 支持熱部署,在線升級。

通過這些對比,可以根據具體需求選擇使用Nginx或Apache。

三、Nginx的應用場景

  1. Web服務器

    • Nginx可以作為一個獨立的HTTP服務器,提供HTTP服務。它能夠高效地處理靜態資源(如HTML、CSS、JavaScript和圖片文件)的請求,成為一個高性能的靜態服務器。
  2. 虛擬主機

    • Nginx可以在一臺物理服務器上配置多個虛擬主機,分別對應不同的網站。這可以通過不同的IP地址、端口號或域名來實現。這種功能對托管多個網站非常有用,節省了硬件成本。
  3. 反向代理服務器與負載均衡

    • 當網站的訪問量增大時,單臺服務器可能無法滿足所有用戶的請求。Nginx可以作為反向代理服務器,將請求分發到后端的多臺服務器,實現負載均衡。通過這種方式,可以確保每臺服務器的負載均衡,不會有某臺服務器過載或閑置。Nginx還支持多種負載均衡策略,如輪詢、IP hash等。
  4. 安全管理

    • Nginx可以配置安全管理功能,例如搭建API接口網關。通過這種方式,Nginx能夠對每個接口服務進行攔截和安全檢查,防止惡意攻擊和未授權訪問,提高系統的安全性。
  5. 緩存服務器

    • Nginx可以作為緩存服務器,將經常訪問的資源緩存到內存中,加快資源的訪問速度,減少服務器的壓力,提高整體性能。

四、Nginx為什么能支持高并發

Nginx支持高并發的核心原因在于其采用了異步非阻塞的架構,利用了Linux的epoll機制,并且可以進行配置細節優化。

  • 異步非阻塞架構
    • 如果每個請求都由一個獨立的進程或線程處理,那么系統資源消耗會非常高,特別是在等待網絡傳輸時,這種方式非常低效。而Nginx采用異步非阻塞的運行方式,可以有效地避免這一問題。
    • Nginx有一個主調度進程和多個工作進程,每當有請求到達時,主進程會將請求分配給工作進程進行處理。由于大部分請求處理時間都耗費在網絡傳輸上,實際在服務器上占用的時間并不多,Nginx通過少量進程就能高效處理大量并發請求。

五、為什么Nginx不使用多線程

Nginx采用單線程來異步非阻塞處理請求,并且管理員可以配置Nginx主進程的工作進程數量。主要原因包括:

  • 資源節約

    • Nginx不會為每個請求單獨分配CPU和內存資源,這節省了大量的系統資源。
  • 減少CPU上下文切換

    • 使用單線程避免了頻繁的上下文切換,提高了系統效率。

這種設計使得Nginx能夠支持更高的并發量,處理更多的請求。

六、Nginx的兩種進程分別有什么作用

Nginx主要有兩種進程:master進程和worker進程。

  1. master進程

    • 負責管理worker進程,讀取和加載Nginx的配置文件,控制Nginx的啟動、重啟和關閉等操作。
  2. worker進程

    • 處理實際的連接請求。每個worker進程都可以處理多個連接,并通過異步非阻塞的方式進行高效處理。

?七、編譯安裝nginx

cd /opt/
tar zxvf nginx-1.22.0.tar.gz -C /opt/
cd nginx-1.22.0/
./configure --prefix=/usr/local/nginx --user=nginx --group=nginx --with-http_stub_status_module
make -j16&& make install
bash setup-local-yum-repo.sh?
yum -y install gcc pcre-devel openssl-devel zlib-devel openssl ?openssl-devel
make -j16&& make install
make -j16 && make install
ls
rm setup-local-yum-repo.sh?
cd nginx-1.22.0/./configure --prefix=/usr/local/nginx --user=nginx --group=nginx --with-http_stub_status_module
make -j16 && make install
ln -s /usr/local/nginx/sbin/nginx /usr/local/sbin/
tee /lib/systemd/system/nginx.service ? <<eof
[Unit]
Description=nginx
After=network.target
[Service]
Type=forking
PIDFile=/usr/local/nginx/logs/nginx.pid
ExecStart=/usr/local/nginx/sbin/nginx
ExecReload=/bin/kill -1 $MAINPID
ExecStop=/bin/kill -3 $MAINPID
PrivateTmp=true
[Install]
WantedBy=multi-user.target
eof
chmod 777 /lib/systemd/system/nginx.service?
sudo useradd -r -d /var/www -s /sbin/nologin nginx
systemctl daemon-reload
systemctl start nginx

yum安裝
Centos7 需要安裝epel源
?
cd /etc/yum.repos.d
vim epel.repo
[epel]
name=epel
baseurl=https://mirrors.aliyun.com/epel/$releasever/x86_64
gpgcheck=0
?
yum install -y epel-release
?
yum install nginx -y

?

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/38388.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/38388.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/38388.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

OffscreenCanvas:Web Workers 中的畫布操作

在 Web 開發中&#xff0c;我們經常需要處理復雜的圖形和動畫&#xff0c;這些操作可能會影響頁面的性能和用戶體驗。為了解決這個問題&#xff0c;現代瀏覽器引入了 OffscreenCanvas 接口&#xff0c;它允許我們在后臺線程&#xff08;Web Workers&#xff09;中進行畫布操作&…

python教程---網絡爬蟲

7.1 urllib Urllib是Python內置的一個用于讀取來自Web的數據的庫。它是一個請求庫&#xff0c;可以用來發送HTTP請求&#xff0c;獲取網頁內容&#xff0c;支持多種HTTP方法&#xff0c;如GET和POST等。 使用Urllib讀取網頁內容的步驟如下&#xff1a; 導入Urllib庫中的reque…

Redis--18--Redis Desktop Manage下載與安裝

提示&#xff1a;文章寫完后&#xff0c;目錄可以自動生成&#xff0c;如何生成可參考右邊的幫助文檔 文章目錄 Redis Desktop Manage1.官網下載https://redis.io/insight/ 2.安裝方法3.使用方法3.1.進入RedisDesktopManager的主界面3.2 新建連接3.3 支持操作 Redis Desktop Ma…

J021_QQ號格式校驗

一、需求描述 校驗QQ號碼是否正確。要求全部是數字&#xff0c;數字長度&#xff08;6-20位之間&#xff09;&#xff0c;不能以0開頭。 二、代碼實現 package com.itheima.sort;public class Test {public static void main(String[] args) {System.out.println("----…

汽車尾燈(轉向燈)電路設計

即當汽車進行轉彎時,司機打開轉向燈,尾燈會根據轉向依次被點亮,經過一定的間隔后,再全部被消滅。不停地重復,直到司機關閉轉向燈。 該效果可由以下電路實現: 完整電路圖: 02—電路設計要點 延時電路的要點主要有兩個: 一、當轉向開關被按下時,LED需要逐個亮起; 二、LED被逐…

uniapp 使用cavans 生成海報

uniapp 使用cavans 生成海報 npm install qs-canvas1.創建 useCanvas.js /*** Shopro qs-canvas 繪制海報* version 1.0.0* author lidongtony* param {Object} options - 海報參數* param {Object} vm - 自定義組件實例*/ import QSCanvas from qs-canvas; import { getPos…

NVIDIA Visual Profiler啟動失敗報錯

在銀河麒麟V10安裝完NVIDIA后&#xff0c;想著試著運行一下NVIDIA Visual Profiler&#xff0c;發現報錯&#xff0c;如下圖。 照著提示翻閱日志文件。看見其中寫著 !ENTRY com.nvidia.viper.birt 2 0 2024-06-30 08:39:39.806 !MESSAGE Could not resolve module: com.nvidi…

ACE之Task框架

簡介 其提供了并發處理事件的能力 結構 #mermaid-svg-8gxc0Agd7gZ9tHdf {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-8gxc0Agd7gZ9tHdf .error-icon{fill:#552222;}#mermaid-svg-8gxc0Agd7gZ9tHdf .error-text{…

R學習資源及R包安裝

轉自生信師兄 生信必備技巧之R語言基礎教程 1. 學習資源 推薦書籍&#xff1a;R語言實戰&#xff0c;R數據科學等等&#xff1b; 這兩本書在公眾號【生信師兄】都有pdf版&#xff0c;有需要的可以關注公眾號【生信師兄】并回復&#xff1a;“R語言”&#xff0c;即可獲得免費…

【自然語言處理】預訓練語言模型實現與應用

預訓練語言模型實現與應用 1 任務目標 1.1 案例簡介 ? 2018年&#xff0c;Google提出了預訓練語言模型BERT&#xff0c;該模型在各種NLP任務上都取得了很好的效果。與此同時&#xff0c;它的使用十分方便&#xff0c;可以快速地對于各種NLP任務進行適配。因此&#xff0c;B…

《每天5分鐘用Flask搭建一個管理系統》第8章:權限管理

第8章&#xff1a;權限管理 8.1 權限管理的概念 權限管理是控制用戶對應用內不同資源訪問的機制。它確保用戶只能訪問他們被授權的資源。 8.2 Flask-Principal擴展的使用 Flask-Principal是一個提供權限管理功能的Flask擴展&#xff0c;它允許您定義角色和權限&#xff0c;…

基于HarmonyOS NEXT開發智能提醒助手

目錄 目錄 目錄 前言 關于HarmonyOS NEXT 智能提醒助手需求分析 智能提醒助手設計 1、系統架構 2、功能模塊 智能提醒助手的應用場景 智能提醒助手的競爭力 具體技術實現 未來展望 結束語 前言 隨著智能設備的普及和物聯網技術的飛速發展&#xff0c;人們對于智能…

基于大津閾值法和二值化與聯通區域標記進行圖像目標計數

1 建模 A.讀取圖像&#xff1a; 1.使用imread函數讀取圖像文件。 2.如果圖像是彩色的&#xff0c;通常需要先轉換為灰度圖像&#xff0c;因為大津閾值法通常應用于灰度圖像。 B.灰度化&#xff1a; 1&#xff0e;如果圖像是彩色的&#xff0c;使用rgb2gray函數將其轉換為灰度…

《昇思25天學習打卡營第16天 | 昇思MindSpore基于MobileNetv2的垃圾分類》

16天 本節學習了垃圾分類代碼開發的方法。通過讀取本地圖像數據作為輸入&#xff0c;對圖像中的垃圾物體進行檢測&#xff0c;并且將檢測結果圖片保存到文件中。 MobileNet網絡是由Google團隊于2017年提出的專注于移動端、嵌入式或IoT設備的輕量級CNN網絡&#xff0c;相比于傳…

Excel顯示/隱藏批注按鈕為什么是灰色?

在excel中&#xff0c;經常使用批注來加強數據信息的提示&#xff0c;有時候會把很多的批注顯示出來&#xff0c;但是再想將它們隱藏起來&#xff0c;全選工作表后&#xff0c;“顯示/隱藏批注”按鈕是灰色的&#xff0c;不可用。 二、可操作方法 批注在excel、WPS表格中都是按…

【考研408計算機組成原理】微程序設計重要考點指令流水線考研真題+考點分析

蘇澤 “棄工從研”的路上很孤獨&#xff0c;于是我記下了些許筆記相伴&#xff0c;希望能夠幫助到大家 目錄 微指令的形成方式 微指令的地址形成方式 對應考題 題目&#xff1a;微指令的地址形成方式 - 斷定方式 解題思路&#xff1a; 答題&#xff1a; 分析考點&…

每日疑問,多線程場景,下面的代碼是否可以保證只執行一次

看著這個代碼的目的是只注冊一次sighandler&#xff0c;但是這個判定是否可以保證一次&#xff1f;但是根據代碼看&#xff0c;其實不會有關鍵區的讀寫&#xff0c;所以即使有同步問題&#xff0c;也不會產生什么特別的影響。所以代碼沒有問題&#xff0c;但是這是一個坑。 in…

Spring Boot中的分頁與排序實現

Spring Boot中的分頁與排序實現 大家好&#xff0c;我是免費搭建查券返利機器人省錢賺傭金就用微賺淘客系統3.0的小編&#xff0c;也是冬天不穿秋褲&#xff0c;天冷也要風度的程序猿&#xff01;在開發Web應用時&#xff0c;分頁和排序是常見的功能需求&#xff0c;特別是在處…

計算機體系結構和指令系統

1.計算機體系結構 - 五大部件 - 馮 諾依曼 計算機的特點 1.計算機有五大部件組成 2.指令和數據以同等地位存儲于存儲器&#xff0c;可按照地址訪問 3.指令和數據用二進制表示 4.指令由操作碼和地址碼組成 5。存儲程序 6.以計算器為中心&#xff08;輸入、輸出設備與存儲器…

2024年【湖北省安全員-C證】新版試題及湖北省安全員-C證試題及解析

題庫來源&#xff1a;安全生產模擬考試一點通公眾號小程序 湖北省安全員-C證新版試題參考答案及湖北省安全員-C證考試試題解析是安全生產模擬考試一點通題庫老師及湖北省安全員-C證操作證已考過的學員匯總&#xff0c;相對有效幫助湖北省安全員-C證試題及解析學員順利通過考試…