Nginx基礎(chǔ)安裝+配置文件過(guò)程
一.Nginx基礎(chǔ)
1.基礎(chǔ)知識(shí)點(diǎn)
Nginx 是一個(gè) 輕量級(jí)、高性能的Web服務(wù)應(yīng)用,可以作為 HTTP 服務(wù)器、虛擬主機(jī)、反向代理服務(wù)器、負(fù)載均衡器,以及支持 TCP/UDP 的通用代理服務(wù)器。
特點(diǎn):穩(wěn)定性高、不容易宕機(jī);開(kāi)源免費(fèi);內(nèi)存/cpu資源消耗較少;并發(fā)能力高,至少能同時(shí)處理2-3萬(wàn)并發(fā),最多能支持5萬(wàn)并發(fā)
2.異步非阻塞機(jī)制
Nginx 的異步非阻塞機(jī)制通過(guò) 事件驅(qū)動(dòng)模型 和 I/O 多路復(fù)用技術(shù) 實(shí)現(xiàn),使得單個(gè) Worker 進(jìn)程能夠高效處理成千上萬(wàn)的并發(fā)連接。
1. Worker進(jìn)程初始化,監(jiān)聽(tīng)指定的端口(如80或443)。
2. 當(dāng)有新的連接請(qǐng)求到達(dá)時(shí),Worker進(jìn)程接受該連接,并將其注冊(cè)到事件循環(huán)中。
3. 事件循環(huán)使用I/O多路復(fù)用機(jī)制(epoll)來(lái)監(jiān)視所有注冊(cè)的文件描述符(即連接)。
4. 當(dāng)某個(gè)連接上有可讀或可寫(xiě)事件發(fā)生時(shí),事件循環(huán)會(huì)觸發(fā)相應(yīng)的回調(diào)函數(shù)來(lái)處理該事件。
5. 在處理事件時(shí),如果需要進(jìn)行I/O操作(如讀取請(qǐng)求數(shù)據(jù)或發(fā)送響應(yīng)數(shù)據(jù)),這些操作會(huì)被異步執(zhí)行,不會(huì)阻塞進(jìn)程。
6. 處理完一個(gè)事件后,事件循環(huán)繼續(xù)檢查其他事件,循環(huán)往復(fù)。
- 異步非阻塞 I/O:當(dāng)發(fā)起 I/O 操作(如讀取網(wǎng)絡(luò)數(shù)據(jù)、寫(xiě)入文件)時(shí),進(jìn)程不等待操作完成,而是繼續(xù)處理其他任務(wù);操作完成后,通過(guò)事件通知機(jī)制(如回調(diào)函數(shù))處理結(jié)果。
- 事件驅(qū)動(dòng)模型:Worker 進(jìn)程通過(guò)事件循環(huán)(Event Loop)監(jiān)聽(tīng)所有連接的事件(如可讀、可寫(xiě)),僅處理已就緒的事件,避免空等。
- I/O 多路復(fù)用:使用操作系統(tǒng)提供的機(jī)制(如
epoll、kqueue)同時(shí)監(jiān)控多個(gè)文件描述符(即連接),當(dāng)任意一個(gè)描述符就緒時(shí)立即通知進(jìn)程。
二.Nginx安裝
2.1安裝nginx3種方式
1.包管理工具安裝(yum/apt)
- 原理:通過(guò)系統(tǒng)的包管理工具自動(dòng)從官方倉(cāng)庫(kù)下載并安裝預(yù)編譯的包。
- 特點(diǎn):自動(dòng)解決依賴(lài)、自動(dòng)生成service文件
- 命令: centos: yum install nginx -y ubuntu: apt install nginx -y
2.本地包安裝(rpm/dpkg)
- 原理:手動(dòng)下載.rpm(Red Hat系)或.deb(Debian系)包,都屬于預(yù)編譯的二進(jìn)制包
- 特點(diǎn):手動(dòng)解決依賴(lài)、包含service文件
- 命令:centos: rpm -i nginx.rpm 或 ubuntu: dpkg -i nginx.deb 安裝。
3.源碼編譯安裝
原理:從Nginx官網(wǎng)下載源代碼,手動(dòng)編譯并安裝。
特點(diǎn):
- 完全自定義:可啟用/禁用模塊(如--with-http_ssl_module)、指定安裝路徑(如--prefix=/opt/nginx)。
- 性能優(yōu)化:自行調(diào)整編譯參數(shù)(如-march=native)。
- 手動(dòng)處理依賴(lài):需提前安裝開(kāi)發(fā)工具(如gcc)及依賴(lài)庫(kù)(如PCRE、OpenSSL)。
- 無(wú)自動(dòng)管理:更新需重新編譯,服務(wù)腳本需手寫(xiě)service文件。
- 獨(dú)立目錄結(jié)構(gòu):默認(rèn)安裝到/usr/local/nginx,與系統(tǒng)包隔離。

