目錄
一.Nginx基礎
1.基礎知識點
2.異步非阻塞機制
二.Nginx安裝
?2.1安裝nginx3種方式
1.包管理工具安裝(yum/apt)
2.本地包安裝(rpm/dpkg)
3.源碼編譯安裝
3.1?源碼編譯安裝nginx流程(ubuntu)
1. 更新apt源、下載lrzsz工具
2.安裝依賴包?
3.創建運行用戶
4.編譯安裝nginx?編輯
5.檢查、啟動、重啟、停止 nginx服務
6.nginx如何前臺啟動?
3.2nginx版本平滑升級??
3.3添加 Nginx 系統服務管理
三.nginx進程?
四.nginx配置
一.Nginx基礎
1.基礎知識點
Nginx 是一個?輕量級、高性能的Web服務應用,可以作為?HTTP 服務器、虛擬主機、反向代理服務器、負載均衡器,以及支持 TCP/UDP 的通用代理服務器。
特點:穩定性高、不容易宕機;開源免費;內存/cpu資源消耗較少;并發能力高,至少能同時處理2-3萬并發,最多能支持5萬并發
2.異步非阻塞機制
Nginx 的異步非阻塞機制通過?事件驅動模型?和?I/O 多路復用技術?實現,使得單個 Worker 進程能夠高效處理成千上萬的并發連接。
1. Worker進程初始化,監聽指定的端口(如80或443)。
2. 當有新的連接請求到達時,Worker進程接受該連接,并將其注冊到事件循環中。
3. 事件循環使用I/O多路復用機制(epoll)來監視所有注冊的文件描述符(即連接)。
4. 當某個連接上有可讀或可寫事件發生時,事件循環會觸發相應的回調函數來處理該事件。
5. 在處理事件時,如果需要進行I/O操作(如讀取請求數據或發送響應數據),這些操作會被異步執行,不會阻塞進程。
6. 處理完一個事件后,事件循環繼續檢查其他事件,循環往復。
-
異步非阻塞 I/O:
當發起 I/O 操作(如讀取網絡數據、寫入文件)時,進程不等待操作完成,而是繼續處理其他任務;操作完成后,通過事件通知機制(如回調函數)處理結果。 -
事件驅動模型:
Worker 進程通過事件循環(Event Loop)監聽所有連接的事件(如可讀、可寫),僅處理已就緒的事件,避免空等。 -
I/O 多路復用:
使用操作系統提供的機制(如?epoll
、kqueue
)同時監控多個文件描述符(即連接),當任意一個描述符就緒時立即通知進程。
二.Nginx安裝
?2.1安裝nginx3種方式
1.包管理工具安裝(yum/apt)
-
原理:通過系統的包管理工具自動從官方倉庫下載并安裝預編譯的包。
-
特點:自動解決依賴、自動生成service文件
-
命令: centos:? ? yum? ?install? nginx? -y? ? ? ? ubuntu:????apt install nginx -y??
2.本地包安裝(rpm/dpkg)
-
原理:手動下載
.rpm
(Red Hat系)或.deb
(Debian系)包,都屬于預編譯的二進制包 -
特點:手動解決依賴、包含service文件
-
命令:centos: rpm -i nginx.rpm?或 ubuntu:? ?
dpkg -i nginx.deb?
安裝。
3.源碼編譯安裝
-
原理:從Nginx官網下載源代碼,手動編譯并安裝。
-
特點:
-
完全自定義:可啟用/禁用模塊(如
--with-http_ssl_module
)、指定安裝路徑(如--prefix=/opt/nginx
)。 -
性能優化:自行調整編譯參數(如
-march=native
)。 -
手動處理依賴:需提前安裝開發工具(如gcc)及依賴庫(如PCRE、OpenSSL)。
-
無自動管理:更新需重新編譯,服務腳本需手寫service文件。
-
獨立目錄結構:默認安裝到
/usr/local/nginx
,與系統包隔離。
-
3.1?源碼編譯安裝nginx流程(ubuntu)
1. 更新apt源、下載lrzsz工具
?apt update? ? ? ? ? ? ??
?apt install -y lrzsz? ? ? 用于本地主機和服務器相互傳輸文件
2.安裝依賴包?
ubuntu:? ?apt -y install libpcre3-dev zlib1g-dev libssl-dev build-essential
centos:? ?yum -y install gcc pcre-devel openssl-devel zlib-devel openssl ?openssl-devel
3.創建運行用戶
?Nginx 服務程序默認以 nobody 身份運行:useradd? -M -s /sbin/nologin nginx
4.編譯安裝nginx
./configure --prefix=/usr/local/nginx \ #指定了Nginx的安裝目錄。在這種情況下,它將安裝在 /usr/local/nginx 目錄下。
--user=nginx --group=nginx \ #指定了運行Nginx進程的用戶和組。在這種情況下,它將是用戶 和組 nginx。
--with-http_gzip_static_module \ #啟用了支持使用 .gz 擴展名提供預壓縮文件的功能。
--with-http_flv_module \
--with-http_ssl_module \ #啟用了對HTTP連接的SSL/TLS加密支持。
--with-http_realip_module \
--with-http_v2_module \ #啟用了對HTTP2.0協議的支持
--with-http_sub_module \
--with-http_mp4_module \
--with-http_stub_status_module \ #啟用了 stub_status 模塊,提供了訪問Nginx狀態信息的方 法。
--with-pcre \ #啟用了對Perl Compatible Regular Expressions(PCRE) 庫的支持。
--with-stream \ #啟用了對TCP/UDP代理模塊的支持。
--with-stream_ssl_module \ #啟用了對TCP/UDP連接的SSL/TLS加密支持。
--with-stream_realip_module #允許Nginx從PROXY協議頭部獲取客戶端的真實IP地址。
make -j? 2(cpu數量決定)?
make -install (安裝)?
注意:
1.讓系統識別nginx操作命令,將nginx的可執行文件做上軟鏈接?
2.更改nginx文件夾下的屬主屬組
chown -R nginx.nginx /usr/local/nginx
5.檢查、啟動、重啟、停止 nginx服務
1.檢查nginx配置文件:/usr/local/nginx/conf/nginx_conf
?nginx? -t? ? ? 檢查配置文件是否有語法錯誤
2.啟動nginx服務
3.停止nginx服務?
4.重載nginx服務
5.日志分割,重新打開日志文件
nginx 存放日志文件的位置: /usr/local/nginx/logs
生成存放成功日志、錯誤日志的空文件:kill? -USR1? ?$(cat? /usr/local/nginx/logs/nginx.pid)
6.nginx如何前臺啟動
3.2nginx版本平滑升級?


