nginx服務

来源:https://www.cnblogs.com/Their-own/archive/2022/10/10/16777334.html
-Advertisement-
Play Games

nginx 一、nginx簡介 nginx(發音同engine x)是一款輕量級的Web伺服器/反向代理伺服器及電子郵件(IMAP/POP3)代理伺服器,併在一個BSD-like協議下發行。 nginx由俄羅斯的程式設計師Igor Sysoev所開發,最初供俄國大型的入口網站及搜尋引擎Rambler ...


nginx

目錄

一、nginx簡介

nginx(發音同engine x)是一款輕量級的Web伺服器/反向代理伺服器及電子郵件(IMAP/POP3)代理伺服器,併在一個BSD-like協議下發行。

nginx由俄羅斯的程式設計師Igor Sysoev所開發,最初供俄國大型的入口網站及搜尋引擎Rambler使用。

第一個公開版本0.1.0發佈於2004年10月4日。其將源代碼以類BSD許可證的形式發佈,因它的穩定性、豐富的功能集、示例配置文件和低系統資源的消耗而聞名。2011年6月1日,nginx 1.0.4發佈。

nginx的特點是占有記憶體少,併發能力強,事實上nginx的併發能力確實在同類型的網頁伺服器中表現較好,中國大陸使用nginx網站用戶有:百度、京東、新浪、網易、騰訊、淘寶等。

二、nginx的特性與優點

1.nginx的特性

Nginx 可以在大多數 Unix Linux OS 上編譯運行,並有 Windows 移植版。Nginx 的1.20.0穩定版已經於2021年4月20日發佈,一般情況下,對於新建站點,建議使用最新穩定版作為生產版本,已有站點的升級急迫性不高。Nginx 的源代碼使用 2-clause BSD-like license。

Nginx 是一個很強大的高性能Web和反向代理服務,它具有很多非常優越的特性:

在連接高併發的情況下,Nginx是Apache服務不錯的替代品:Nginx在美國是做虛擬主機生意的老闆們經常選擇的軟體平臺之一。能夠支持高達 50,000 個併發連接數的響應,感謝Nginx為我們選擇了 epoll and kqueue作為開發模型。

  • 伺服器
    • Nginx作為負載均衡服務:Nginx 既可以在內部直接支持 Rails 和 PHP 程式對外進行服務,也可以支持作為 HTTP代理服務對外進行服務。Nginx採用C進行編寫,不論是系統資源開銷還是CPU使用效率都比 Perlbal 要好很多。
    • 處理靜態文件,索引文件以及自動索引;打開文件描述符緩衝。
    • 無緩存的反向代理加速,簡單的負載均衡和容錯。
    • FastCGI,簡單的負載均衡和容錯。
    • 模塊化的結構。包括 gzipping, byte ranges, chunked responses,以及 SSI-filter 等 filter。如果由 FastCG或其它代理伺服器處理單頁中存在的多個 SSI,則這項處理可以並行運行,而不需要相互等待。
    • 支持 SSL 和 TLSSNI。
  • 代碼
    • Nginx代碼完全用C語言從頭寫成,已經移植到許多體繫結構和操作系統,包括:Linux、FreeBSD、Solaris、Mac OS X、AIX以及Microsoft Windows。Nginx有自己的函數庫,並且除了zlib、PCRE和OpenSSL之外,標準模塊只使用系統C庫函數。而且,如果不需要或者考慮到潛在的授權衝突,可以不使用這些第三方庫。
  • 代理伺服器
    • 作為郵件代理服務:Nginx 同時也是一個非常優秀的郵件代理服務(最早開發這個產品的目的之一也是作為郵件代理伺服器),Last.fm 描述了成功並且美妙的使用經驗。
    • Nginx 是一個安裝非常的簡單、配置文件非常簡潔(還能夠支持perl語法)、Bug非常少的服務。Nginx 啟動特別容易,並且幾乎可以做到7*24不間斷運行,即使運行數個月也不需要重新啟動。你還能夠不間斷服務的情況下進行軟體版本的升級。

