Nginx深入:nginx功能模塊、目錄結構及配置文件詳解

来源:https://www.cnblogs.com/AndrewNotes/archive/2023/08/08/17613735.html
-Advertisement-
Play Games

### Nginx功能模塊說明 **1、Nginx 核心功能模塊(Core functionality)** **Nginx核心功能模塊負責Nginx的全局應用,主要對應主配置文件的核心層(Main層)和事件(Events)層,這裡有很多 Nginx 必需的全局參數配置。** 有關核心功能模塊的官方 ...


Nginx功能模塊說明

1、Nginx 核心功能模塊(Core functionality)
Nginx核心功能模塊負責Nginx的全局應用,主要對應主配置文件的核心層(Main層)和事件(Events)層,這裡有很多 Nginx 必需的全局參數配置。

有關核心功能模塊的官方文檔為:http://nginx.org/en/docs/ngx_core_module.html

2、標準的 HTTP 功能模塊集合
這些標準的 HTTP 功能模塊,雖然不是 Nginx 軟體所必需的,但都是很常用的,因此絕大部分預設情況都會自動安裝到 Nginx 軟體中,見下表。保留軟體的預設配置就好,不建議改動,除非你明確知道你在做什麼,有什麼額外影響。

企業場景常用的 Nginx HTTP 功能模塊彙總

Nginx HTTP 功能模塊 模塊說明
ngx_http_core_module 包括一些核心的 HTTP 參數配置,對應 Nginx 的配置為 HTTP 區塊部分
ngx_http_access_module 訪問控制模塊,用來控制網站用戶對 Nginx 的訪問
ngx_http_gzip_module 壓縮模塊,對 Nginx 返回的數據壓縮,屬於性能優化模塊
ngx_http_fastcgi_module FastCGI 模塊,和動態應用相關,如 PHP
ngx_http_proxy_module proxy 代理模塊
ngx_http_upstream_module 負載均衡模塊,可以實現網站的負載均衡功能及節點的健康檢查
ngx_http_rewrite_module URL 地址重寫模塊(偽靜態)
ngx_http_limit_conn_module 限制用戶併發連接數及請求數模塊
ngx_http_limit_req_module 根據定義的 key 限制 Nginx 請求過程的速率
ngx_http_log_module 訪問日誌模塊,以指定的格式記錄 Nginx 客戶訪問日誌等信息
ngx_http_auth_basic_module web 認證模塊,設置 Web 用戶通過賬號索碼訪問 Nginx
ngx_http_ssl_module ssl模塊,用於加密的 HTTP 連接,如 https
ngx_http_stub_status_module 記錄 Nginx 基本訪問狀態信息等的模塊

在生產環境中,配置、調整及優化 Nginx 軟體,主要就是根據這此模塊的功能修改相應的參數來實現的。

官方文檔:https://nginx.org/en/docs/

Nginx目錄結構及配置文件介紹

註:以下介紹基於源碼編譯安裝的nginx

[root@web01 ~]# tree /app/nginx
/app/nginx
├── client_body_temp
├── conf                           #//nginx所有的配置文件的目錄,重要
│   ├── fastcgi.conf               #fastcgi相關參數的配置文件
│   ├── fastcgi.conf.default          
│   ├── fastcgi_params             #fastcgi的參數文件
│   ├── fastcgi_params.default
│   ├── koi-utf
│   ├── koi-win
│   ├── mime.types                 #媒體類型文件
│   ├── mime.types.default
│   ├── nginx.conf                 #nginx預設的主配置文件
│   ├── nginx.conf.default
│   ├── scgi_params                #scgi相關參數文件
│   ├── scgi_params.default
│   ├── uwsgi_params               #uwsgi相關參數文件,配置Python環境可能會用到
│   ├── uwsgi_params.default
│   └── win-utf
├── fastcgi_temp                   #//fastcgi臨時數據目錄
├── html                           #//這是編譯安裝時nginx的預設站點目錄
│   ├── 50x.html                   #錯誤頁面優雅替代顯示文件,例如:出現 502 錯誤時會調用此頁面
│   └── index.html                 #預設的首頁文件,在實際環境中,大家習慣用(註意字眼不是必須)                                               index.html、index.php、index.jsp來做網站的首頁文件。
├── logs                           #//nginx預設的日誌存放目錄,包括錯誤日誌及訪問日誌
│   ├── access.log                 #訪問日誌
│   ├── error.log                  #錯誤日誌
│   └── nginx.pid                  #nginx的pid文件,nginx進程啟動後,會把所有進程的pid號寫到此文件
├── proxy_temp                     #//臨時目錄
├── sbin                           #//命令目錄
│   └── nginx                      #啟動命令
├── scgi_temp
└── uwsgi_temp

# 註:
所有default結尾的都是備份文件,未註釋的生產很少用,可以不必理會。
koi-utf、koi-win、win-utf:這3個文件是 KOI8-R 編碼轉換的映射文件,因為 Nginx 的作者是俄羅斯人,在 Unicode 流行之前,KOI8-R 是使用最為廣泛的俄語編碼。