?kill -USR2? ?<PID號>
注意:升級完成后要使用絕對路徑啟動服務,否則升級可能會報錯
3.3添加 Nginx 系統服務管理
因為編譯安裝沒有service文件,如果想要系統服務統一管理systemed,需要編寫service文件。
service 文件
[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 -s HUP $MAINPID
ExecStop=/bin/kill -s QUIT $MAINPID
PrivateTmp=true[Install]
WantedBy=multi-user.target
三.nginx進程?
master 進程 :1.管理worker子進程? ?2.加載配置文件
?worker 進程:? ? 1.處理客戶端發送的請求
以處理 HTTP 請求為例:
-
接收連接:Worker 進程通過?
epoll
?監聽端口,接收客戶端連接。 -
讀取請求:若數據未到達(非阻塞),Worker 繼續處理其他連接;若數據到達,讀取并解析請求。
-
處理請求:若需讀取靜態文件,發起非阻塞文件 I/O 操作;若需代理到后端,發起非阻塞網絡連接。
-
響應客戶端:待所有操作完成后,通過事件回調將結果返回客戶端。
? ?1. 核心優勢
-
低資源消耗:單線程可處理數萬并發連接,避免多線程的內存開銷和上下文切換。
-
高吞吐量:通過事件分發機制,最大化 CPU 和 I/O 利用率。
四.nginx配置
nginx配置文件的路徑: /usr/local/nginx/conf/nginx_conf
1、全局塊:全局配置,對全局生效;
2、events塊:配置影響 Nginx 服務器與用戶的網絡連接;
3、http塊:配置代理,緩存,日志定義等絕大多數功能和第三方模塊的配置;
4、server塊:配置虛擬主機的相關參數,一個 http 塊中可以有多個 server 塊;
5、location塊:用于配置匹配的 urI? ?(域名后面的部分);
6、upstream:配置后端服務器具體地址,負載均衡配置不可或缺的部分。
?全局塊:全局配置,對全局生效;
?events塊:配置影響 Nginx 服務器與用戶的網絡連接;
?http塊:配置代理,緩存,日志定義等絕大多數功能和第三方模塊的配置;
注意:http模塊中還可以第三方模塊的配置
server塊:配置虛擬主機的相關參數,一個 http 塊中可以有多個 server 塊;
location塊:用于配置匹配的 urI? ?(域名后面的部分);
upstream:配置后端服務器具體地址,負載均衡配置不可或缺的部分。