3.1 源碼編譯安裝nginx流程(ubuntu)
1. 更新apt源、下載lrzsz工具
apt update apt install -y lrzsz 用于本地主機(jī)和服務(wù)器相互傳輸文件

2.安裝依賴(lài)包
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.創(chuàng)建運(yùn)行用戶(hù)
Nginx 服務(wù)程序默認(rèn)以 nobody 身份運(yùn)行:useradd -M -s /sbin/nologin nginx

4.編譯安裝nginx

./configure --prefix=/usr/local/nginx \ #指定了Nginx的安裝目錄。在這種情況下,它將安裝在
/usr/local/nginx 目錄下。
--user=nginx --group=nginx \ #指定了運(yùn)行Nginx進(jìn)程的用戶(hù)和組。在這種情況下,它將是用戶(hù)
和組 nginx。
--with-http_gzip_static_module \ #啟用了支持使用 .gz 擴(kuò)展名提供預(yù)壓縮文件的功能。
--with-http_flv_module \
--with-http_ssl_module \ #啟用了對(duì)HTTP連接的SSL/TLS加密支持。
--with-http_realip_module \
--with-http_v2_module \ #啟用了對(duì)HTTP2.0協(xié)議的支持
--with-http_sub_module \
--with-http_mp4_module \
--with-http_stub_status_module \ #啟用了 stub_status 模塊,提供了訪問(wèn)Nginx狀態(tài)信息的方
法。
--with-pcre \ #啟用了對(duì)Perl Compatible Regular Expressions(PCRE)
庫(kù)的支持。
--with-stream \ #啟用了對(duì)TCP/UDP代理模塊的支持。
--with-stream_ssl_module \ #啟用了對(duì)TCP/UDP連接的SSL/TLS加密支持。
--with-stream_realip_module #允許Nginx從PROXY協(xié)議頭部獲取客戶(hù)端的真實(shí)IP地址。make -j 2(cpu數(shù)量決定)

make -install (安裝)

注意:
1.讓系統(tǒng)識(shí)別nginx操作命令,將nginx的可執(zhí)行文件做上軟鏈接

2.更改nginx文件夾下的屬主屬組
chown -R nginx.nginx /usr/local/nginx

5.檢查、啟動(dòng)、重啟、停止 nginx服務(wù)
1.檢查nginx配置文件:/usr/local/nginx/conf/nginx_conf
nginx -t 檢查配置文件是否有語(yǔ)法錯(cuò)誤

2.啟動(dòng)nginx服務(wù)

3.停止nginx服務(wù)


4.重載nginx服務(wù)

5.日志分割,重新打開(kāi)日志文件
nginx 存放日志文件的位置: /usr/local/nginx/logs


生成存放成功日志、錯(cuò)誤日志的空文件:kill -USR1 $(cat /usr/local/nginx/logs/nginx.pid)

6.nginx如何前臺(tái)啟動(dòng)

3.2nginx版本平滑升級(jí)



kill -USR2 <PID號(hào)>

注意:升級(jí)完成后要使用絕對(duì)路徑啟動(dòng)服務(wù),否則升級(jí)可能會(huì)報(bào)錯(cuò)
3.3添加 Nginx 系統(tǒng)服務(wù)管理
因?yàn)榫幾g安裝沒(méi)有service文件,如果想要系統(tǒng)服務(wù)統(tǒng)一管理systemed,需要編寫(xiě)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進(jìn)程
- master 進(jìn)程 :1.管理worker子進(jìn)程 2.加載配置文件
- worker 進(jìn)程: 1.處理客戶(hù)端發(fā)送的請(qǐng)求