2.nginx的優點

  • 高併發連接:官方測試能夠支撐5萬併發連接,在實際生產環境中跑到2-3萬併發連接數
  • 記憶體消耗少:在3萬併發連接下,開啟的10個nginx進程才消耗150M記憶體(15M*10=150M)
  • 配置文件非常簡單:風格跟程式一樣通俗易懂
  • 成本低廉:nginx為開源軟體,可以免費使用。而購買F5 BIG-IP、NetScaler等硬體負載均衡交換機則需要十多萬至幾十萬人民幣
  • 支持Rewrite重寫規則:能夠根據功能變數名稱、URL的不同,將HTTP請求分到不同的後端伺服器群組
  • 內置的健康檢查功能:如果Nginx Proxy後端的某台Web伺服器宕機了,不會影響前端訪問
  • 節省帶寬:支持GZIP壓縮,可以添加瀏覽器本地緩存的Header頭
  • 穩定性高:用於反向代理,宕機的概率微乎其微
  • 模塊化設計:模塊可以動態編譯
  • 外圍支持好:文檔全,二次開發和模塊較多
  • 支持熱部署:可以不停機重載配置文件
  • 支持事件驅動、AIO(AsyncIO,非同步IO)、mmap(Memory Map,記憶體映射)等性能優化

三、nginx的功能及應用類別

1. nginx的基本功能

  • 靜態資源的web伺服器,能緩存打開的文件描述符
  • http、smtp、pop3協議的反向代理伺服器
  • 緩存加速、負載均衡
  • 支持FastCGI(fpm,LNMP),uWSGI(Python)等
  • 模塊化(非DSO機制),過濾器zip、SSI及圖像的大小調整
  • 支持SSL

2. nginx的擴展功能

  • 基於名稱和IP的虛擬主機
  • 支持keepalive
  • 支持平滑升級
  • 定製訪問日誌、支持使用日誌緩衝區提高日誌存儲性能
  • 支持URL重寫
  • 支持路徑別名
  • 支持基於IP及用戶的訪問控制
  • 支持速率限制,支持併發數限制

3. nginx的應用類別

  • 使用nginx結合FastCGI運行PHP、JSP、Perl等程式
  • 使用nginx作反向代理、負載均衡、規則過濾
  • 使用nginx運行靜態HTML網頁、圖片
  • nginx與其他新技術的結合應用

四、nginx的模塊,工作原理,工作模式

nginx由內核和模塊組成。其中,內核的設計非常微小和簡潔,完成的工作也非常簡單,僅僅通過查找配置文件將客戶端請求映射到一個location block(location是nginx配置中的一個指令,用於URL匹配),而在這個location中所配置的每個指令將會啟動不同的模塊去完成相應的工作。

1.nginx的模塊分類

nginx的模塊從結構上分為核心模塊、基礎模塊和第三方模塊

  • HTTP模塊、EVENT模塊和MAIL模塊等屬於核心模塊
  • HTTP Access模塊、HTTP FastCGI模塊、HTTP Proxy模塊和HTTP Rewrite模塊屬於基本模塊
  • HTTP Upstream模塊、Request Hash模塊、Notice模塊和HTTP Access Key模塊屬於第三方模塊

用戶根據自己的需要開發的模塊都屬於第三方模塊。正是有瞭如此多模塊的支撐,nginx的功能才會如此強大

nginx模塊從功能上分為三類,分別是:

  • Handlers(處理器模塊)。此類模塊直接處理請求,併進行輸出內容和修改headers信息等操作。handlers處理器模塊一般只能有一個
  • Filters(過濾器模塊)。此類模塊主要對其他處理器模塊輸出的內容進行修改操作,最後由nginx輸出
  • Proxies(代理器模塊)。就是nginx的HTTP Upstream之類的模塊,這些模塊主要與後端一些服務比如fastcgi等操作交互,實現服務代理和負載均衡等功能

nginx模塊分為:核心模塊、事件模塊、標準Http模塊、可選Http模塊、郵件模塊、第三方模塊和補丁等

  • nginx基本模塊:所謂基本模塊,指的是nginx預設的功能模塊,它們提供的指令,允許你使用定義nginx基本功能的變數,在編譯時不能被禁用,包括:
    • 核心模塊:基本功能和指令,如進程管理和安全。常見的核心模塊指令,大部分是放置在配置文件的頂部
    • 事件模塊:在Nginx內配置網路使用的能力。常見的events(事件)模塊指令,大部分是放置在配置文件的頂部
    • 配置模塊:提供包含機制

