天天看點

❤️爆肝萬字整理的綜合架構web服務之nginx詳解❤️,附建議收藏nginx 服務配置詳細介紹

文章目錄

  • nginx 服務配置詳細介紹
    • 關于作者
    • 前言
    • 一、nginx web 入門簡介
      • 1.1 什麼是nginx
      • 1.2 常見的網站服務
      • 1.3 nginx 網站服務特點
      • 1.4 網站頁面通路原理
    • 二、nginx 服務部署安裝
      • 2.1實驗環境
      • 2.2 YUM 安裝
      • 2.3 源碼編譯安裝
      • 2.4 nginx重要檔案目錄結構
      • 2.5 虛拟主機介紹及配置
        • 2.5.1利用nginx服務搭建一個網站(www)
        • 2.5.2 location介紹、location 通路控制及 優雅404顯示
        • 2.5.3 利用nginx服務搭建一個多網站(www、 love、 blog)
        • 2.5.4 企業中虛拟主機 通路方式
        • 2.5.5 基于 使用者通路 認證
        • 2.5.6 利用nginx服務搭建網站檔案共享伺服器--index of
        • 2.5.7 nginx 解決首頁亂碼問題
        • 2.5.8 利用nginx服務搭配置檔案别名功能
        • 2.5.9 利用nginx狀态子產品功能對網站進行監控
        • 2.5.10 nginx 日志功能配置及錯誤日志介紹
        • 2.5.11 利用nginx實作頁面跳轉功能
        • 2.5.12 nginx 防盜鍊配置介紹
        • 2.5.13 部署搭建網站常見錯誤
    • 三、nginx 性能優化
        • 3.1 Nginx 性能優化實戰
          • 3.1.1 配置檔案優化介紹
          • 3.1.2 核心優化介紹
        • 3.2 日志切割
        • 3.3 nginx 性能壓測試
      • 3.4 lnmp 架構源碼部署
    • 總結

nginx 服務配置詳細介紹

關于作者

📢部落格首頁:https://blog.csdn.net/weixin_42313749

hello,大家好!我是黃昏,我們一起來學linux 雲計算。如果喜歡部落格,點個贊,關注下喲

📢歡迎點贊 👍 收藏 ⭐留言 📝 如有錯誤敬請指正!

對linux 雲計算|華為|華三|思科等數通網絡技術感興趣,可以私信部落客,私信擷取教程,一起交流技術。

📢未來可期 讓生命像一團熱烈燃燒的火,直到死亡才能使它熄滅✨

前言

如果你聽說或使用過Apache 軟體,那麼很快就會熟悉nginx 軟體,與Apache 軟體類似,它是一個 俄羅斯人 lgor Sysoev 開發的。最初用在俄羅斯的大型網站上,後來将代碼公布,形成一個開源的、支撐高性能、高并發的 WWW 伺服器和代理服務軟體。

那麼今天呢,小編就結合企業工作案列,對nginx 做一個詳解的介紹。

如果有少許問題,如果少許錯誤,可以私信部落客糾正、一起學習進步!

  • ❤️爆肝萬字整理的綜合架構web服務之nginx詳解❤️,附建議收藏nginx 服務配置詳細介紹

一、nginx web 入門簡介

1.1 什麼是nginx

  • Nginx (engine x) 是一個高性能的HTTP和反向代理web伺服器
  • Nginx是一款輕量級的Web 伺服器/反向代理服 務器及電子郵件(IMAP/POP3)代理伺服器
  • nginx 可以運作在UNIX、Linux、BSD 、Mac OS X 、Solaris,以及windows 等作業系統中。随着nginx 在國内很多大型網站中的穩定高效運作,近兩年來它 逐漸被越來越多的中小型網站所使用。目前流行的Nginx Web組合被稱為 LNMP 或LEMP(linux nginx Mysql PHP ),其中E 取自 Nginx中得(enginex)

1.2 常見的網站服務

  • 處理靜态資源的服務:

    apache軟體: http://apache.org/

    nginx軟體: http://nginx.org

  • 處理動态資源的服務:

    PHP: php.net 終端浏覽器進行通路

    Tomcat(java): 利用移動端檢視網頁 安卓-java

    PYTHON: 開發難度比較低

  • ❤️爆肝萬字整理的綜合架構web服務之nginx詳解❤️,附建議收藏nginx 服務配置詳細介紹

1.3 nginx 網站服務特點

  • Nginx具有高并發,消耗記憶體少
  • 具有多種功能(web、負載均衡–LVS、網站緩存–Squid)
  • 實作通訊時使用 異步網絡IO 模型:epoll模型
  • 可以部署的平台多樣化
  • 對php可使用cgi方式和fastcgi方式
  • 補充:
    異步:(你發給我,我可以緩存,稍後在處理)
    同步:(你發我一個,我就必須處理一個)
    
               

1.4 網站頁面通路原理

  • ❤️爆肝萬字整理的綜合架構web服務之nginx詳解❤️,附建議收藏nginx 服務配置詳細介紹
  • 将域名進行解析 www.hbs.com — 10.0.0.7
  • 建立TCP的連接配接(四層協定)
    • 10.0.0.7 目标端口 8080
  • 請求封包: hosts: bbs.hbs.com
    • 沒有相同域名的server主機,會找滿足端口要求的第一個主機

      顯示主機的網站頁面

二、nginx 服務部署安裝

2.1實驗環境

系統版本 系統ip位址
Centos 7.6 10.0.0.7

