天天看點

Nginx的搭建與核心配置(圖文詳解)

作者:98dev

一.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

  1. 編譯安裝

    關閉防火牆,将安裝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 #檢視服務狀态(驗證
Nginx的搭建與核心配置(圖文詳解)

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
#修改屬性和賦予執行權限
           
Nginx的搭建與核心配置(圖文詳解)

第二步:修改主配置檔案相應的目錄,添加認真配置

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的搭建與核心配置(圖文詳解)

第三步:檢查錯誤,重新開機服務,通路測試

nginx -t
systemctl restart nginx.service 
curl 192.168.79.210
           
Nginx的搭建與核心配置(圖文詳解)
Nginx的搭建與核心配置(圖文詳解)

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; #允許其他所有用戶端通路
 }
           
Nginx的搭建與核心配置(圖文詳解)

第二步:重新開機服務

systemctl restart nginx.service 
           
Nginx的搭建與核心配置(圖文詳解)

第三步:被拒絕的用戶端通路測試

192.168.79.220通路
curl 192.168.79.210
           
Nginx的搭建與核心配置(圖文詳解)

第四步:其他用戶端通路測試

192.168.79.210通路
curl 192.168.79.210

192.168.79.230通路
curl 192.168.79.210
           
Nginx的搭建與核心配置(圖文詳解)
Nginx的搭建與核心配置(圖文詳解)

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 
           
Nginx的搭建與核心配置(圖文詳解)

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的搭建與核心配置(圖文詳解)
Nginx的搭建與核心配置(圖文詳解)

第二步:檢查配置檔案,重新開機服務

nginx -t
systemctl restart nginx.service
           
Nginx的搭建與核心配置(圖文詳解)

第三步:用戶端上通路測試

curl 192.168.79.210:80
curl 192.168.79.211:80
           
Nginx的搭建與核心配置(圖文詳解)

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的搭建與核心配置(圖文詳解)

第二步:檢查配置檔案,重新開機服務

nginx -t
systemctl restart nginx.service
           
Nginx的搭建與核心配置(圖文詳解)

第三步:用戶端上通路測試

curl 192.168.79.210:666
curl 192.168.79.211:888
           
Nginx的搭建與核心配置(圖文詳解)

*******波哥福利區*******

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 入學習交流群

繼續閱讀