以處理 HTTP 請(qǐng)求為例:
- 接收連接:Worker 進(jìn)程通過(guò)
epoll監(jiān)聽(tīng)端口,接收客戶(hù)端連接。 - 讀取請(qǐng)求:若數(shù)據(jù)未到達(dá)(非阻塞),Worker 繼續(xù)處理其他連接;若數(shù)據(jù)到達(dá),讀取并解析請(qǐng)求。
- 處理請(qǐng)求:若需讀取靜態(tài)文件,發(fā)起非阻塞文件 I/O 操作;若需代理到后端,發(fā)起非阻塞網(wǎng)絡(luò)連接。
- 響應(yīng)客戶(hù)端:待所有操作完成后,通過(guò)事件回調(diào)將結(jié)果返回客戶(hù)端。
1. 核心優(yōu)勢(shì)
- 低資源消耗:?jiǎn)尉€程可處理數(shù)萬(wàn)并發(fā)連接,避免多線程的內(nèi)存開(kāi)銷(xiāo)和上下文切換。
- 高吞吐量:通過(guò)事件分發(fā)機(jī)制,最大化 CPU 和 I/O 利用率。四.nginx配置
nginx配置文件的路徑: /usr/local/nginx/conf/nginx_conf

- 1、全局塊:全局配置,對(duì)全局生效;
- 2、events塊:配置影響 Nginx 服務(wù)器與用戶(hù)的網(wǎng)絡(luò)連接;
- 3、http塊:配置代理,緩存,日志定義等絕大多數(shù)功能和第三方模塊的配置;
- 4、server塊:配置虛擬主機(jī)的相關(guān)參數(shù),一個(gè) http 塊中可以有多個(gè) server 塊;
- 5、location塊:用于配置匹配的 urI (域名后面的部分);
- 6、upstream:配置后端服務(wù)器具體地址,負(fù)載均衡配置不可或缺的部分。
全局塊:全局配置,對(duì)全局生效;

- events塊:配置影響 Nginx 服務(wù)器與用戶(hù)的網(wǎng)絡(luò)連接;

- http塊:配置代理,緩存,日志定義等絕大多數(shù)功能和第三方模塊的配置;

注意:http模塊中還可以第三方模塊的配置
- server塊:配置虛擬主機(jī)的相關(guān)參數(shù),一個(gè) http 塊中可以有多個(gè) server 塊;
- location塊:用于配置匹配的 urI (域名后面的部分);

- upstream:配置后端服務(wù)器具體地址,負(fù)載均衡配置不可或缺的部分。
總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
nginx配置wss協(xié)議的實(shí)現(xiàn)
本文主要介紹了nginx配置wss協(xié)議的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2023-03-03
一段萬(wàn)能的nginx接口實(shí)現(xiàn)反向代理配置
這篇文章主要介紹了一段萬(wàn)能的nginx接口實(shí)現(xiàn)反向代理配置,詳細(xì)的介紹了什么是反向代理及其接口反向代理的實(shí)現(xiàn),非常具有實(shí)用價(jià)值,需要的朋友可以參考下2018-10-10
Nginx使用反向代理實(shí)現(xiàn)負(fù)載均衡過(guò)程解析
這篇文章主要介紹了Nginx使用反向代理實(shí)現(xiàn)負(fù)載均衡過(guò)程解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-09-09
nginx幾種網(wǎng)頁(yè)重定向(rewirte)的配置方法詳解
這篇文章主要詳細(xì)介紹了nginx幾種網(wǎng)頁(yè)重定向(rewirte)的配置方法,文中通過(guò)代碼示例和圖文介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作有一定的幫助,需要的朋友可以參考下2024-02-02
關(guān)于Nginx服務(wù)器可視化配置問(wèn)題
Nginx是一款輕量級(jí)的Web 服務(wù)器/反向代理服務(wù)器及電子郵件(IMAP/POP3)代理服務(wù)器,在BSD-like 協(xié)議下發(fā)行,這篇文章主要介紹了Nginx服務(wù)器可視化配置,需要的朋友可以參考下2022-10-10
詳解nginx使用ssl模塊配置支持HTTPS訪問(wèn)
這篇文章主要介紹了詳解nginx使用ssl模塊配置支持HTTPS訪問(wèn),小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2018-08-08