PS:以yum官方源安裝的nginx配置文件是在/etc/nginx下

[root@web02 ~]# tree /etc/nginx/
/etc/nginx/
├── conf.d
│   └── default.conf
├── default.d
├── fastcgi_params
├── mime.types
├── modules -> ../../usr/lib64/nginx/modules
├── nginx.conf
├── nginx.conf.rpmsave
├── scgi_params
└── uwsgi_params

Nginx的主配置文件

Nginx主配置文件nginx.conf是一個純文本類型的文件,整個配置文件是以區塊的形式組織的。一般,每個區塊以一對大括弧{}來表示開始與結束。配置文件中main區塊(層)位於最上面,main層後面有Events層、http層等,在http層中又包含一個或多個server層,每個server層中又可有一個或多個location層。

nginx.conf是Nginx最重要的配置文件之一。必須搞定它。下麵以yum官方源安裝的nginx主配置文件為例詳解。

[root@web02 ~]# grep -v '^$|#' /etc/nginx/nginx.conf
## 核心層(main層)
user  nginx;                    # nginx的啟動用戶         
worker_processes  auto;         # nginx運行的work進程數量(建議與CPU數量一致或auto)
                                    auto:自動根據cpu的核心數來啟動對應的工作進程數
error_log  /var/log/nginx/error.log notice;  # nginx錯誤日誌存放路徑,notice為錯誤日誌級別
pid        /var/run/nginx.pid;   # 啟動後進程號存放路徑

## 事件層(events層)
events {
    worker_connections  1024;   # 每個worker進程支持的最大連接數
}

