一、Nginx配置文件簡介

Nginx配置文件通常位于/etc/nginx或/usr/local/nginx目錄下,主配置文件名為nginx.conf。配置文件包含了Nginx服務(wù)器運行所需的所有信息,如監(jiān)聽端口、虛擬主機、靜態(tài)資源路徑等。用戶可以根據(jù)自己的需求修改配置文件,以實現(xiàn)自定義的網(wǎng)站功能和性能優(yōu)化。

二、Nginx主要配置文件塊

1. http模塊配置

Nginx的http模塊負(fù)責(zé)處理HTTP請求和響應(yīng),包括負(fù)載均衡、反向代理等。以下是http模塊的主要配置項:

worker_processes:工作進(jìn)程數(shù),通常設(shè)置為服務(wù)器CPU核心數(shù)+1。

worker_connections:每個工作進(jìn)程允許的最大連接數(shù),通常設(shè)置為服務(wù)器物理內(nèi)存大小除以1024。

keepalive_timeout:長連接超時時間,單位為秒。

sendfile:是否開啟高效文件傳輸模式,推薦開啟。

tcp_nopush:是否開啟tcp_nopush,減少網(wǎng)絡(luò)擁塞。

open_file_cache:是否開啟文件緩存,提高磁盤讀寫性能。

gzip:是否開啟Gzip壓縮,減小傳輸數(shù)據(jù)量。

gzip_min_length:啟用Gzip壓縮的最小文件長度,默認(rèn)為1k。

gzip_comp_level:Gzip壓縮級別,范圍為1-9,默認(rèn)為5。

gzip_types:需要壓縮的文件類型,用逗號分隔,如text/html,image/jpeg等。

gzip_vary:是否在響應(yīng)頭中添加"Vary: Accept-Encoding",告訴客戶端緩存哪些類型的壓縮可以提高性能。

gzip_disable:禁用gzip壓縮。

2. stream模塊配置

Nginx的stream模塊負(fù)責(zé)處理TCP和UDP連接,以下是stream模塊的主要配置項:

upstream:后端服務(wù)器組配置,包括名稱、地址、權(quán)重等。

server:虛擬主機配置,包括監(jiān)聽端口、域名、根目錄等。

location:站點配置,包括代理、靜態(tài)資源路徑等。

proxy_pass:反向代理配置,將流量轉(zhuǎn)發(fā)到后端服務(wù)器。

proxy_set_header:設(shè)置HTTP響應(yīng)頭。

proxy_connect_timeout:連接后端服務(wù)器超時時間,單位為毫秒。

proxy_read_timeout:讀取后端服務(wù)器響應(yīng)超時時間,單位為毫秒。

proxy_send_timeout:發(fā)送后端服務(wù)器響應(yīng)超時時間,單位為毫秒。

client_body_buffer_size:客戶端請求體緩沖區(qū)大小,單位為字節(jié)。

client_header_buffer_size:客戶端請求頭緩沖區(qū)大小,單位為字節(jié)。

client_max_body_size:客戶端請求主體最大尺寸,超過該值的請求將被拒絕。

client_body_temp_path:客戶端請求體臨時存儲路徑,如果設(shè)置了該值,當(dāng)請求主體大于client_max_body_size時,會將請求主體寫入到該路徑下的臨時文件中。

三、實例解析與優(yōu)化

假設(shè)我們有以下兩個虛擬主機配置示例:

# 虛擬主機1配置
upstream backend {
    server backend1.example.com weight=3;
    server backend2.example.com;
}
server {
    listen 80;
    server_name www.domain1.com;
    root /var/www/domain1;
    location / {
        proxy_pass http://backend;
    }
}
	
# 虛擬主機2配置
upstream backend {
    server backend1.example.com;
    server backend2.example.com weight=1;
}
server {
    listen 80;
    server_name www.domain2.com;
    root /var/www/domain2;
    location / {
        proxy_pass http://backend;
    }
}

在這個示例中,兩個虛擬主機都使用了名為backend的上游服務(wù)器組。為了實現(xiàn)負(fù)載均衡,我們在上游服務(wù)器組中配置了兩個后端服務(wù)器。然而,由于沒有設(shè)置weight參數(shù),導(dǎo)致兩個服務(wù)器的權(quán)重相同,因此它們的負(fù)載壓力相等。這種情況下,可以考慮增加其中一個服務(wù)器的權(quán)重,以實現(xiàn)更合理的負(fù)載分配。例如,將第二個服務(wù)器的權(quán)重設(shè)置為2:

# 將第二個服務(wù)器的權(quán)重設(shè)置為2(優(yōu)先級更高)
upstream backend {
    server backend1.example.com weight=2; # 更優(yōu)選的服務(wù)器將獲得更多的連接請求
    server backend2.example.com; # 其他服務(wù)器將按比例分配剩余連接請求
}

此外,我們還可以根據(jù)實際情況調(diào)整其他參數(shù),如worker_processes、client_max_body_size等,以達(dá)到更好的性能優(yōu)化效果。