具體的指令,請參考nginx的官方文檔

2. nginx的工作原理

  1. nginx採用了非同步非阻塞的工作方式
    epoll模型:當有i/o事件產生時,epoll就會告訴進程哪個連接由i/o事件產生,然後進程就會處理這個事件。
    nginx配置use epoll後,以非同步非阻塞的方式工作,能夠處理百萬計的併發連接

  2. 處理過程:
    每進來一個請求,會有一個工作進程去處理,但不是全程進行處理,處理可以會發生阻塞的情況;

    比如:向後端伺服器轉發請求,那麼這個處理的工作進程不會一直等待,它會在發送完請求後,註冊一個事件等待後端伺服器返回;此時,再有新的請求,這個worker就很快再按這種方式處理;而一旦後端伺服器返回信息,就會觸發這個事件,worker就會進行處理,這個請求才會接著往下走;
    通過這種<快速處理並快速釋放請求>的方式,達到同樣的配置可以處理更大併發的目的

img

3. nginx的工作模式

1.master-worker模式
nginx啟動成功後,會有一個master進程和至少一個worker進程;
master進程負責處理系統信號、載入配置、管理worker進程

worker進程負責處理具體的業務邏輯

對外部來說,真正提供服務的時worker進程

優點:
穩定性高;一個worker進程掛掉後master進程會立即啟動一個新的worker進程,保證worker進程數量不變,降低服務中斷的概率;
配合Linux的cpu親和性的匹配中,可以充分利用多核cpu的優勢,提升性能;
處理信號、配置重新載入等可以做到儘可能不中斷服務;

2.單進程模式
nginx只有一個進程,nginx的所有工作都由這個進程負責

優點:可以很方便的利用gdb工具進行調試

缺點:
不支持平滑升級
任何的信號處理都可以造成服務的中斷
進程掛掉後,在沒有外部監控的情況下,無法重啟服務
生產環境中不會使用

nginx源碼部署

環境說明:

系統 主機名 IP
centos8 nginx 192.168.111.141
//修改名字
[root@localhost ~]# hostnamectl set-hostname nginx
[root@localhost ~]# bash
[root@nginx ~]# 

//關閉防火牆和selinux
[root@nginx ~]# setenforce 0
[root@nginx ~]# sed -ri 's/^(SELINUX=).*/\1disabled/g' /etc/selinux/config
[root@nginx ~]# systemctl disable --now firewalld
[root@nginx ~]# reboot

//配置yum源
[root@nginx ~]# curl -o /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-vault-8.5.2111.repo
[root@nginx ~]# sed -i -e '/mirrors.cloud.aliyuncs.com/d' -e '/mirrors.aliyuncs.com/d' /etc/yum.repos.d/CentOS-Base.repo

//創建用戶
[root@nginx ~]# useradd -rMs /sbin/nologin nginx

//安裝依賴包
[root@nginx ~]# dnf -y install pcre-devel openssl openssl-devel gd-devel gcc gcc-c++ make wget vim

//創建日誌存放目錄
[root@nginx ~]# mkdir -p /var/log/nginx
[root@nginx ~]# chown -R nginx.nginx /var/log/nginx

//下載nginx包並解壓
[root@nginx ~]# wget http://nginx.org/download/nginx-1.20.2.tar.gz
[root@nginx ~]# tar xf nginx-1.20.2.tar.gz 

//進行編譯安裝
[root@nginx ~]# cd nginx-1.20.2
[root@nginx nginx-1.20.2]# ./configure \
 --prefix=/usr/local/nginx \
 --user=nginx \
 --group=nginx \
 --with-debug \
 --with-http_ssl_module \
 --with-http_realip_module \
 --with-http_gunzip_module \
 --with-http_gzip_static_module \
 --with-http_stub_status_module
[root@nginx nginx-1.20.2]# make -j $(grep 'processor' /proc/cpuinfo | wc -l) && make install

//安裝完成
[root@nginx nginx-1.20.2]# cd /usr/local/nginx/
[root@nginx nginx]# ls
conf  html  logs  sbin

