一.Nginx是什麼?
1.Nginx概述
一款高新能、輕量級Web服務軟體
系統資源消耗低
對HTTP并發連接配接的處理能力高
單台實體伺服器可支援30 000~50 000個并發請求。
Nginx(發音同"engine x")是一個高性能的反向代理和 Web伺服器軟體,最初是由俄羅斯人 Igor Sysoev開發的。Nginx 的第一個版本釋出于2004年,其源代碼基于雙條款 BSD許可證釋出,因其系統資源消耗低、運作穩定且具有高性能的并發處理能力等特性,Nginx 在網際網路企業中得到廣泛應用。Nginx 是網際網路上最受歡迎的開源 Web 伺服器之一,它不僅提供了用于開發和傳遞的一整套應用技術,還是應用傳遞領域的開源上司者。
2019年 3月,著名硬體負載均衡廠商F5宣布收購 Nginx,Nginx成為F5的一部分。F5表示,将加強對開源和 Nginx 應用平台的投資,緻力于Nginx 開源技術、開發人員和社群的發展,更大的投資将為開放源碼計劃注人新的活力,會主辦更多的開放源碼活動,并産生更多的開放源碼内容。
2.Nginx子產品與作用
main子產品:全局配置子產品,所有子產品都要執行遵守
配置運作nginx伺服器的使用者(組)、worker_process數(程序)、nginx程序PID存放路徑、錯誤日志存放路徑、配置檔案的引入等 stream服務子產品:實作反向代理功能,包括TCP協定代理 郵件服務子產品:主要用于支援 Nginx 的郵件服務對 POP3 協定、 IMAP 協定和 SMTP協定的支援
第三方子產品:二次開發,為了擴充 Nginx 伺服器應用,完成開發者自定義功能
Json 支援、 Lua 支援等
events子產品:影響nginx伺服器與使用者的網絡連接配接
events { #events子產品設定
woker_connections 65536; #設定單個工作程序最大并發連接配接數
use epoll; #事件驅動類型選擇為epoll
accept_mutex on; #同一時刻一個請求輪流由work程序除了,即輪詢
multi_accept on; #每個工作程序同時接受多個網絡連接配接
}
http子產品:跟web服務相關,主要用于擴充标準的 HTTP 功能,讓 Nginx 能處理一些特殊的服務,包含幾個子子產品
自定義服務日志、允許sendfile方式傳輸檔案、連接配接逾時時間、單連接配接請求數上限、Flash 多媒體傳輸 、解析 GeoIP 請求、 網絡傳輸壓縮 、 安全協定 SSL 支援等
location子產品:uri網址定位
server子產品:服務子產品
配置80端口監聽、虛拟主機、DNS域名解析等
auth_basic子產品:對網頁設定使用者名密碼
gzip子產品:壓縮
proxy子產品:設定後端IP位址、端口号及http和加密的https
ssl子產品:https加密
3.Nginx三大作用:反向代理、負載均衡、動靜分離
反向代理:在服務端 配置,用戶端 通路伺服器A ,伺服器A 為代理伺服器 ,将客戶服務再轉發到伺服器B
作用:緩存,将伺服器的響應緩存在自己的記憶體中,減少伺服器壓力;
負載均衡:将使用者請求配置設定給多個伺服器;通路控制
正向代理:在用戶端 配置,配置完了再去通路具體服務,即代理伺服器 代理了用戶端 ,再去和目标伺服器 進行互動
作用:提高通路速度,隐藏用戶端真實IP位址
負載均衡:分攤到多個操作單元上進行執行,例如Web伺服器、FTP伺服器、企業關鍵應用伺服器和其它關鍵任務伺服器等,進而共同完成工作任務
nginx七層負載均衡排程算法(六種)
1、輪詢(預設排程算法)
特點:每個請求按時間順序逐一配置設定到不同的後端伺服器處理。
适用業務場景:後端伺服器硬體性能配置完全一緻,業務無特殊要求時使用。
upstream backendserver {
server 192.168.0.14:80 max_fails=2 fail_timeout=10s;
server 192.168.0.15:80 max_fails=2 fail_timeout=10s;
}
2、權重輪詢
特點:指定輪詢幾率,weight值(權重)和通路比例成正比,使用者請求按權重比例配置設定。
适用業務場景:用于後端伺服器硬體性處理能力不平均的情形。
upstream backendserver {
server 192.168.0.14:80 weight=5 max_fails=2 fail_timeout=10s;
server 192.168.0.15:80 weight=10 max_fails=2 fail_timeout=10s;
}
3、ip_hash(IP哈希)
特點:每個請求按通路ip的hash結果配置設定,這樣每個訪客固定通路一個後端伺服器,可以解決session會話保持問題。
适用業務場景:适用于需要賬号登入的系統,會話連接配接保持的業務。
upstream backendserver {
ip_hash;
server 192.168.0.14:80 max_fails=2 fail_timeout=10s;
server 192.168.0.15:80 max_fails=2 fail_timeout=10s;
}
4、最少連接配接數 least_conn
特點:按nginx反向代理與後端伺服器之間的連接配接數,連接配接數最少的優先配置設定。
适用業務場景:适用于用戶端與後端伺服器需要保持長連接配接的業務。
upstream backendserver {
least_conn; server 192.168.0.14:80 max_fails=2 fail_timeout=10s;
server 192.168.0.15:80 max_fails=2 fail_timeout=10s;
}
5、響應時間 fair(需編譯安裝第三方子產品 ngx_http_upstream_fair_module)
特點:按後端伺服器的響應時間來配置設定請求,響應時間短的優先配置設定。
适用業務場景:對通路響應速度有一定要求的業務。
upstream backendserver {
fair;
server 192.168.0.14:80 max_fails=2 fail_timeout=10s;
server 192.168.0.15:80 max_fails=2 fail_timeout=10s;
}
6、url_hash(URL配置設定 )
(需編譯安裝第三方子產品ngx_http_upstream_hash_module)
特點:按通路url的hash結果來配置設定請求,使同一個url通路到同一個後端伺服器。
适用業務場景:适用于後端伺服器為緩存伺服器時比較有效。
upstream backendserver {
server 192.168.0.14:80 max_fails=2 fail_timeout=10s;
server 192.168.0.15:80 max_fails=2 fail_timeout=10s;
hash $request_uri;
}
動靜分離:采用代理的方式,在server{}段中加入帶正則比對的location來指定比對項針對PHP的動靜分離:靜态頁面交給Nginx處理,動态頁面交給PHP-FPM子產品或Apache處理。
在Nginx的配置中,是通過location配置段配合正則比對實作靜态與動态頁面的不同處理方式,通過使用Nginx提高網站的響應速度,優化使用者體驗
二.Nginx和Apache的差異
Apache:同步多程序模型:一個連接配接對應一個程序(高穩定)
1.rewrite更強大(rewrite主要功能是實作統一資源定位符URL的跳轉)
2.子產品多,基本想到的都可以找到
3.少bug,更加穩定(nginx相對較多)
4.PHP支援比較簡單(nginx需要配合其他後端用)
5.處理動态請求更有優勢(nginx更适合靜态與反向)
Nginx:異步非阻塞模型:多個連接配接(萬級别)對應一個程序(高性能)
1.輕量級,采用C編寫,占用更少的記憶體與資源
2.抗并發/高并發,以epoll and kqueue 作為開發模型,負載能力高,高并發下能夠保持 低資源低消耗高性能(apache在PHP處理慢或前端壓力很大時,容易出現程序數飙升 進而拒絕服務)
3.處理靜态檔案好,靜态處理性能比apache高三倍以上
4.設計高度子產品化,編寫子產品相對簡單
5.配置簡潔,正則配置更簡單,且更改完可以使用 -t 測試(apache配置複雜,重新開機時發 現出錯,會很崩潰)
6.作為負載均衡伺服器,支援七層負載均衡,可以有效防止ddos攻擊
7.本身是一個反向代理伺服器,也可以作為郵件代理伺服器使用
8.支援熱部署,支援線上更新
三.安裝Nginx
-
編譯安裝
關閉防火牆,将安裝nginx所需軟體包傳到/opt目錄下
nginx安裝官網:https://nginx.org/en/download.html
nginx安裝官網:https://nginx.org/en/download.html
systemctl stop firewalld
systemctl disable firewalld
setenforce 0
# 将壓縮包傳入到/opt目錄下
cd /opt
wget http://nginx.org/download/nginx-1.18.0.tar.gz
Nginx的搭建與核心配置(圖文詳解) 安裝依賴包
#nginx的配置及運作需要pcre、zlib等軟體包的支援,是以需要安裝這些安裝的開發包,以便提供相應的庫和頭檔案
yum -y install gcc pcre-devel openssl-devel zlib-devel openssl openssl-devel
Nginx的搭建與核心配置(圖文詳解) 建立運作使用者、組(Nginx 服務程式預設以 nobody 身份運作,建議為其建立專門的使用者賬号,以便更準确地控制其通路權限)
useradd -M -s /sbin/nologin nginx
Nginx的搭建與核心配置(圖文詳解) 編譯安裝nginx tar xf nginx-1.18.0.tar.gz
cd nginx-1.18.0/
mkdir /apps/nginx -p
./configure --prefix=/apps/nginx \
--user=nginx \
--group=nginx \
--with-http_ssl_module \
--with-http_v2_module \
--with-http_realip_module \
--with-http_stub_status_module \
--with-http_gzip_static_module \
--with-pcre \
--with-stream \
--with-stream_ssl_module \
--with-stream_realip_module
make -j2 && make install
chown -R nginx.nginx /apps/nginx
Nginx的搭建與核心配置(圖文詳解)
Nginx的搭建與核心配置(圖文詳解)
Nginx的搭建與核心配置(圖文詳解) 建立軟連接配接後直接 nginx啟動 ln -s /apps/nginx/sbin/nginx /usr/sbin/
Nginx的搭建與核心配置(圖文詳解) 建立Nginx 自啟動檔案
vim /usr/lib/systemd/system/nginx.service
[Unit]
Description=nginx - high performance web server
Documentation=http://nginx.org/en/docs/
After=network-online.target remote-fs.target nss-lookup.target
Wants=network-online.target
[Service]
Type=forking
PIDFile=/apps/nginx/logs/nginx.pid
ExecStart=/apps/nginx/sbin/nginx -c /apps/nginx/conf/nginx.conf
ExecReload=/bin/kill -s HUP $MAINPID
ExecStop=/bin/kill -s TERM $MAINPID
[Install]
WantedBy=multi-user.target
Nginx的搭建與核心配置(圖文詳解) 重新加載配置、設定開機自啟并開啟服務
systemctl daemon-reload #重新加載配置
systemctl enable --now nginx #開機自啟并立即啟動
systemctl status nginx.service #檢視服務狀态(驗證
2.yum安裝
Centos7 需要安裝epel源
cd /etc/yum.repos.d
vim epel.repo
[epel]
name=epel
baseurl=https://mirrors.aliyun.com/epel/$releasever/x86_64
gpgcheck=0
yum install -y epel-release
yum install nginx -y 四.Nginx的信号使用
nginx 指令支援向其發送信号,實作不同功能
nginx -h
#查詢nginx信号使用規則
Nginx的搭建與核心配置(圖文詳解)
常用信号:
Nginx的搭建與核心配置(圖文詳解) 五.Nginx的核心配置指令
1.通路狀态統計配置 第一步:檢視已安裝的 Nginx 是否包含http_stub_status子產品
cd /usr/local/nginx/sbin
#根據安裝路徑自由修改/apps/nginx/sbin也可
nginx -V
Nginx的搭建與核心配置(圖文詳解) 第二步:修改 nginx.conf 配置檔案,指定通路位置并添加 stub_status 配置(修改之前進行備份)
cd /usr/local/nginx/conf/ #/apps/nginx/conf同理
cp nginx.conf nginx.conf.bak #備份
vim nginx.conf
server {
listen 80;
server_name www.clj.com;
charset utf-8;
#access_log logs/host.access.log main;
location / {
root html;
index index.html index.htm;
}
##添加 stub_status 配置
location /status { ##通路位置為/status
stub_status on; ##打開狀态統計功能
access_log off; ##關閉此位置的日志記錄
}
Nginx的搭建與核心配置(圖文詳解) 第三步:重新開機服務後進行通路測試 systemctl restart nginx.service
Nginx的搭建與核心配置(圖文詳解)
浏 覽器通路 http;//192.168.79.210/status
Active connections ∶ 表示目前的活動連接配接數;
server accepts handled requests∶表示已經處理的連接配接資訊,三個數字依次表示已處理的連接配接數、成功的TCP握手次數已處理的請求數。
可curl http∶//192.168.79.210/status 結合awk與if 語句進行性能監控。
2.基于授權的通路控制
第一步:生成使用者密碼認證檔案
yum install -y httpd-tools
#安裝工具
htpasswd -c /usr/local/nginx/passwd.db zhangsan
#生成使用者密碼認證檔案(注意路徑
chown nginx /usr/local/nginx/passwd.db
chmod 400 /usr/local/nginx/passwd.db
#修改屬性和賦予執行權限
第二步:修改主配置檔案相應的目錄,添加認真配置
vim /usr/local/nginx/conf/nginx.conf
#路徑/apps/nginx/conf/nginx.conf
location / {
root html;
index index.html index.htm;
#添加認證配置
auth_basic "secret"; #設定密碼提示框文字資訊
auth_basic_user_file /usr/local/nginx/passwd.db;
}
第三步:檢查錯誤,重新開機服務,通路測試
nginx -t
systemctl restart nginx.service
curl 192.168.79.210
3.基于用戶端通路控制
通路控制規則如下:deny IP/IP段:拒絕某個IP或IP段的用戶端通路。
allow IP/IP段:允許某個IP或IP段的用戶端通路。規則從上往下執行,
如果比對到則停止,不會再往下繼續比對。
第一步:在主配置檔案中添加控制規則
vim /usr/local/nginx/conf/nginx.conf
#注意路徑/apps/nginx/conf/nginx.conf
location / {
root html;
index index.html index.htm;
auth_basic "secret";
auth_basic_user_file /usr/local/nginx/passwd.db;
# 添加控制規則
deny 192.168.80.77; #拒絕通路的用戶端IP
allow all; #允許其他所有用戶端通路
}
第二步:重新開機服務
systemctl restart nginx.service
第三步:被拒絕的用戶端通路測試
192.168.79.220通路
curl 192.168.79.210
第四步:其他用戶端通路測試
192.168.79.210通路
curl 192.168.79.210
192.168.79.230通路
curl 192.168.79.210
4.基于域名的nginx虛拟主機
第一步:為虛拟主機提供域名和IP的映射
echo "192.168.79.210 www.zhuo.com www.xunizhuo.com" >> /etc/hosts
Nginx的搭建與核心配置(圖文詳解)
第二步:為虛拟主機準備網頁文檔
mkdir -p /var/www/html/zhuo/
mkdir -p /var/www/html/xunizhuo/
echo "<h1>www.zhuo.com</h1>" > /var/www/html/zhuo/index.html
echo "<h1>www.xunizhuo.com</h1>" > /var/www/html/xunizhuo/index.html
Nginx的搭建與核心配置(圖文詳解)
第三步:還原nginx主配置檔案
之前做過通路控制,是以直接将備份配置進行還原
cd /usr/local/nginx/conf #/apps/nginx/conf路徑同理
cp nginx.conf.bak nginx.conf #還原主配置檔案
Nginx的搭建與核心配置(圖文詳解)
第四步:修改主配置檔案
vim /usr/local/nginx/conf/nginx.conf
#/apps/nginx/conf/nginx.conf同理
server {
listen 80;
server_name www.xunizhuo.com; #設定域名
charset utf-8; #設定網頁字元集
access_log logs/xunizhuo.com.access.log; #設定日志名
location / {
root /var/www/html/xunizhuo; #設定www.bxb.com的工作目錄
index index.html index.htm;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
server {
listen 80;
server_name www.zhuo.com; #設定域名
charset utf-8; #設定網頁字元集
access_log logs/zhuo.com.access.log; #設定日志名
location / {
root /var/www/html/zhuo; #設定www.bxb.com的工作目錄
index index.html index.htm;
}
Nginx的搭建與核心配置(圖文詳解)
第五步:重新開機nginx後進行通路測試
systemctl restart nginx.service
curl www.zhuo.com
curl www.xunizhuo.com
5.基于IP的nginx虛拟主機
第一步:添加虛拟網卡,修改主配置檔案
ifconfig ens33:0 192.168.79.211/24
vim /usr/local/nginx/conf/nginx.conf
#/apps/nginx/conf/nginx.conf同理
server {
listen 192.168.79.210:80; #修改監聽的為ip
server_name www.xunizhuo.com;
charset utf-8;
access_log logs/xunizhuo.com.access.log;
location / {
root /var/www/html/xunizhuo;
index index.html index.htm;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
server {
listen 192.168.79.211:80; #修改監聽的為ip
server_name www.zhuo.com;
charset utf-8;
access_log logs/zhuo.com.access.log;
location / {
root /var/www/html/zhuo;
index index.html index.htm;
}
第二步:檢查配置檔案,重新開機服務
nginx -t
systemctl restart nginx.service
第三步:用戶端上通路測試
curl 192.168.79.210:80
curl 192.168.79.211:80
6.基于端口的nginx虛拟主機
第一步:修改主配置檔案
vim /usr/local/nginx/conf/nginx.conf
#/apps/nginx/conf/nginx.conf同理
server {
listen 192.168.79.210:666; #修改監聽的為ip的666端口
server_name www.xunizhuo.com;
charset utf-8;
access_log logs/xunizhuo.com.access.log;
location / {
root /var/www/html/xunizhuo;
index index.html index.htm;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
server {
listen 192.168.79.211:888; #修改監聽的為ip的888端口
server_name www.zhuo.com;
charset utf-8;
access_log logs/zhuo.com.access.log;
location / {
root /var/www/html/zhuo;
index index.html index.htm;
}
第二步:檢查配置檔案,重新開機服務
nginx -t
systemctl restart nginx.service
第三步:用戶端上通路測試
curl 192.168.79.210:666
curl 192.168.79.211:888
*******波哥福利區*******
1、騰訊雲服務産品1折購買入口
https://url.cn/0TJSTg08
2、華為雲優惠大放送,凡是華為雲新使用者,且首次購買産品,實付款大于200元且小于2000元(以華為雲官網優惠價為準)再享受折上7折活動,
填寫表單添加小助手擷取活動參與方式:
http://vzsbrr4yp4xvw6n0.mikecrm.com/rf5aA1E
(華為雲活動産品可從表單内連結進入檢視,或者點選原文連結也可以通路)
波哥
IT行業近二十年的IT老炮。常年潛伏于國企、各一二線大廠中。硬體內建入行,直至虛拟技術、容器化。崗位曆經系統內建、DBA、全棧開發、sre、項目經理、産品經理、部門總監。主要作品:
- IT類資源彙聚門戶:https://www.98dev.com
- 各大短視訊平台:98dev
- 各大主要技術論壇部落格:IT運維技術圈
- 長視訊教學作品:《波哥講網絡》《波哥講git》《波哥講gitlab》
- 小程式:IT面試精選
- 建構技術社群:+V itboge1521 入學習交流群