2.2 YUM 安裝

  • 使用官方yum源進行安裝 安裝的是最新版本 軟體目錄結構比較标準 (推薦)
  • 配置官方nginx yum 源:
  • ❤️爆肝萬字整理的綜合架構web服務之nginx詳解❤️,附建議收藏nginx 服務配置詳細介紹
  • ❤️爆肝萬字整理的綜合架構web服務之nginx詳解❤️,附建議收藏nginx 服務配置詳細介紹
  • ❤️爆肝萬字整理的綜合架構web服務之nginx詳解❤️,附建議收藏nginx 服務配置詳細介紹
  • ❤️爆肝萬字整理的綜合架構web服務之nginx詳解❤️,附建議收藏nginx 服務配置詳細介紹
  • 安裝指令
    # 配置nginx yum源
    [[email protected]_server01~]# cat /etc/yum.repos.d/nginx.repo 
    [nginx-stable]
    name=nginx stable repo
    baseurl=http://nginx.org/packages/centos/$releasever/$basearch/
    gpgcheck=1
    enabled=1
    gpgkey=https://nginx.org/keys/nginx_signing.key
    module_hotfixes=true
    [[email protected]_server01~]# 
    
    #安裝 nginx
    [[email protected]_server01~]# yum -y install nginx 
    
    # 啟動nginx 服務,檢查安裝正确性
    [[email protected]_server01~]# systemctl start nginx
    [[email protected]_server01~]# systemctl enable nginx
    
    # 測試,打開本地浏覽器,輸入IP 位址可以通路即 安裝成功
               
  • 本地浏覽器測試
  • ❤️爆肝萬字整理的綜合架構web服務之nginx詳解❤️,附建議收藏nginx 服務配置詳細介紹
  • 清除 nginx 軟體
    #去除nginx 安裝軟體
    [[email protected]_server01~]# yum  erase nginx 
    [[email protected]_server01~]# yum clean all  
    
    # 目的是,為了示範源碼編譯安裝。後面實驗,均是源碼安裝
               

2.3 源碼編譯安裝

  • 源碼安裝步驟
    1.# 下載下傳源碼安裝包
    [[email protected]_server01~]# wget http://nginx.org/download/nginx-1.20.1.tar.gz
    --2021-08-31 13:48:54--  http://nginx.org/download/nginx-1.20.1.tar.gz
    Resolving nginx.org (nginx.org)... 3.125.197.172, 52.58.199.22, 2a05:d014:edb:5704::6, ...
    Connecting to nginx.org (nginx.org)|3.125.197.172|:80... connected.
    HTTP request sent, awaiting response... 200 OK
    Length: 1061461 (1.0M) [application/octet-stream]
    Saving to: ‘nginx-1.20.1.tar.gz’
    
    100%[=========================================================>] 1,061,461    278KB/s   in 3.7s   
    
    2021-08-31 13:48:59 (278 KB/s) - ‘nginx-1.20.1.tar.gz’ saved [1061461/1061461]
    
    
    2. # 解壓安裝包
    [[email protected]_server01~]# tar xf nginx-1.20.1.tar.gz -C /usr/src/
    
    3. # 建立系統使用者
    [[email protected]_server01~]# useradd -M -s /sbin/nologin nginx
    
    4. # 建立日志存放目錄
    [[email protected]_server01~]# mkdir -p /var/log/nginx
    
    5. # 安裝nginx 依賴包
    [[email protected]_server01~]# yum -y install pcre-devel openssl openssl-devel gd-devel gcc gcc-c++
    
    6. # 開始編譯
    [[email protected]_server01/usr/src/nginx-1.20.1]# ./configure --user=nginx --prefix=/usr/local/nginx --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 --without-http_rewrite_module
    
    7. # 編譯&&安裝
    [[email protected]_server01/usr/src/nginx-1.20.1]# make && make install
    
    8.# 檢查nginx 配置檔案是否安裝正确 ,傳回ok 即可
    [[email protected]_server01/usr/src/nginx-1.20.1]# /usr/local/nginx/sbin/nginx  -t 
    nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok
    nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful
    
               
  • 啟動nginx 服務
    # 啟動nginx 服務
    [[email protected]_server01~]# /usr/local/nginx/sbin/nginx
               
  • 補充:

    nginx 安裝後配置(可以不配),推薦配置

    # 配置nginx 環境變量
    [[email protected]_server01~]# echo 'export PATH=/usr/local/nginx/sbin:$PATH' > /etc/profile.d/nginx.sh
    [[email protected]_server01~]# source /etc/profile.d/nginx.sh 
    
    #服務控制方式,使用nginx指令
        -t  //檢查配置檔案文法
        -v  //輸出nginx的版本
        -c  //指定配置檔案的路徑
        -s  //發送服務控制信号,可選值有{stop|quit|reopen|reload}
        
    # 啟動nginx
    [[email protected]_server01~]# nginx
    [[email protected]_server01~]# ss -lant
    State       Recv-Q Send-Q    Local Address:Port                   Peer Address:Port              
    LISTEN      0      128                   *:80                                *:*                  
    LISTEN      0      128                   *:22                                *:*                  
    LISTEN      0      100           127.0.0.1:25                                *:*                  
    ESTAB       0      0              10.0.0.7:22                         10.0.0.1:62580              
    LISTEN      0      128                  :::22                               :::*                  
    LISTEN      0      100                 ::1:25                               :::*                  
    # 停止nginx
    [[email protected]_server01~]# nginx -s stop
               
  • ❤️爆肝萬字整理的綜合架構web服務之nginx詳解❤️,附建議收藏nginx 服務配置詳細介紹