nginx安裝後配置

//配置環境變數
[root@nginx ~]# echo "export PATH=$PATH:/usr/local/nginx/sbin" > /etc/profile.d/nginx.sh
[root@nginx ~]# source /etc/profile.d/nginx.sh
                
//配置system啟動服務
[root@nginx ~]# vim /usr/lib/systemd/system/nginx.service
[Unit]
Description=nginx server daemon
After=network.target 
 
[Service]
Type=forking
ExecStart=/usr/local/nginx/sbin/nginx
ExecStop=/usr/local/nginx/sbin/nginx -s stop
ExecReload=/bin/kill -HUP \$MAINPID
 
[Install]
WantedBy=multi-user.target
[root@nginx ~]# systemctl daemon-reload

//啟動nginx
[root@nginx ~]# systemctl enable --now nginx
[root@nginx ~]# ss -anlt
State        Recv-Q       Send-Q               Local Address:Port               Peer Address:Port       Process       
LISTEN       0            128                        0.0.0.0:80                      0.0.0.0:*                        
LISTEN       0            128                        0.0.0.0:22                      0.0.0.0:*                        
LISTEN       0            128                           [::]:22                         [::]:*                        

瀏覽器訪問

image


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 框架內容 零度框架是一套基於微服務和領域模型驅動設計的企業級快速開發框架,基於微軟 .NET 6 + React 最新技術棧構建,容器化微服務最佳實踐,零度框架的搭建以開發簡單,多屏體驗,前後端分離,靈活部署,最少依賴,最新框架為原則,以物聯網平臺管理系統為業務模型,參考諸多優秀開源框架,採用主流穩 ...
  • 開發人員在開發代碼的時候,經常會使用到Debug、Release、Development、Production等幾個概念,雖然有些地方在功能上最終殊途同歸,但是還是有非常大的區別。 首先需要搞清楚,Debug、Release都屬於編譯配置,而Development、Production則屬於環境配置 ...
  • 一:背景 1.講故事 前些天有位朋友微信找到我,說他的程式出現了CPU階段性爆高,過了一會就下去了,咨詢下這個爆高階段程式內部到底發生了什麼? 畫個圖大概是下麵這樣,你懂的。 按經驗來說,這種情況一般是程式在做 CPU 密集型運算,所以讓朋友在 CPU 高的時候間隔 5~10s 抓兩個 dump 下 ...
  • nginx平滑升級及nginx配置文件 nginx平滑升級並添加新功能 1.先獲取老版本的編譯信息 2.獲取新版本安裝包和功能包 3.配置新版本或功能,配置時加上老版本的編譯參數,然後添加新功能模塊 4.進行編譯,編譯完不進行安裝操作 5.備份老版本程式,使用複製的方法。在停掉老版本程式的進程,將新 ...
  • 作為電腦畢業的我,說起來慚愧,大學時候很多重要的專業課都沒好好聽過,慶幸的是,大學的很多教師課件我都有保存下來。這幾天,把《操作系統》拿起來看看,然後涉及到一些我認為重要的理論知識我會在這個專題都會記錄下來,這將會是一個持續的過程。 1、操作系統的目標 2、操作系統的作用 其中:四類資源是:處理器 ...
  • 最近谷歌官方宣稱由於使用人數少,關停了中國的翻譯服務,導致谷歌瀏覽器上的翻譯服務無法使用,當我們使用谷歌瀏覽器自帶翻譯功能時,會報出:無法翻譯此網頁,或者沒有翻譯反應。 在macOS下怎麼解決谷歌瀏覽器Chrome無法翻譯呢?下麵小編來教你快速解決。 1、打開終端(commond+空格 搜索“終端” ...
  • 一、CentOS 7.9 安裝 elasticsearch-7.8.1 地址 https://www.elastic.co https://www.elastic.co/cn/downloads/past-releases https://github.com/elastic https://git ...
  • 分離部署LNMP 環境說明: | 系統 | 主機名 | IP | 服務 | | | | | | | centos8 | nginx | 192.168.111.141 | nginx | | centos8 | mysql | 192.168.111.142 | mysql | | centos8 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...