### 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