寫在前面
Centos版本:Centos 7.6 - 64bit
Nginx版本:1.20.2
一、什么是Nginx
Nginx (engine x) 是一款輕量級的Web 服務器 、反向代理服務器及電子郵件(IMAP/POP3)代理服務器。
二、Nginx用在哪些地方
2.1 靜態(tài)資源服務
動靜分離:為了加快網(wǎng)站的解析速度,可以把動態(tài)頁面和靜態(tài)頁面由不同的服務器來解析,加快解析速度,降低原來單個服務器的壓力。本質(zhì)上是通過本地文件系統(tǒng)來提供服務;
一般來說,都需要將動態(tài)資源和靜態(tài)資源分開,由于 Nginx 的高并發(fā)和靜態(tài)資源緩存等特性,經(jīng)常將靜態(tài)資源部署在 Nginx 上。如果請求的是靜態(tài)資源,直接到靜態(tài)資源目錄獲取資源,如果是動態(tài)資源的請求,則利用反向代理的原理,把請求轉(zhuǎn)發(fā)給對應后臺應用去處理,從而實現(xiàn)動靜分離。
使用前后端分離后,可以很大程度提升靜態(tài)資源的訪問速度,即使動態(tài)服務不可用,靜態(tài)資源的訪問也不會受到影響。
2.2 正向代理和反向代理(負載均衡)
正向代理
正向代理就是客戶端將自己的請求先發(fā)給代理服務器,通過代理服務器將請求轉(zhuǎn)發(fā)給服務器。我們常用的VPN就是一種代理服務器。比如:你想要訪問國外的某個網(wǎng)站,你的客戶端就需要連接上一個可以連訪問外網(wǎng)的服務器。正向代理代理的是客戶端。
反向代理
反向代理,反向代理代理的是服務器。在有多個服務器的情況下,為了能讓客戶端訪問到的ip地址都為同一個網(wǎng)站,就需要使用反向代理。比如:一開始單臺機器可以對外提供服務,在用戶請求暴增的情況下,就需要多個機器對外提供相同的服務,此時就需要使用nginx作為反向代理,用戶只需要訪問特定的服務器,nginx會自動根據(jù)各個機器的負載情況,將請求轉(zhuǎn)發(fā)到不同的機器。
2.3 負載均衡策略
- 輪詢:按照順序?qū)⒄埱筠D(zhuǎn)發(fā)到后臺機器
- 加權(quán)輪詢:根據(jù)機器性能的不同,為每個機器設置不同的權(quán)重。比如:可以為內(nèi)存大、性能強勁的機器分配較大的權(quán)重,使其處理更多的請求。
- ip hash綁定服務器:對客戶端ip進行hash操作,并對機器個數(shù)取余,使其分配到固定的機器。缺點:不易于水平擴展。
- 一致性哈希:水平擴展友好
三、Nginx安裝
3.1 安裝編譯環(huán)境及第三方依賴
Nginx的配置及運行需要pcre、zlib等軟件包的支持,因此需要安裝這些軟件包的開發(fā)包,以便提供相應的庫和頭文件。
yum install gcc-c++ // 安裝編譯環(huán)境
yum install zlib zlib-devel openssl openssl-devel pcre pcre-devel
3.2 下載nginx安裝包
wget http://nginx.org/download/nginx-1.20.0.tar.gz
tar -zxvf nginx-1.20.0.tar.gz // 解壓
cd nginx-1.20.0 // 進入解壓目錄
./configure --prefix=/usr/local/nginx // --prefix 指定安裝目錄,可以不寫
make
sudo make install
3.3 Nginx安裝默認目錄
其中sbin下就是nginx的可執(zhí)行程序。logs目錄下是日志:包括Nginx訪問日志和錯誤日志,及Nginx運行時的主進程的的進程號會保存在mginx.pid文件中。
html目錄下是靜態(tài)網(wǎng)頁:
conf目錄下是nginx的核心配置,主要關注 nginx.conf即可。Nginx最小的配置如下:
# 配置用戶及用戶組
user root;
#啟動多少個子進程(worker),通常設置成和cpu的數(shù)量相等
worker_processes 1;
events {
worker_connections 1024;
}
http {
include mime.types; #告訴瀏覽器以什么格式去接收和解析文件
default_type application/octet-stream;
sendfile on; #開啟零拷貝
keepalive_timeout 65;
# 虛擬主機 vhost
server {
listen 80;
server_name localhost; # 域名或者主機名
location / {
root html;
index index.html index.htm;
}
#如果服務端發(fā)生錯誤,會顯示50x.html
#http://www.baidu.com/50x.html
error_page 500 502 503 504 /50x.html;
# 去html目錄下找 50x.html,html是相對路徑,可以修改
location = /50x.html {
root html;
}
}
}
3.3.1 啟動nginx
/usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf
##### 3.3.2 停止nginx
/usr/local/nginx/sbin/nginx -s stop
3.3.3 重新加載nginx
/usr/local/nginx/sbin/nginx -s reload
3.3.4 配置文件分析
全局模塊
配置影響nginx全局的指令。一般有運行nginx服務器的用戶組,nginx進程pid存放路徑,日志存放路徑,配置文件引入,允許生成worker process數(shù)等。
user nobody; #配置用戶或者組,默認為nobody
worker_processes 1; #允許生成的進程數(shù),默認為1
error_log logs/error.log; #制定日志路徑,級別。這個設置可以放入全局塊,
#http塊,server塊,級別以此為:debug|info|notice|warn|error|crit|alert|emerg
error_log logs/error.log notice;
error_log logs/error.log info;
pid logs/nginx.pid; #指定nginx進程運行文件存放地址
events塊配置
events塊:配置影響nginx服務器或與用戶的網(wǎng)絡連接。有每個進程的最大連接數(shù),選取哪種事件驅(qū)動模型處理連接請求,是否允許同時接受多個網(wǎng)路連接,開啟多個網(wǎng)絡連接序列化等。
設置網(wǎng)絡連接的序列化
Nginx是多進程的,當某一時刻只有一個網(wǎng)絡連接達到時,多個睡眠的進程會被同時叫醒(這種現(xiàn)象叫“驚群”),但是只有一個進程可以獲得連接。如果每次喚醒的進程數(shù)太多,會影響系統(tǒng)的性能。為了解決這一問題,Nginx配置中有一條指令accpet_mutex,當其設置為開啟的時候,將會對多個Nginx的進程接收連接進行序列化,防止多個進程對連接的爭搶。語法為:
accept_mutex on | off; // #設置網(wǎng)路連接序列化,防止驚群現(xiàn)象發(fā)生,默認為on
設置是否允許同時接收多個連接
每個Nginx服務器的worker_process 都有能力同時接收多個新到達的連接,但是這需要在配置文件中進行設置,語法為:
multi_accept on | off; // 默認為off,關閉 即每個worker一次只能接收一個新到達的網(wǎng)絡連接,并且只能在events塊中進行配置
事件驅(qū)動模型的選擇
Nginx提供了多種事件驅(qū)動模型來處理網(wǎng)絡消息,語法為:
use method; // method可以為:select poll epoll kqueue等等
定義MIME_Type
在瀏覽器中,可以顯示html、XML、GIF等多種類型的文本、媒體等資源,瀏覽器為了區(qū)分這些資源,需要使用MIME Type。
我們可以看到再http全局塊中如上配置,inclue 表示從外部引用了 mime.types 文件。這個文件在 /etc/mime.types文章來源:http://www.zghlxwxcb.cn/news/detail-417058.html
推薦一個零聲學院免費教程,個人覺得老師講得不錯,
分享給大家:[Linux,Nginx,ZeroMQ,MySQL,Redis,
fastdfs,MongoDB,ZK,流媒體,CDN,P2P,K8S,Docker,
TCP/IP,協(xié)程,DPDK等技術(shù)內(nèi)容,點擊立即學習:文章來源地址http://www.zghlxwxcb.cn/news/detail-417058.html
到了這里,關于Nginx編譯安裝及配置文件詳解的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網(wǎng)!