2.4 nginx重要檔案目錄結構

  • /etc/nginx 配置檔案
    /var/log/nginx 日志檔案
    /usr/share/nginx/html 站點目錄
    /etc/nginx/nginx.conf nginx 主配置檔案
    /etc/nginx/conf.d/default.conf 擴充配置檔案(虛拟主機)
  • ❤️爆肝萬字整理的綜合架構web服務之nginx詳解❤️,附建議收藏nginx 服務配置詳細介紹
  • /etc/logrotate.d/

    日志切割的目錄

    [[email protected]_server01~]# rpm -ql nginx
    /etc/logrotate.d/nginx          #  實作nginx日志檔案定時切割處理
    /etc/nginx                      # nginx 配置檔案
    /etc/nginx/nginx.conf           # 主配置檔案
    /etc/nginx/conf.d/default.conf  # 虛拟主機配置檔案
    /etc/nginx/fastcgi_params
    /etc/nginx/mime.types           # 媒體資源類型檔案
    /etc/nginx/modules
    /etc/nginx/nginx.conf
    /etc/nginx/scgi_params
    ……
    等
               
  • nginx 主配置檔案介紹
    # 備份 nginx 配置檔案
    [[email protected]_server01/etc/nginx]# cp nginx.conf{,.bak}
    
    # 過濾以 空格 開頭的内容
    [[email protected]_server01/etc/nginx]# grep "^$" nginx.conf.bak
    
    # 将過濾出來的内容取反
    [[email protected]_server01/etc/nginx]# grep -v "^$" nginx.conf.bak
    
    # 過濾取反後的檔案重定向 到nginx 配置檔案中
    [[email protected]_server01/etc/nginx]# grep -v "^$" nginx.conf.bak > nginx.conf
    
    ==重要提示==
    [[email protected]_server01/etc/nginx]# cat nginx.conf
    # 第一部分:配置檔案主區域配置
    
    user  nginx;                             # 定義worker程序管理的使用者
    worker_processes  auto;                  # 定義有幾個worker程序,它等于CPU 核數  /核數的2倍                      
    error_log  /var/log/nginx/error.log notice;   #定義錯誤日志
    pid        /var/run/nginx.pid;                            #定義PID 檔案路徑資訊
    
    
    # 第二個部分: 配置檔案事件區域
    events {
    worker_connections  1024;   ---- 一個worker程序同時可以接受1024個通路請求
    }
    
    
    # 配置http 區域
    http {
    include       /etc/nginx/mime.types;    ---- 加載一個配置檔案
    default_type  application/octet-stream; ---- 指定預設識别檔案類型
    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                    '$status $body_bytes_sent "$http_referer" '
                    '"$http_user_agent" "$http_x_forwarded_for"';
                                          ---- 定義日志的格式
    access_log  /var/log/nginx/access.log  main; ---- 指定日志路徑,調用日志    
    sendfile        on;                ---- 特殊的資料傳輸功能
    #tcp_nopush     on; 
    參數sendfile on 用于開啟檔案高效傳輸模式,同時将tcp_nopush on 和tcp_nodelay on 兩個指令設定為on,可防止網絡及磁盤I/O阻塞,提升Nginx工作效率
    
    keepalive_timeout  65;             ----逾時時間
    #gzip  on;
    include /etc/nginx/conf.d/*.conf;  - --- 加載一個配置檔案
    }
    
    
    # 第四個部分: server區域資訊(配置一個網站 www/bbs/blog -- 一個虛拟主機)
    server {
      listen       8080;                --- 指定監聽的端口
      server_name  www.oldboy.com;      --- 指定網站域名                     
      root   /usr/share/nginx/html;     --- 定義站點目錄的位置
      index  index.html index.htm;      --- 定義首頁檔案
      error_page   500 502 503 504  /50x.html;   --- 優雅顯示頁面資訊
      location = /50x.html {
          root   /usr/share/nginx/html;
      }
    }
    ============分割線==============分割線===================分割線=================
    補充:nginx 程序,他有2個程序
    master process:主程序    ----管理服務是否正常運作
    worker process:工作程序  ----處理使用者的通路請求
    
    [[email protected]_server01/etc/nginx]# ps -ef|grep nginx
    root      35183      1  0 11:54 ?        00:00:00 nginx: master process nginx
    nginx     35184  35183  0 11:54 ?        00:00:00 nginx: worker process
    root      35419  35155  0 13:04 pts/0    00:00:00 grep --color=auto nginx
               

2.5 虛拟主機介紹及配置

  • 虛拟主機配置
    在真實的伺服器環境,為了充分利用伺服器資源,一台nginx web伺服器同時會配置N個虛拟域名主機,即多個域名對于同樣一個80端口。然後伺服器IP數量很多,也可以配置基于多個IP對應同一個端口。
  • 配置虛拟主機配置檔案介紹
    [[email protected]_server01/etc/nginx]# cd conf.d/
    [[email protected]_server01/etc/nginx/conf.d]# cp default.conf{,.bak}     #先備份配置檔案
    
    #過濾空格、# 開頭的内容。(^$ 空格空格開頭,^# #号開頭、-v 取反)
    [[email protected]_server01/etc/nginx/conf.d]# egrep -v "^$|#" default.conf.bak 
    server {
        listen       80;
        server_name  localhost;
        location / {
            root   /usr/share/nginx/html;
            index  index.html index.htm;
        }
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   /usr/share/nginx/html;
        }
    }
    [[email protected]_server01/etc/nginx/conf.d]# egrep -v "^$|#" default.conf.bak  > default.conf
    [[email protected]_server01/etc/nginx/conf.d]# cat default.conf
    server {
        listen       8080;         -----指定監聽端口,原本80,這裡我修改成8080(目的是為了做第一個簡單的www網站)
        server_name  localhost;    ----指定網站域名
       
       location / {               ----通過指定模式來與用戶端請求的URI相`比對`
            root   /usr/share/nginx/html; ---- 定義站點目錄的位置
            index  index.html index.htm;  ---- 定義首頁檔案
        }
        error_page   500 502 503 504  /50x.html;  ---- 優雅顯示頁面資訊
        location = /50x.html {
            root   /usr/share/nginx/html;
        }
    }
    [[email protected]_server01/etc/nginx/conf.d]# 
               

2.5.1利用nginx服務搭建一個網站(www)

前提是,你把

/etc/nginx/conf.d/default.conf

,80端口 修改成8080或其他端口。

否則看不到效果,每次看到的都是 預設歡迎界面

# 第一步:進入到虛拟主機配置檔案目錄
[[email protected]_server01~]# cd /etc/nginx/conf.d/
[[email protected]_server01/etc/nginx/conf.d]# ls
default.conf  default.conf.bak  www.conf
[[email protected]_server01/etc/nginx/conf.d]# vim www.conf
[[email protected]_server01/etc/nginx/conf.d]# cat www.conf 
server {
  listen        80;
  server_name   www.hbs.com;
  location  / {
           root   /usr/share/nginx/html;
           index  hbs.html;
}
}
[[email protected]_server01/etc/nginx/conf.d]# 
           
第二個曆程: 需要擷取開發人員編寫的網站代碼
# 這裡自己寫一個測試網頁

[[email protected]_server01/etc/nginx/conf.d]# cd /usr/share/nginx/html/
[[email protected]_server01/usr/share/nginx/html]# cat hbs.html 
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>我的第一個html</title>
</head>
<body>
<h1>大家好!我是黃昏</h1>
<p>nginx配置的第一個簡單的html</p>
</body>
</html>
[[email protected]_server01/usr/share/nginx/html]# ls
50x.html  hbs.html  index.html
           
第三個曆程: 重新開機nginx服務
第三個曆程: 重新開機nginx服務(平滑重新開機)
	兩種方法:
	systemctl reload nginx 
	nginx -s reload
	
	nginx指令參數
	-t            : test configuration and exit
	                檢查測試配置檔案文法
	-s            : send signal to a master process: stop, quit, reopen, reload
	                控制服務停止或者重新啟動
           
第四個曆程: 編寫DNS配置資訊
第四個曆程: 編寫DNS配置資訊
真實域名: 在阿裡雲上進行DNS解析記錄配置
	模拟域名: 在windows主機的hosts檔案中進行配置即可
	          C:\Windows\System32\drivers\etc\hosts
	          10.0.0.7  www.hbs.com  hosts檔案末尾添加Ip 域名
           
第五個曆程: 進行測試通路
第五個曆程: 進行測試通路
	浏覽器中: http://www.oldboy.com
           
  • ❤️爆肝萬字整理的綜合架構web服務之nginx詳解❤️,附建議收藏nginx 服務配置詳細介紹

2.5.2 location介紹、location 通路控制及 優雅404顯示

  • location 介紹:
    允許根據使用者請求的URI來比對定義的各location,比對到時,此請求将被相應的location配置塊中的配置所處理,例如做通路控制等功能
    
    = 精确比對
    location = /hbs 
    
    ~ 正規表達式,區分大消息
    location ~ ^/hbs$
     
    ~* 不區分大小寫
    location ~* ^/hbs$ 
    比對順序:
    帶有=的精确比對優先
    正規表達式按照他們在配置檔案中定義的順序
    帶有^~修飾符的,開頭比對
               
  • ❤️爆肝萬字整理的綜合架構web服務之nginx詳解❤️,附建議收藏nginx 服務配置詳細介紹
  • location 通路控制
    用于location段
    allow:設定允許哪台或哪些主機通路,多個參數間用空格隔開
    deny:設定禁止哪台或哪些主機通路,多個參數間用空格隔開
    示例:
    
    allow 192.168.1.1/32 172.16.0.0/16;
    deny all;
    
    # 放行了10.0.0.81/32 172.16.0.0/16,拒絕了其它ip位址
    location  /hbs {
                     root   /usr/share/nginx/html;
                     index  hbs.html;
                     allow 10.0.0.81/32 172.16.0.0/16
                     deny all
        }
               
  • ❤️爆肝萬字整理的綜合架構web服務之nginx詳解❤️,附建議收藏nginx 服務配置詳細介紹
  • ❤️爆肝萬字整理的綜合架構web服務之nginx詳解❤️,附建議收藏nginx 服務配置詳細介紹
  • 補充:通路政策配置寫法
    寫法1:
     server {
             listen        80;
             server_name   www.hbs.com;
               root  /html/www;
               index index.html;
             location /AV {
               deny  10.0.0.0/24;
               allow 172.16.1.0/24;
             }
          }
     
     寫法2:
     server {
             listen        80;
             server_name   www.hbs.com;
             location / {
               root  /html/www;
               index index.html;
             }
             location /AV {
               deny  10.0.0.0/24;
               allow 172.16.1.0/24;
               root  /html/www;
               index index.html;
             }
          }
          補充: 
    	  location外面的資訊, 全局配置資訊
    	  location裡面的資訊, 局部配置資訊
               
  • 優雅界面404 顯示

2.5.3 利用nginx服務搭建一個多網站(www、 love、 blog)

  • 第一步:建立三個配置檔案
    [[email protected]_server01/etc/nginx/conf.d]# ls
    bbs.conf  blog.conf  default.conf  default.conf.bak  www.conf
    # www.conf 配置檔案
    [[email protected]_server01/etc/nginx/conf.d]# cat www.conf 
    server {
       listen      80;
       server_name  www.hbs.com;
       location / {
           root   /usr/share/nginx/html/www;
           index  index.html;
       }
    }
    
    # bbs.conf 配置檔案
    [[email protected]_server01/etc/nginx/conf.d]# cat bbs.conf 
    server {
        listen        80;
        server_name   bbs.hbs.com;
        location  / {
           root   /usr/share/nginx/html/bbs;
           index  index.html;
        }
    }
    
    # blog.conf 配置檔案
    [[email protected]_server01/etc/nginx/conf.d]# cat blog.conf 
    server {
       listen        80;
       server_name   blog.hbs.com;
       location  / {
           root   /usr/share/nginx/html/blog;
           index  index.html;
        }
    }
    [[email protected]_server01/etc/nginx/conf.d]# 
               
  • 第二步:建立站點目錄和目錄中首頁檔案
    # 常見站點目錄
    [[email protected]_server01~]# mkdir -p /usr/share/nginx/html/{www,bbs,blog}
    
    # 建立站點首頁檔案
    [[email protected]_server01/usr/share/nginx/html]# ls
    50x.html  bbs  blog  index.html  www
    [[email protected]_server01/usr/share/nginx/html]# cat www/index.html 
    <!DOCTYPE html>
    <html>
    <head>
    <meta charset="utf-8">
    <title>我的第一個html</title>
    </head>
    <body>
        <h1>大家好!我是黃昏</h1>
        <p>10.0.0.7 www.hbs.com</p>
    </body>
    </html>
    ……
    # 重新開機 nginx
    [[email protected]_server01~]# systemctl stop nginx
    [[email protected]_server01~]# systemctl start nginx
               
  • 添加hosts 檔案:
  • ❤️爆肝萬字整理的綜合架構web服務之nginx詳解❤️,附建議收藏nginx 服務配置詳細介紹
  • 測試
  • ❤️爆肝萬字整理的綜合架構web服務之nginx詳解❤️,附建議收藏nginx 服務配置詳細介紹

2.5.4 企業中虛拟主機 通路方式

  • 基于域名的方式方式進行通路
  • 基于位址的方式進行通路(隻能用指定位址通路)—

    負載均衡+高可用服務

    server {
             listen        10.0.0.7:80;   # 填寫位址
             server_name   www.hbs.com;
             location  / {
               root  /html/www;
               index index.html;
             }
          }
          
     配置完畢了,需要關閉/重新開機nginx
               
  • 基于端口的方式進行通路:(

    zabbix服務(apache:80) + web服務(nginx:80) --> 2個端口重複

    )
    # 修改端口
    
    [[email protected]_server01/etc/nginx/conf.d]# cat www.conf 
    server {
       listen      8080;
       server_name  www.hbs.com;
       location / {
           root   /usr/share/nginx/html/www;
           index  index.html;
       }
    }
    [[email protected]_server01/etc/nginx/conf.d]# 
    
    [[email protected]_server01/etc/nginx/conf.d]# systemctl restart nginx
    [[email protected]_server01/etc/nginx/conf.d]# netstat -lntup|grep 80
    tcp        0      0 0.0.0.0:8080            0.0.0.0:*               LISTEN      38784/nginx: master 
    tcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN      38784/nginx: master 
    [[email protected]_server01/etc/nginx/conf.d]# 
    
               
  • ❤️爆肝萬字整理的綜合架構web服務之nginx詳解❤️,附建議收藏nginx 服務配置詳細介紹

2.5.5 基于 使用者通路 認證

  • nginx認證子產品:

    ngx_http_auth_basic_module

  • 舉例配置
    location / {
             auth_basic           "closed site";    --- 開啟認證功能(歡迎資訊)
             auth_basic_user_file conf/htpasswd;    --- 加載使用者密碼檔案,密碼檔案存放路徑
          }
          密碼檔案存放路徑,推薦相對路徑
               
  • 具體詳細配置過程
    第一個曆程: 編寫虛拟主機配置檔案
    [[email protected]_server01/etc/nginx]# cat conf.d/www.conf 
    server {
      listen      80;
      server_name  www.hbs.com;
      location / {
          root   /usr/share/nginx/html/www;
          index  index.html;
          auth_basic   "歡迎來到王者榮耀!";
          auth_basic_user_file  passwd/passwd;        #passwd目錄下的passwd密碼檔案
      }
    }
               
    第二個曆程: 建立密碼檔案(檔案中密碼資訊必須是密文的)
    # 建立 一個目錄,存放密碼檔案
    [[email protected]_server01/etc/nginx]# mkdir passwd
    
    # 檢查是否有htpasswd 密碼工具,沒有yum 安裝httpd-tools
    [[email protected]_server01/etc/nginx/passwd]# rpm -qf `which htpasswd` 
    httpd-tools-2.4.6-97.el7.centos.x86_64
    [[email protected]_server01/etc/nginx/passwd]# 
    
    # 生成密碼檔案
    [[email protected]_server01/etc/nginx/passwd]# htpasswd -bc passwd hbs 123456
    Adding password for user hbs
    [[email protected]_server01/etc/nginx/passwd]# cat passwd 
    hbs:$apr1$7WaamHGp$ENgUQ2yncebNZpFtGbRyX.
    [[email protected]_server01/etc/nginx/passwd]#
    
    # 檢視生成的使用者及密碼
    [[email protected]_server01/etc/nginx/passwd]# cat passwd 
    hbs:$apr1$7WaamHGp$ENgUQ2yncebNZpFtGbRyX.
    [[email protected]_server01/etc/nginx/passwd]# 
               
    這樣就可以直接測試,但是由于這樣的密碼檔案具有較高的權限,不安全,是以涉及到修改密碼檔案,及檔案屬主。如果不修改檔案權限,則不安全。
  • 測試
  • ❤️爆肝萬字整理的綜合架構web服務之nginx詳解❤️,附建議收藏nginx 服務配置詳細介紹
  • ❤️爆肝萬字整理的綜合架構web服務之nginx詳解❤️,附建議收藏nginx 服務配置詳細介紹
  • ❤️爆肝萬字整理的綜合架構web服務之nginx詳解❤️,附建議收藏nginx 服務配置詳細介紹
  • 修改檔案權限
    [[email protected]_server01/etc/nginx/passwd]# chmod 600 ./passwd
               
  • 測試
  • ❤️爆肝萬字整理的綜合架構web服務之nginx詳解❤️,附建議收藏nginx 服務配置詳細介紹
  • 報500問題原因
  • ❤️爆肝萬字整理的綜合架構web服務之nginx詳解❤️,附建議收藏nginx 服務配置詳細介紹
  • 解決問題方法
    [[email protected]_server01/etc/nginx/passwd]# chown nginx ./passwd
               
  • 測試
  • ❤️爆肝萬字整理的綜合架構web服務之nginx詳解❤️,附建議收藏nginx 服務配置詳細介紹

2.5.6 利用nginx服務搭建網站檔案共享伺服器–index of

  • 檔案共享
    如何利用nginx服務搭建檔案共享呢,比如像 阿裡鏡像網站那樣,輸入域名就可以看到很多目錄,打開還可以 下載下傳呢
  • ❤️爆肝萬字整理的綜合架構web服務之nginx詳解❤️,附建議收藏nginx 服務配置詳細介紹
  • 操作步驟
    第一個步: 編寫配置檔案(開啟autoindex子產品)
    server {
      listen      80;
      server_name  www.hbs.com;
      location / {
          root   /usr/share/nginx/html/www;
          auth_basic   "歡迎來到王者榮耀!";
          auth_basic_user_file  passwd/passwd;
          autoindex on;                  # 開啟autoindex 子產品即可。
      }
    }
               
    第二步:重新開機服務,如果有首頁,将首頁删除并制造測試資料
    # 準備好的測試資料
    [[email protected]_server01/usr/share/nginx/html/www]# ls
    Centos  Centos6.5  Centos6.9  Centos7.1  Centos7.2  hbs.txt  index.html.backup
    
    # 重新開機nginx 服務
    [[email protected]_server01/usr/share/nginx/html/www]# systemctl restart nginx
               
    此時測試,我們隻有檢視的權限,如果想下載下傳,還學要修改

    mime.types

    檔案。

    mime.types媒體資源類型檔案作用

    檔案中有的擴充名資訊資源, 進行通路時會直接看到資料資訊 txt

    檔案中沒有的擴充名資訊資源, 進行通路時會直接下載下傳資源 php

  • ❤️爆肝萬字整理的綜合架構web服務之nginx詳解❤️,附建議收藏nginx 服務配置詳細介紹
  • 賦予下載下傳權限,修改mime.types 配置檔案
    修改 mime.types配置檔案,搜尋txt,将txt 改成php 就可以下載下傳了。
               
  • ❤️爆肝萬字整理的綜合架構web服務之nginx詳解❤️,附建議收藏nginx 服務配置詳細介紹
  • 測試
  • ❤️爆肝萬字整理的綜合架構web服務之nginx詳解❤️,附建議收藏nginx 服務配置詳細介紹

2.5.7 nginx 解決首頁亂碼問題

  • 設定成utf-8
    server {
       listen      80;
       server_name  www.hbs.com;
       location / {
           root   /usr/share/nginx/html/www;
           auth_basic   "歡迎來到王者榮耀!";
           auth_basic_user_file  passwd/passwd;
           charset utf-8;                  
       }
    }
    
    location 添加 charset utf-8; 
               

2.5.8 利用nginx服務搭配置檔案别名功能

  • 配置别名

    這裡就是比如你的域名很長,你想配置短一點的域名例如:

    www.hbs.com 你配一個 bs.com的别名

    1.修改配置檔案

    server_name www.hbs.com bs.com
               
    2.重新開機nginx 服務
    [[email protected]_server01/etc/nginx]# systemctl restart nginx
               
    3.修改hosts 檔案
  • ❤️爆肝萬字整理的綜合架構web服務之nginx詳解❤️,附建議收藏nginx 服務配置詳細介紹
  • ❤️爆肝萬字整理的綜合架構web服務之nginx詳解❤️,附建議收藏nginx 服務配置詳細介紹

2.5.9 利用nginx狀态子產品功能對網站進行監控

  • 開啟監控子產品ngx_http_stub_status_module
    location = /basic_status {
            stub_status;
        }
    ===========================
    這裡我在 conf.d 目錄建立了一個關于狀态的站點 status.conf
    [[email protected]_server01/etc/nginx/conf.d]# cat status.conf 
      server {
         listen    80;
         server_name  status.oldboy.com
         stub_status;
    }
    
    # 平滑啟動nginx
    [[email protected]_server01/etc/nginx/conf.d]# systemctl reload nginx
    
    添加hosts 域名
               
  • 通路測試
  • ❤️爆肝萬字整理的綜合架構web服務之nginx詳解❤️,附建議收藏nginx 服務配置詳細介紹

    監控擷取參數說明

    ​ Active connections: 激活的連接配接數資訊 4000使用者 3500

    ​ accepts: 接收的連接配接數彙總(綜合) TCP

    ​ handled: 處理的連接配接數彙總(綜合) TCP

    ​ requests: 總計的請求數量 HTTP協定請求

    ​ Reading: nginx服務讀取請求封包的數量 100人點餐

    ​ Writing: nginx服務響應封包資訊數量 100人響應

    ​ Waiting: nginx隊列機制,要處理(讀取或者響應儲存進行儲存) 監控

2.5.10 nginx 日志功能配置及錯誤日志介紹

  • 通路日志

    /var/log/nginx/access.log ngx_http_log_module

  • 錯誤日志

    /var/log/nginx/error.log --- Core functionality

    通路日志介紹
    # 定義日志内容格式
    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '   
                         '$status $body_bytes_sent "$http_referer" '
                         '"$http_user_agent" "$http_x_forwarded_for"';
                         
       access_log  /var/log/nginx/access.log  main;    #調用日志格式                            
    
    $remote_addr   			    顯示使用者通路源IP位址資訊
       $remote_user            顯示認證的使用者名資訊
    [$time_local]           顯示通路網站時間
    "$request"              請求封包的請求行資訊
       $status                 使用者通路網站狀态碼資訊
    $body_bytes_sent        顯示響應的資料尺寸資訊
    $http_referer           記錄調用網站資源的連接配接位址資訊(防止使用者盜鍊)                    
    www.hbs.com---access.log--->blog.hbs.com到www.hbs.com的連接配接--->http_referer(連結)
    $http_user_agent        記錄使用者使用什麼用戶端軟體進行通路頁面的  (谷歌 火狐 IE 安卓 iphone)
    $http_x_forwarded_for   負載均衡
    
    [[email protected]_server01/var/log/nginx]# tail -f /var/log/nginx/www_access.log 
    10.0.0.129 - - [02/Sep/2021:17:52:41 +0800] "GET / HTTP/1.1" 401 179 "-" "Mozilla/5.0 (Windows NT 6.1; rv:91.0) Gecko/20100101 Firefox/91.0" "-"
               

    錯誤日志的配置及 錯誤級别

    Syntax: error_log file [level]; 指定錯誤日志路徑以及錯誤日志記錄的級别

    Default: error_log logs/error.log error;

    Context: main, http, mail, stream, server, location

    error_log /var/log/nginx/error.log warn;

    錯誤級别:

    debug :通知級别: 更加重要的資訊進行通知說明

    warn :警告級别: 可能出現了一些錯誤資訊,但不影響服務運作

    error :錯誤級别: 服務運作已經出現了錯誤,需要進行糾正 推薦選擇

    crit :嚴重級别: 必須進行修改調整

    alert :嚴重警告級别: 即警告,而且必須進行錯誤修改

    emerg :災難級别: 服務已經不能正常運作 資訊越少

    級别越低,顯示日志越少,級别越高顯示日志越多。通常推薦 error 級别。

  • 不同的網站都配置自己的通路日志
    server {
       listen      80;
       server_name  www.hbs.com bs.com;
       access_log  /var/log/nginx/www_access.log  main;  #調用日志  
       location / {
           root   /usr/share/nginx/html/www;
           auth_basic   "歡迎來到王者榮耀!";
           auth_basic_user_file  passwd/passwd;
    #       autoindex on;
       }
    }
    # 平滑重新開機
    [[email protected]_server01/etc/nginx]# systemctl restart nginx 
    
    # 日志裡會自動生成 www通路日志
    [[email protected]_server01/var/log/nginx]# ls /var/log/nginx/www_access.log 
    /var/log/nginx/www_access.log
    [[email protected]_server01/var/log/nginx]# 
               

2.5.11 利用nginx實作頁面跳轉功能

  • 利用rewrite子產品是跳轉功能:

    http_rewrite_module

  • 文法
    Syntax:	rewrite regex replacement [flag];   rewite  比對的正則資訊  替換成什麼資訊
    Default:	—
    Context:	server, location, if
               
  • 舉例配置(将hbs.com—>轉換到blog.hbs.com)
    rewrite blog.hbs.com/(.*) http://blog.hbs.com/$1 permanent;   #重寫規則配置
    
    
    baidu.com   /  index.html       跳轉方式
    www.baidu.com/index.html
    跳轉方式:
    	永久跳轉:  permanent   301    會将跳轉資訊進項緩存
    	臨時跳轉:  redirect    302    不會緩存跳轉資訊
    	
    編寫步驟
    出現無限跳轉如何解決:
    	第一種方法: 利用不同server區塊配置打破循環
    	server {
    	   server_name  hbs.com;
    	   rewrite ^/(.*) http://blog.hbs.com/$1 permanent;
    	}
    	
    	第二種方法: 利用if判斷實作打破循環
    	if ($host ~* "^hbs.com$") {
          rewrite ^/(.*) http://blog.hbs.com/$1 permanent;
        }
    
               
  • ❤️爆肝萬字整理的綜合架構web服務之nginx詳解❤️,附建議收藏nginx 服務配置詳細介紹
  • ❤️爆肝萬字整理的綜合架構web服務之nginx詳解❤️,附建議收藏nginx 服務配置詳細介紹
  • 301 與302 的差別
  • ❤️爆肝萬字整理的綜合架構web服務之nginx詳解❤️,附建議收藏nginx 服務配置詳細介紹

2.5.12 nginx 防盜鍊配置介紹

  • 什麼是防盜鍊

    防盜鍊的含義:網站内容部署自己伺服器上,而通過技術手段,繞過别人放廣告有利益的最終頁,直接在自己的有廣告有利益的頁面上向最終使用者提供此内容。 常常是一些名不見經傳的小網站來盜取一些有實力的大網站的位址(比如一些音樂、圖檔、軟體的下載下傳位址)然後放置在自己的網站中,通過這種方法盜取大網站的空間和流量。

    這樣的話,我們會看到每天通路量很大,占用很多不必要的帶寬,浪費資源,是以我們需要做一些限制。

    防盜鍊其實就是采用伺服器端程式設計,通過url過濾技術實作的防止盜鍊的軟體。

  • 防盜鍊配置
    Nginx server防盜鍊配置如下:
    server {
            listen       80;
            server_name  localhost  www.hbs.com;
            location / {
                root   /usr/share/nginx/html/www;
                index  index.html index.htm;
            }
            location ~* \.(gif|jpg|png|swf|flv)$ {
                    valid_referers  none  blocked  *.hbs.com;
                    root   html;
            if ($invalid_referer) {
                      return 403;
                    }
            }
    
        }
    
    
    補充:
    第一行:gif|jpg|png|swf|flv表示對gif、jpg、png、swf、flv字尾的檔案實行防盜鍊
    
    第二行:hbs.com  表示對hbs.com這個來路進行判斷
    if{}裡面内容的意思是,如果來路不是指定來路就跳轉到錯誤頁面,當然直接傳回403也是可以。
    或者如下設定也可以:
    
    location ~* \.(gif|jpg|png|swf|flv)$
    if ($host  !=’*.hbs.com’) {
    return 403;
    }
    
               

2.5.13 部署搭建網站常見錯誤

  • 01.網站服務配置檔案編寫不正确
    404 錯誤
    		解決方法一: 修改nginx配置檔案---location
    		解決方法二: 在站點目錄中建立相應目錄或檔案資料資訊
    403 錯誤
    		解決方法一: 不要禁止通路
    		解決方法二: 因為沒有首頁檔案
        
               
  • 02.DNS資訊配置不正确
  • 03. nginx配置檔案修改一定要重新開機服務;
  • 04.做實驗,要清除浏覽器緩存

三、nginx 性能優化

3.1 Nginx 性能優化實戰

  • 優化說明
    随着通路量的不斷增加,需要對Nginx和核心做相應的優化來滿足高并發使用者的通路,那下面在單台Nginx伺服器來優化相關參數。通常從配置檔案及核心做優化。
3.1.1 配置檔案優化介紹
  • 配置檔案優化
    # nginx程序數,建議按照cpu核數目來指定,一般為它的2倍。
    worker_processes 8;
    
    # 為每個程序配置設定cpu,上例中将8個程序配置設定到8個cpu,當然可以寫多個,或者将一
    個程序配置設定到多個cpu。
    worker_cpu_affinity 00000001 00000010 00000100 00001000 00010000 
    00100000 01000000 10000000;
    
    # 這個指令是指當一個nginx程序打開的最多檔案描述符數目,理論值應該是最多打
    開檔案數(ulimit -n)與nginx程序數相除,但是nginx配置設定請求并不是那麼均勻
    ,是以最好與ulimit -n的值保持一緻。
    worker_rlimit_nofile 102400;
    
    
    # 使用epoll的I/O模型。epoll是Linux核心為處理大批量檔案描述符而作了改進的
    poll,它能顯著提高程式在大量并發連接配接中隻有少量活躍的情況下的系統CPU利用
    率。
    use epoll;
    
    # 每個程序允許的最多連接配接數,理論上每台nginx伺服器的最大連接配接數為
    worker_connections 102400;
    
    # keepalive逾時時間,用戶端到伺服器端的連接配接持續有效時間,當出現對伺服器的後
    keepalive_timeout 60;
    繼請求時,keepalive-timeout功能可避免建立或重建立立連接配接。
    
    # 用戶端請求頭部的緩沖區大小,這個可以根據你的系統分頁大小來設定,一般一個請求的頭部大小不會超過1k,不過由于一般系統分頁都要大于1k,是以這裡設定為分頁大小。分頁大小可以用指令getconf PAGESIZE取得。
    client_header_buffer_size 4k;
    
    #這個将為打開檔案指定緩存,預設是沒有啟用的,max指定緩存數量,建議和打開
    檔案數一緻,inactive是指經過多長時間檔案沒被請求後删除緩存。
    open_file_cache max=102400 inactive=20s;
    
    # 這個是指多長時間檢查一次緩存的有效資訊。
    open_file_cache_valid 30s;
    
    #open_file_cache指令中的inactive參數時間内檔案的最少使用次數,如果超過這
    個數字,檔案描述符一直是在緩存中打開的,如上例,如果有一個檔案在inactive
    時間内一次沒被使用,它将被移除。
    open_file_cache_min_uses 1;
    
    
               
3.1.2 核心優化介紹
  • linux 核心優化
    # timewait的數量,預設是180000。
    net.ipv4.tcp_max_tw_buckets = 10000
    
    #允許系統打開的端口範圍。
    net.ipv4.ip_local_port_range = 1024 65000
    
    #啟用timewait快速回收。
    net.ipv4.tcp_tw_recycle = 1
    
    # 啟用timewait快速回收。
    net.ipv4.tcp_tw_reuse = 1
    
    # 開啟SYN Cookies,當出現SYN等待隊列溢出時,啟用cookies來處理。
    net.ipv4.tcp_syncookies = 1
    
    
               

3.2 日志切割

  • 日志切割方法一: 利用腳本實作切割
    #!/bin/bash
     mv /var/log/nginx/access.log  /var/log/nginx/access_$(date +%F).log
     systemctl restart nginx
               
    *日志切割方法二: 利用專用檔案切割程式–logrotate
    vim /etc/logrotate.conf
       # rotate log files weekly
       weekly                     --- 定義預設日志切割的周期
       
       # keep 4 weeks worth of backlogs
       rotate 4                   --- 定義隻保留幾個切割後的檔案
       
       # create new (empty) log files after rotating old ones
       create                     --- 建立出一個相同的源檔案
       
       # use date as a suffix of the rotated file
       dateext                    --- 定義角标(擴充名稱資訊)
       
       # uncomment this if you want your log files compressed
       #compress                  --- 是否對切割後的檔案進行壓縮處理
       
       # RPM packages drop log rotation information into this directory
       include /etc/logrotate.d   --- 加載包含/etc/logrotate.d/目錄中檔案配置
       
       # no packages own wtmp and btmp -- we'll rotate them here
       /var/log/wtmp {            --- 單獨對某個檔案進行切割配置
           monthly
           create 0664 root utmp
       	   minsize 1M             --- 最小大小為1M,小于1M不進行切割              
           rotate 1
       }
       
       /var/log/btmp {
           missingok
           monthly
           create 0600 root utmp
           rotate 1
       }
    	   
               
    後續會詳細講解日志切割腳本

3.3 nginx 性能壓測試

  • 常用壓力測試工具
    常見的壓測工具包括:ab、webbench、loadrunner、jmeter.
    ab工具網站壓力測試指令:
    格式: ./ab [options] [http://]hostname[:port]/path
    -n 測試會話中所執行的請求個數,預設時,僅執行一個請求
    -c 一次産生的請求個數。預設是一次一個
    -t 測試所進行的最大秒數
    -v 設定顯示資訊的詳細程度 - 4或更大值會顯示頭資訊, 3或更大值可以顯示響應代碼(404, 200等), 2或更大值可以顯示警告和其他資訊。 -V 顯示版本号并退出。
    4個比較長用的參數 若有其他需要man下吧
    一般工作中我們隻用-n 和 -c:
    例:./ab -c 10 -n 1000 http://www.jfedu.net/index.php
    -n 1000 表示總請求數為1000
    -c 10   表示并發使用者數為10
    ab -c 10 -n 100 http://blog.hbs.com/index.html 表示這些請求的目标url。
    
               
  • 壓力測試結果
    [[email protected]_server01~]# ab -c 10 -n 100 http://blog.hbs.com/index.html
    This is ApacheBench, Version 2.3 <$Revision: 1430300 $>
    Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
    Licensed to The Apache Software Foundation, http://www.apache.org/
    
    Benchmarking blog.hbs.com (be patient).....done
    
    
    Server Software:        nginx/1.20.1
    Server Hostname:        blog.hbs.com
    Server Port:            80
    
    Document Path:          /index.html
    Document Length:        188 bytes              #HTTP響應資料的正文長度
    
    Concurrency Level:      10
    Time taken for tests:   0.062 seconds          #所有這些請求處理完成所花費的時間
    Complete requests:      100                    #完成請求數
    Failed requests:        0                      #失敗請求數
    Write errors:           0
    Total transferred:      42000 bytes            #網絡總傳輸量
    HTML transferred:       18800 bytes            #HTML内容傳輸量
    Requests per second:    1612.57 [#/sec] (mean) #吞吐量-每秒請求數
    Time per request:       6.201 [ms] (mean)
    #伺服器收到請求,響應頁面要花費的時間 
    
    Time per request:       0.620 [ms] (mean, across all concurrent requests) 
    #并發的每個請求平均消耗時間 
    
    
    Transfer rate:          661.40 [Kbytes/sec] received
    # 平均每秒網絡上的流量,可以幫助排除是否存在網絡流量過大導緻響應時間延長的問題。
    
    Connection Times (ms)
                  min  mean[+/-sd] median   max
    Connect:        0    0   1.7      0      18
    Processing:     0    6  10.9      1      35
    Waiting:        0    6  10.9      1      35
    Total:          0    6  11.0      1      35
    
    Percentage of the requests served within a certain time (ms)
      50%      1
      66%      1
      75%      2
      80%     18
      90%     35
      95%     35
      98%     35
      99%     35
     100%     35 (longest request)
    [[email protected]_server01~]# 
               
  • ❤️爆肝萬字整理的綜合架構web服務之nginx詳解❤️,附建議收藏nginx 服務配置詳細介紹

3.4 lnmp 架構源碼部署

  • lnmp 源碼分離部署教程
  • yum 安裝lnmp搭建網站
  • lamp源碼部署至搭建部落格教程

總結

這是部落客花費2天左右,熬夜爆肝這篇萬字長文,将企業常用的nginx 配置都詳細的介紹下來了。

無論你是正在企業運維還是想步入linux 運維行業,都可以收藏,根據博文,一步步操作。加深對nginx的了解。

nginx 子產品很豐富,目前常用的都介紹了。詳細的還要去參考官方說明文檔www.org

如果喜歡部落客,可以私信我,一起交流、讨論技術!

繼續閱讀