nginx
目錄- nginx
- 一、nginx簡介
- 二、nginx的特性與優點
- 1.nginx的特性
- 2.nginx的優點
- 三、nginx的功能及應用類別
- 1. nginx的基本功能
- 2. nginx的擴展功能
- 3. nginx的應用類別
- 四、nginx的模塊,作業原理,作業模式
- 1.nginx的模塊分類
- 2. nginx的作業原理
- 3. nginx的作業模式
- 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的作業原理
-
nginx采用了異步非阻塞的作業方式
epoll模型:當有i/o事件產生時,epoll就會告訴行程哪個連接由i/o事件產生,然后行程就會處理這個事件,
nginx配置use epoll后,以異步非阻塞的方式作業,能夠處理百萬計的并發連接 -
處理程序:
每進來一個請求,會有一個作業行程去處理,但不是全程進行處理,處理可以會發生阻塞的情況;比如:向后端服務器轉發請求,那么這個處理的作業行程不會一直等待,它會在發送完請求后,注冊一個事件等待后端服務器回傳;此時,再有新的請求,這個worker就很快再按這種方式處理;而一旦后端服務器回傳資訊,就會觸發這個事件,worker就會進行處理,這個請求才會接著往下走;
通過這種<快速處理并快速釋放請求>的方式,達到同樣的配置可以處理更大并發的目的
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
//啟動nginx
[root@nginx ~]# systemctl enable --now nginx
[root@nginx ~]# systemctl enable --now nginx
Created symlink /etc/systemd/system/multi-user.target.wants/nginx.service → /usr/lib/systemd/system/nginx.service.
[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 [::]:*
瀏覽器訪問

轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/512954.html
標籤:其他
上一篇:使用yum管理軟體包
下一篇:nginx
