一、基本了解
nginx簡介:
- nginx是一款輕量級(jí)的Web服務(wù)器、反向代理服務(wù)器及電子郵件(IMAP/POP3)代理服務(wù)器,并在一個(gè)BSD-like協(xié)議下發(fā)行。
- nginx由俄羅斯的程序設(shè)計(jì)師Igor Sysoev所開發(fā),最初供俄國大型的入口網(wǎng)站及搜尋引擎Rambler使用。
- nginx第一個(gè)公開版本0.1.0發(fā)布于2004年10月4日。其將源代碼以類BSD許可證的形式發(fā)布,因它的穩(wěn)定性、豐富的功能集、示例配置文件和低系統(tǒng)資源的消耗而聞名。2011年6月1日,nginx 1.0.4發(fā)布。
- nginx的特點(diǎn)是占有內(nèi)存少,并發(fā)能力強(qiáng),事實(shí)上nginx的并發(fā)能力確實(shí)在同類型的網(wǎng)頁服務(wù)器中表現(xiàn)較好,中國大陸使用nginx網(wǎng)站用戶有:百度、京東、新浪、網(wǎng)易、騰訊、淘寶等。
1.1 特性優(yōu)點(diǎn)
nginx特性:
- 在高連接并發(fā)的情況下,nginx是Apache服務(wù)器不錯(cuò)的替代品,能夠支持高達(dá)50000個(gè)并發(fā)連接數(shù)的響應(yīng)。
- 使用epoll and kqueue作為開發(fā)模型。
- nginx作為負(fù)載均衡服務(wù)器:nginx既可在內(nèi)部直接支持和PHP程序?qū)ν膺M(jìn)行服務(wù),也可支持作為HTTP代理服務(wù)器對(duì)外進(jìn)行服務(wù)。
- nginx采用C進(jìn)行編寫,不論系統(tǒng)資源開銷還是CPU使用效率都比Perlbal要好很多
nginx優(yōu)點(diǎn):
- 高并發(fā)連接:官方測試能夠支撐5萬并發(fā)連接,在實(shí)際生產(chǎn)環(huán)境中跑到2-3萬并發(fā)連接數(shù)。
- 內(nèi)存消耗少:在3萬并發(fā)連接下,開啟的10個(gè)nginx進(jìn)程才消耗150M內(nèi)存(15M*10=150M)。
- 配置文件非常簡單:風(fēng)格跟程序一樣通俗易懂。
- 成本低廉:nginx為開源軟件,可以免費(fèi)使用。而購買F5 BIG-IP、NetScaler等硬件負(fù)載均衡交換機(jī)則需要十多萬至幾十萬人民幣。
- 支持Rewrite重寫規(guī)則:能夠根據(jù)域名、URL的不同,將HTTP請(qǐng)求分到不同的后端服務(wù)器群組。
- 內(nèi)置的健康檢查功能:如果Nginx Proxy后端的某臺(tái)Web服務(wù)器宕機(jī)了,不會(huì)影響前端訪問。
- 節(jié)省帶寬:支持GZIP壓縮,可以添加瀏覽器本地緩存的Header頭。
- 穩(wěn)定性高:用于反向代理,宕機(jī)的概率微乎其微。
- 模塊化設(shè)計(jì):模塊可以動(dòng)態(tài)編譯。
- 外圍支持好:文檔全,二次開發(fā)和模塊較多。
- 支持熱部署:可以不停機(jī)重載配置文件。
- 支持事件驅(qū)動(dòng)、AIO(AsyncIO,異步IO)、mmap(Memory Map,內(nèi)存映射)等性能優(yōu)化
1.2 功能應(yīng)用
nginx基本功能:
- 靜態(tài)資源的web服務(wù)器,能緩存打開的文件描述符。
- http、smtp、pop3協(xié)議的反向代理服務(wù)器。
- 緩存加速、負(fù)載均衡。
- 支持FastCGI(fpm,LNMP),uWSGI(Python)等。
- 模塊化(非DSO機(jī)制),過濾器zip、SSI及圖像的大小調(diào)整。
- 支持SSL。
nginx擴(kuò)展功能:
- 基于名稱和IP的虛擬主機(jī)。
- 支持keepalive長連接。
- 支持平滑升級(jí)。
- 定制訪問日志、支持使用日志緩沖區(qū)提高日志存儲(chǔ)性能。
- 支持URL重寫。
- 支持路徑別名。
- 支持基于IP及用戶的訪問控制。
- 支持速率限制,支持并發(fā)數(shù)限制。
nginx應(yīng)用類別:
- 使用nginx結(jié)合FastCGI運(yùn)行PHP、JSP、Perl等程序。
- 使用nginx作反向代理、負(fù)載均衡、規(guī)則過濾。
- 使用nginx運(yùn)行靜態(tài)HTML網(wǎng)頁、圖片。
- nginx與其他新技術(shù)的結(jié)合應(yīng)用。
1.3 工作模塊分類
基本了解:
- nginx由內(nèi)核和模塊組成。內(nèi)核的設(shè)計(jì)非常微小和簡潔,完成的工作也非常簡單,僅僅通過查找配置文件將客戶端請(qǐng)求映射到一個(gè)location block,而在這個(gè)location中所配置的每個(gè)指令將會(huì)啟動(dòng)不同的模塊去完成相應(yīng)的工作。
- location是nginx配置文件中的一個(gè)參數(shù),指定網(wǎng)頁訪問的根地址,location參數(shù)后面指定要訪問的網(wǎng)頁文件路徑。
- nginx的模塊從結(jié)構(gòu)上分為核心模塊、基礎(chǔ)模塊和第三方模塊
模塊分類:
- 核心模塊:HTTP模塊(訪問網(wǎng)站)、EVENT模塊(記錄事件)、MAIL模塊(發(fā)送郵件)等。
- 基本模塊:HTTP Access模塊(訪問)、HTTP FastCGI模塊(lnmp)、HTTP Proxy模塊(反向代理)、HTTP Rewrite模塊(重定向URL)。
- 第三方模塊:HTTP Upstream模塊、Request Hash模塊、Notice模塊和HTTP Access Key模塊。
注意事項(xiàng):
- 基本模塊在編譯時(shí)默認(rèn)是開啟狀態(tài),不能被禁用。
- 基本模塊包括:
- 核心模塊(提供基本功能和指令),常見核心模塊指令大部分是放置在配置文件的頂部,需要頂行寫,不能有空格和括號(hào)包含關(guān)系。
- 事件模塊(Nginx內(nèi)配置網(wǎng)絡(luò)使用的能力),常見的events(事件)模塊指令,大部分是放置在配置文件的頂部。
- 配置模塊(提供包含機(jī)制),指主配置文件中可以通過引用其他路徑下的配置文件參數(shù)實(shí)現(xiàn)功能,可以簡化配置文件,方便閱讀。
功能模塊分類 | 作用 |
---|---|
Proxies(代理器模塊) | 就是nginx的HTTP Upstream之類的模塊,主要與后端服務(wù)比如fastcgi等操作交互,實(shí)現(xiàn)服務(wù)代理和負(fù)載均衡等功能。 |
Handlers(處理器模塊) | 此類模塊直接處理請(qǐng)求,并進(jìn)行輸出內(nèi)容和修改headers信息等操作。handlers處理器模塊一般只能有一個(gè)。 |
Filters(過濾器模塊) | 此類模塊主要對(duì)其他處理器模塊輸出的內(nèi)容進(jìn)行修改操作,最后由nginx輸出。 |
1.4 模塊配置方法
- 官方核心模塊配置文檔
1.如下圖。這個(gè)核心模塊參數(shù)可以配置在配置文件中的events中的括號(hào)里。
2.如下圖。這個(gè)配置參數(shù)只能單獨(dú)寫一行,且頂行寫,不能存在任何一個(gè)括號(hào)里。
3.如下圖。這個(gè)配置參數(shù)可以配置在main, http, mail, stream, server, location任意位置。
- main:對(duì)本機(jī)所有網(wǎng)站生效。
- http:對(duì)所有server網(wǎng)站生效。
- server:對(duì)某一個(gè)網(wǎng)站生效。
- location:對(duì)某一個(gè)網(wǎng)站中的某一個(gè)訪問頁面生效。
二、工作原理
基本了解:
- nginx的模塊直接被編譯進(jìn)nginx,屬于靜態(tài)編譯。若要使用其他模塊功能時(shí),再添加模塊編譯,屬于動(dòng)態(tài)編譯。
- 啟動(dòng)nginx后,nginx的模塊被自動(dòng)加載,與Apache不一樣,首先將模塊編譯為一個(gè)so文件,然后在配置文件中指定是否進(jìn)行加載。
- 在解析配置文件時(shí),nginx的每個(gè)模塊都有可能去處理某個(gè)請(qǐng)求,但是同一個(gè)處理請(qǐng)求只能由一個(gè)模塊來完成。
nginx進(jìn)程架構(gòu):
- 啟動(dòng)nginx時(shí),會(huì)啟動(dòng)一個(gè)Master進(jìn)程,這個(gè)進(jìn)程不處理任何客戶端的請(qǐng)求,主要用來產(chǎn)生worker線程。
- 每個(gè)worker線程下有多個(gè)工作模塊,根據(jù)不同的客戶端請(qǐng)求,各個(gè)工作模塊分別對(duì)應(yīng)處理一個(gè)請(qǐng)求。
- 當(dāng)客戶端請(qǐng)求web網(wǎng)站時(shí),實(shí)際上是請(qǐng)求master進(jìn)程產(chǎn)生的worker線程中的工作模塊。
![]()
HTTP請(qǐng)求和響應(yīng)的過程:
- 客戶端發(fā)出請(qǐng)求,經(jīng)過負(fù)載均衡高可用代理服務(wù)器后,到達(dá)某一臺(tái)nginx服務(wù)器。
- nginx程序收到請(qǐng)求后,選擇一個(gè)處理器模塊進(jìn)行處理,再通過過濾器模塊生成請(qǐng)求內(nèi)容,再繼續(xù)寧內(nèi)容處理。
- 最后將處理結(jié)果發(fā)送給客戶端。
![]()
WEB服務(wù)請(qǐng)求步驟:
- 客戶都安訪問網(wǎng)站url,比如訪問的是80端口,就需要建立tcp連接進(jìn)行三次握手。
- 建立連接后,nginx服務(wù)端收到客戶都安請(qǐng)求,開始調(diào)用處理器模塊處理請(qǐng)求,根據(jù)客戶端的請(qǐng)求去尋找資源。
- 找到資源后,就開始輸出結(jié)果,建立響應(yīng)報(bào)文,最后發(fā)送給客戶端。
- 最后,nginx服務(wù)端記錄整個(gè)過程的日志。
![]()
三、安裝與配置
- 下載地址
1.創(chuàng)建系統(tǒng)用戶nginx。
useradd -r -M -s /sbin/nologin nginx
2.安裝依賴包。
yum -y install pcre-devel openssl openssl-devel gd-devel gcc gcc-c++ make
yum -y groups mark install 'Development Tools'
3.創(chuàng)建日志存放目錄。
mkdir -p /var/log/nginx
chown -R nginx.nginx /var/log/nginx
4.下載nginx安裝包,,解壓,編譯安裝。
wget http://nginx.org/download/nginx-1.24.0.tar.gz
tar zxf nginx-1.24.0.tar.gz
cd nginx-1.24.0
//編譯模塊。
./configure \
--prefix=/usr/local/nginx \
--user=nginx \
--group=nginx \
--with-debug \
--with-http_ssl_module \
--with-http_realip_module \
--with-http_image_filter_module \
--with-http_gunzip_module \
--with-http_gzip_static_module \
--with-http_stub_status_module \
--http-log-path=/var/log/nginx/access.log \
--error-log-path=/var/log/nginx/error.log
//安裝。
make -j $(nproc) && make install
5.配置環(huán)境變量,啟動(dòng)nginx服務(wù)。
echo 'export PATH=/usr/local/nginx/sbin:$PATH' > /etc/profile.d/nginx.sh
source /etc/profile.d/nginx.sh
//啟動(dòng)。
nginx
6.訪問web網(wǎng)頁。
四、常用命令
參數(shù) | 釋義 |
---|---|
-t | 檢查配置文件語法 |
-v | 輸出nginx的版本 |
-c | 指定配置文件的路徑,啟動(dòng)nginx時(shí)可以指定其他配置文件。 |
-s | 發(fā)送服務(wù)控制信號(hào),可選值有stop、quit、reopen、reload。 |
-V | 編譯時(shí)使用的參數(shù) |
1.檢查使用的配置文件語法是否正確。文章來源:http://www.zghlxwxcb.cn/news/detail-573258.html
2.查看nginx已編譯安裝的模塊。若要繼續(xù)添加模塊,則需要把已安裝的模塊一起寫進(jìn)去編譯。
3.重啟nginx服務(wù),一般都是先停止,再重新啟動(dòng)。
4.重新讀取配置文件。文章來源地址http://www.zghlxwxcb.cn/news/detail-573258.html
nginx -s reload
到了這里,關(guān)于nginx基礎(chǔ)1——工作原理、安裝配置、命令參數(shù)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!