## 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;                            // 開啟高效文件傳輸
    keepalive_timeout  65;                         // 長連接超時時間
    include /etc/nginx/conf.d/*.conf;              #//包含nginx其他子配置文件(網站虛擬機配置文件)

## server層
#使用Server配置網站, 每個Server{}標簽對應一個獨立的網站站點(所謂虛擬主機)
server {
        listen       80;                 # 監聽埠,預設80
        server_name  abc.com alias; # 提供服務的的功能變數名稱及別名(比如abc.org,訪問這個同abc.com)
        access_log  access.log;          # 該網站的訪問日誌
 
        location / {                        # 控制網站訪問路徑
            root   /usr/share/nginx/html;   # 存放網站源代碼的位置
            index  index.html;              # 預設返回網站的文件
        }
    }
    ...
    # 第二個虛擬主機配置
server {
    ...
    }
} # http層結束

########## 註意 ##########
nginx配置文件,每一行都以';'結尾
http{} 標簽主要用來解決用戶的請求與響應。
server{} 標簽主要用來響應具體的某一個網站。
location{} 標簽主要用於匹配網站具體URL路徑。

Nginx的其他配置文件

Nginx配合PHP動態服務相關配置文件為fastcgi.conf、fastcgi_params
Nginx配合Python動態服務相關配置文件為uwsgi_params

Nginx日誌管理

錯誤日誌配置

Nginx 會把自身運行的故障信息及用戶訪問的日誌信息記錄到指定的日誌文件里。
# 錯誤日誌在main層配置
格式:
error_log  file level;  # file為錯誤日誌存放目錄,level為錯誤日誌級別

其中,關鍵字error_log不能改變,存放日誌文件的目錄可以指定任意,錯誤日誌級別常見的有 [debug |info |notice |warn |error |crit |alert |emerg],級別越高記錄的信息越少,生產場景一般是 warn |error |crit 這三個級別之一,比如可以用error。註意不要配置 info 等較低級別.會帶來巨大磁碟 I/O 消耗。

其他可以設置error_log的層:http、server、location

訪問日誌配置

Nginx會把每個用戶訪問網站的日誌信息記錄到指定的日誌文件里,供網站提供者分析用戶瀏覽行為等,此功能由ngx_http_log_module模塊負責。

Nginx訪問日誌主要由以下兩個參數控制:
log_format:用來定義日誌格式(可定義多種格式,取不同名字)
access_log:用來指定日誌路徑及使用的格式

# 以上面主配置文件中的配置為例:(預設參數)
位置:http層內

    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 - $remote_user [$time_local] "$request" '  
 $remote_addr  遠端的IP(上一訪問你的IP)
 $remote_user  登錄的用戶(網頁沒有登錄用戶則為空)
 [$time_local] 記錄訪問時間和時區
 "$request"    http請求方式                     

'$status $body_bytes_sent "$http_referer" '
$status  http狀態碼,記錄請求返回的信息
$body_bytes_sent 流量
"$http_referer"  跳轉地址(從哪個網站跳轉過來的)

'"$http_user_agent" "$http_x_forwarded_for"'
"$http_user_agent"  客戶端信息,如瀏覽器、手機客戶端等
"$http_x_forwarded_for"  當前端有代理伺服器時,設置Web節點記錄客戶端地址的配置,此參數生效的前提是代理伺服器上也要進行相關的x_forwarded_for設置

日誌管理實操

# 查看日誌
root@web01,172.16.1.7:~ # ll /var/log/nginx/
total 68
-rw-r----- 1 nginx adm 31262 Sep 28 11:39 access.log
-rw-r----- 1 nginx adm 33759 Sep 28 11:39 error.log


# 啟動服務後,瀏覽器打開10.0.0.7顯示nginx預設頁面,刷新一下,日誌便出來一條
[root@web01 ~]# curl 10.0.0.7
[root@web01 ~]# tail -f /var/log/nginx/access.log
10.0.0.7 - - [04/Aug/2023:06:20:32 +0800] "GET / HTTP/1.1" 200 615 "-" "curl/7.29.0" "-"
10.0.0.7 - - [04/Aug/2023:06:20:58 +0800] "GET / HTTP/1.1" 200 615 "-" "curl/7.29.0" "-"


root@web01,172.16.1.7:~ # tail -f /var/log/nginx/access.log
10.0.0.1 - - [29/Sep/2022:09:37:48 +0800] "GET / HTTP/1.1" 304 0 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36" "-"
10.0.0.1 - - [29/Sep/2022:09:37:48 +0800] "GET / HTTP/1.1" 200 615 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36" "-"



10.0.0.1                       客戶端IP,網卡
 -                             該網站不需要登錄,沒有用戶(對應第二個-)
[29/Sep/2022:09:37:48 +0800]   時間、時區
"GET / HTTP/1.1"               請求方式 請求URI HTTP協議版本號 
304   狀態碼(緩存,清緩存之後變200,代表正常訪問)   
0     流量,響應body的大小
"-"   無跳轉

"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36"  客戶端信息
"-"   沒有使用代理

本文來自博客園,作者:Andrew007,轉載請註明原文鏈接:https://www.cnblogs.com/AndrewNotes/p/17613735.html


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • LINQ是C#3.0引入的特性,讓處理對象就像執行SQL語句一樣簡單,對於提高C#開發效率有革命性的作用。 對於每個.NET開發者來說,掌握C#的LINQ知識點是非常重要的。LINQ是C#的一個強大的特性,它為數據查詢和操作提供了簡潔、統一的語法,使得數據處理變得更加直觀和靈活。 以下是.NET開發 ...
  • # Unity IUnityLinkerProcessor Unity IUnityLinkerProcessor是Unity引擎中的一個介面,它允許開發者在Unity項目構建時對代碼進行鏈接處理。這個介面可以用來優化項目構建大小,減少不必要的代碼和資源,提高項目的性能和載入速度。 ## 介面定義 ...
  • 博客推行版本更新,成果積累制度,已經寫過的博客還會再次更新,不斷地琢磨,高質量高數量都是要追求的,工匠精神是學習必不可少的精神。因此,大家有何建議歡迎在評論區踴躍發言,你們的支持是我最大的動力,你們敢投,我就敢肝 ...
  • 大家好,我是痞子衡,是正經搞技術的痞子。今天痞子衡給大家分享的是**藉助i.MXRT10xx系列INIT_VTOR功能可以縮短程式熱重啟時間**。 最近痞子衡寫了篇文章 [《i.MXRT從Serial NAND啟動時間測量》](https://www.cnblogs.com/henjay724/p/ ...
  • yum update更新報錯 Transaction Check Error 解決方法 yum update 引起錯誤Transaction Check Error的原因很多,要根據錯誤概要去判斷具體原因。 錯誤現象: 報錯內容: file /usr/share/man/man1/gtk-query ...
  • 哈嘍大家好,我是鹹魚 相信小伙伴們都知道在 Linux 中,安裝軟體一般有三種方式 * yum 安裝 * rpm 安裝 * 源碼編譯安裝 鹹魚平時三種安裝方式都會用,但是具體原理和區別卻沒有去深入瞭解過 結果上周部門剛來的新人問我這幾種安裝方式的時候,一下子把我問懵了 那麼今天鹹魚將會向小伙伴們介紹 ...
  • ## 開篇 現在流行的開源項目經歷了長時間的開發, 積累了大量的代碼, 想要一行一行地閱讀代碼去學習開源項目, 需要的時間成本是巨大的. 所以, 我們也需要用一種高效的方式去"閱讀"代碼. 電腦科學發展到現在, 產生了很多高效成熟的工具, 調試器就是其中之一(扯句題外話, 那些大牛程式員似乎就是喜 ...
  • 現代內核派系 巨集內核 關鍵功能(基本功能,不可裁剪、擴展)和服務功能(如文件系統、設備驅動、網路服務等,可裁剪、擴展)均在內核空間提供。運行效率高。擴展性較差。system call(系統調用)能夠先入內核態來使用內核提供的服務。 微內核 內核空間只提供關鍵功能,服務功能在用戶空間提供。運行效率較低 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...